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(); } }
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); } }
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(); } }
public OptionContainerEventHandler(OptionsServiceImpl service, IOptionContainer container) { _container = container; _service = service; container.OptionAdded += ContainerOnOptionAdded; container.OptionRemoved += ContainerOnOptionRemoved; }
/// <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(); }
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."); } }
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); }
private void SetContentOptions(IOptionContainer<Models.Content> destination, IOptionContainer<Models.Content> source) { optionService.SetOptions<ContentOption, Models.Content>(destination, source.Options); }
/// <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(); }
/// <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; } }
private void SetContentOptions(IOptionContainer <Models.Content> destination, IOptionContainer <Models.Content> source) { optionService.SetOptions <ContentOption, Models.Content>(destination, source.Options, () => new ContentOptionTranslation()); }