private static ToolStripMenuItem Convert_OptionBool(OptionBool oBool, OptionBase o, Action <OptionBase> onOptionChanged) { var m = new ToolStripMenuItem { Text = o.Caption, Tag = o, Image = GetCheckedBitmap(oBool.Value, true), }; // Add childs AddChildOptions(m, o, onOptionChanged); SetEnabledToSubmenus(m, oBool.Value); m.Click += (eSender, eE) => { var em = (ToolStripMenuItem)eSender; var eoBool = (OptionBool)em.Tag; eoBool.Value = !eoBool.Value; em.Image = GetCheckedBitmap(eoBool.Value, true); SetEnabledToSubmenus(em, eoBool.Value); if (onOptionChanged != null) { onOptionChanged(eoBool); } }; return(m); }
private void _OnModifiedT(OptionBase option) { if (OnModifiedT != null) { OnModifiedT(this); } }
public static void Add(OptionBase option) { if (IsLoaded) { //log.temp("Options '{0}' is added after GlobalOptions was loaded", option.KeyShort); } Options.Add(option); }
private static void AddChildOptions(ToolStripMenuItem m, OptionBase o, Action <OptionBase> onOptionChanged) { if (o.ChildOptions.Count > 0) { var prevIsEnum = -1; foreach (var childOption in o.ChildOptions) { var childMenu = Convert(childOption, onOptionChanged, false); // some options may not return any menu - since they are debug and we run outside visual studio if (childMenu == null) { continue; } if (childOption.OptionType == OptionType.IssueOption) { childMenu.ForeColor = Color.SlateBlue; } if (childMenu == null) { continue; } var oEnum = childOption as IOptionEnum; if (oEnum == null || (oEnum.GetStates().Length > 10 && o.ChildOptions.Count > 1)) //expantion is correct { if (prevIsEnum == 1) { m.DropDownItems.Add(new ToolStripSeparator()); //add separator after OptionEnum } prevIsEnum = 0; m.DropDownItems.Add(childMenu); } else { // Expand OptionEnum to avoid addition submenu level if (prevIsEnum != -1) { m.DropDownItems.Add(new ToolStripSeparator()); //add separator before OptionEnum } prevIsEnum = 1; //m.DropDownItems.Add(new ToolStripMenuItem(childMenu.Text)); //caption while (childMenu.DropDownItems.Count > 0) { ToolStripItem msub = childMenu.DropDownItems[0]; if (!msub.Text.Contains(": ")) { msub.Text = @"{0}: {1}"._Format(childMenu.Text, msub.Text); } m.DropDownItems.Add(msub); } } } } }
private void OnChangeInternalMy(OptionBase option) { // for the single value we have to sync States when Value is changed if (IsSingleValue) { // Update states checkeds from value foreach (var state in States) { state.IsChecked = state.Value.Equals(_Value); } } }
private static ToolStripMenuItem Convert(OptionBase o, Action <OptionBase> onOptionChanged = null, bool skipChildOptions = true) { // Hidde options that are invisible to user if (o.OptionType == OptionType.Hidden) { return(null); } var isDebugOption = o.Caption.ToLower().Contains("debug") || o.OptionType == OptionType.Debug; // Debug options is visible only on debug if (isDebugOption && !Shared.IsDebugMode) { return(null); } if (skipChildOptions && o.ParentOption != null) { return(null); } ToolStripMenuItem m = null; var oBool = o as OptionBool; if (oBool != null) { m = Convert_OptionBool(oBool, o, onOptionChanged); } var oEnum = o as IOptionEnum; if (oEnum != null) { m = Convert_OptionEnum(oEnum, o, onOptionChanged); } if (m != null) { // Add special prefix for all debug options if (isDebugOption) { m.Text = "[DEBUG] " + m.Text.Replace("Debug", "").Replace("[DEBUG]", ""); } } return(m); }
private static ToolStripMenuItem Convert_OptionEnum(IOptionEnum oEnum, OptionBase o, Action <OptionBase> onOptionChanged) { var m = new ToolStripMenuItem { Text = o.Caption, Tag = o, }; foreach (var state in oEnum.GetStates()) { var msub = state.MenuCache; // improves performance 2 times if (msub == null) { msub = new ToolStripMenuItem { Text = state.Caption, Tag = state, }; msub.Click += (eSender, eE) => { var em = (ToolStripMenuItem)eSender; var estate = (OptionEnumState)em.Tag; var obase = (OptionBase)estate.OptionEnum; var eoEnum = (IOptionEnum)estate.OptionEnum; eoEnum.ClickedOnValue(estate.Value); if (onOptionChanged != null) { onOptionChanged(obase); } }; state.MenuCache = msub; } var image = GetCheckedBitmap(state.IsChecked, !oEnum.IsSingleValue); if (msub.Image != image) // small performance improvement { msub.Image = image; } m.DropDownItems.Add(msub); } return(m); }
private void OnChangeEvent(OptionBase option) { SetGUIScale(); }