Exemplo n.º 1
0
        public void AddContainer(IOptionContainer optionContainer)
        {
            if (_optionContainerLookup.ContainsKey(optionContainer))
            {
                throw new Exception("An options container should only be added once.");
            }

            List <OptionDefinition> options = new List <OptionDefinition>();

            options.AddRange(optionContainer.GetOptions());

            _optionContainerLookup.Add(optionContainer, options);

            if (optionContainer.IsDynamic)
            {
                var handler = new OptionContainerEventHandler(this, optionContainer);
                _optionContainerEventHandlerLookup.Add(optionContainer, handler);
            }

            if (options.Count > 0)
            {
                _options.AddRange(options);
                OnOptionsUpdated();
            }
        }
Exemplo n.º 2
0
        public static void PrintHelp(IOptionContainer options)
        {
            UsageBuilder usage = new UsageBuilder();

            usage.BeginSection("Name");
            usage.AddParagraph("Start Menu Organizer");
            usage.EndSection();

            usage.BeginSection("Synopsis");
            usage.AddParagraph("smoz.exe [arguments]");
            usage.EndSection();

            usage.BeginSection("Description");
            usage.AddParagraph(@"A tool of organize the Windows Start Menu, based on predefined rules.");
            usage.EndSection();

            usage.BeginSection("Arguments");
            usage.AddOptions(options);
            usage.EndSection();

            try
            {
                usage.ToText(Console.Out, OptStyle.Unix, true);
            }
            catch
            {
                usage.ToText(Console.Out, OptStyle.Unix, true, 90);
            }
        }
Exemplo n.º 3
0
        public void RemoveContainer(IOptionContainer optionContainer)
        {
            if (!_optionContainerLookup.ContainsKey(optionContainer))
            {
                return;
            }

            bool isDirty = false;
            var  list    = _optionContainerLookup[optionContainer];

            _optionContainerLookup.Remove(optionContainer);
            foreach (var op in list)
            {
                _options.Remove(op);
                isDirty = true;
            }

            OptionContainerEventHandler handler;

            if (_optionContainerEventHandlerLookup.TryGetValue(optionContainer,
                                                               out handler))
            {
                handler.Dispose();
                _optionContainerEventHandlerLookup.Remove(optionContainer);
            }

            if (isDirty)
            {
                OnOptionsUpdated();
            }
        }
Exemplo n.º 4
0
            public OptionContainerEventHandler(OptionsServiceImpl service, IOptionContainer container)
            {
                _container = container;
                _service   = service;

                container.OptionAdded   += ContainerOnOptionAdded;
                container.OptionRemoved += ContainerOnOptionRemoved;
            }
Exemplo n.º 5
0
 /// <summary>
 /// Add multiple options to the output
 /// </summary>
 /// <remarks>Can only be called if the active tag is "section"</remarks>
 /// <param name="optionContainer">Container with all the options
 /// for the program to document</param>
 public void AddOptions(IOptionContainer optionContainer)
 {
     BeginOptions();
     foreach (OptionDefinition opt in optionContainer.GetOptions())
     {
         AddOption(opt);
     }
     EndOptions();
 }
Exemplo n.º 6
0
        private void OptionsContainerOnOptionRemoved(IOptionContainer container, OptionDefinition optionDefinition)
        {
            List <OptionDefinition> options;

            if (!_optionContainerLookup.TryGetValue(container, out options))
            {
                Debug.LogWarning("[SRDebugger] Received event from unknown option container.");
                return;
            }

            if (options.Remove(optionDefinition))
            {
                _options.Remove(optionDefinition);
                OnOptionsUpdated();
            }
            else
            {
                Debug.LogWarning("[SRDebugger] Received option removed event from option container, but option does not exist.");
            }
        }
Exemplo n.º 7
0
        private void OptionsContainerOnOptionAdded(IOptionContainer container, OptionDefinition optionDefinition)
        {
            List <OptionDefinition> options;

            if (!_optionContainerLookup.TryGetValue(container, out options))
            {
                Debug.LogWarning("[SRDebugger] Received event from unknown option container.");
                return;
            }

            if (options.Contains(optionDefinition))
            {
                Debug.LogWarning("[SRDebugger] Received option added event from option container, but option has already been added.");
                return;
            }

            options.Add(optionDefinition);
            _options.Add(optionDefinition);
            OnOptionsUpdated();
        }
 private void SetContentOptions(IOptionContainer <Models.Content> destination, IOptionContainer <Models.Content> source)
 {
     optionService.SetOptions <ContentOption, Models.Content>(destination, source.Options);
 }
Exemplo n.º 9
0
 private void SetContentOptions(IOptionContainer<Models.Content> destination, IOptionContainer<Models.Content> source)
 {
     optionService.SetOptions<ContentOption, Models.Content>(destination, source.Options);
 }
Exemplo n.º 10
0
		/// <summary>
		/// Add multiple options to the output
		/// </summary>
		/// <remarks>Can only be called if the active tag is "section"</remarks>
		/// <param name="optionContainer">Container with all the options 
		/// for the program to document</param>
		public void AddOptions(IOptionContainer optionContainer)
		{
			BeginOptions();
			foreach (OptionDefinition opt in optionContainer.GetOptions())
				AddOption(opt);
			EndOptions();
		}
Exemplo n.º 11
0
        /// <summary>
        /// Saves the options - adds new ones and deleted the old ones..
        /// </summary>
        /// <typeparam name="TOption">The type of the option entity.</typeparam>
        /// <typeparam name="TEntity">The type of the option parent entity.</typeparam>
        /// <param name="optionContainer">The options container entity.</param>
        /// <param name="options">The list of new options.</param>
        public void SetOptions <TOption, TEntity>(IOptionContainer <TEntity> optionContainer, IEnumerable <IOption> options)
            where TEntity : IEntity
            where TOption : IDeletableOption <TEntity>, new()
        {
            // Delete old ones
            if (optionContainer.Options != null)
            {
                foreach (var option in optionContainer.Options.Distinct())
                {
                    if (options == null || options.All(o => o.Key != option.Key))
                    {
                        if (!option.IsDeletable)
                        {
                            var message    = string.Format(RootGlobalization.SaveOptions_CannotDeleteOption_Message, option.Key);
                            var logMessage = string.Format("Cannot delete option {0}, because it's marked as non-deletable.", option.Id);
                            throw new ValidationException(() => message, logMessage);
                        }

                        repository.Delete(option);
                    }
                }
            }

            // Add new / update existing
            if (options != null)
            {
                var customOptions = LoadAndValidateCustomOptions(options);

                var optionsList = new List <IDeletableOption <TEntity> >();
                if (optionContainer.Options != null)
                {
                    optionsList.AddRange(optionContainer.Options);
                }

                foreach (var requestOption in options)
                {
                    TOption option = (TOption)optionsList.FirstOrDefault(o => o.Key == requestOption.Key);

                    if (option == null)
                    {
                        option = new TOption();
                        optionsList.Add(option);
                    }

                    option.Key    = requestOption.Key;
                    option.Value  = ClearFixValueForSave(requestOption.Key, requestOption.Type, requestOption.Value);
                    option.Type   = requestOption.Type;
                    option.Entity = (TEntity)optionContainer;

                    if (requestOption.Type == OptionType.Custom)
                    {
                        option.CustomOption = customOptions.First(co => co.Identifier == requestOption.CustomOption.Identifier);
                    }
                    else
                    {
                        option.CustomOption = null;
                    }

                    ValidateOptionValue(option);
                }

                optionContainer.Options = optionsList;
            }
        }
Exemplo n.º 12
0
 private void SetContentOptions(IOptionContainer <Models.Content> destination, IOptionContainer <Models.Content> source)
 {
     optionService.SetOptions <ContentOption, Models.Content>(destination, source.Options, () => new ContentOptionTranslation());
 }