From 29e373d169870b3315735d1784d184142e1c2690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Mon, 19 Dec 2022 23:30:19 +0100 Subject: [PATCH] PowerControl: Update usage of `ContextMenu` to use events --- PowerControl/Controller.cs | 2 +- PowerControl/Menu/MenuItem.cs | 2 +- PowerControl/Menu/MenuItemWithOptions.cs | 63 ++++++++---------------- PowerControl/Menu/MenuRoot.cs | 4 +- PowerControl/Menu/MenuSeparator.cs | 4 +- 5 files changed, 26 insertions(+), 49 deletions(-) diff --git a/PowerControl/Controller.cs b/PowerControl/Controller.cs index b55ad3e..02f9ebd 100644 --- a/PowerControl/Controller.cs +++ b/PowerControl/Controller.cs @@ -59,7 +59,7 @@ namespace PowerControl rootMenu.Visible = false; rootMenu.Update(); - rootMenu.CreateMenu(contextMenu.Items); + rootMenu.CreateMenu(contextMenu); rootMenu.VisibleChanged += delegate { updateOSD(); }; contextMenu.Items.Add(new ToolStripSeparator()); diff --git a/PowerControl/Menu/MenuItem.cs b/PowerControl/Menu/MenuItem.cs index 7347628..cffeb2b 100644 --- a/PowerControl/Menu/MenuItem.cs +++ b/PowerControl/Menu/MenuItem.cs @@ -28,7 +28,7 @@ namespace PowerControl.Menu public abstract string Render(MenuItem? selected); - public abstract void CreateMenu(ToolStripItemCollection collection); + public abstract void CreateMenu(System.Windows.Forms.ContextMenuStrip contextMenu); public abstract void Update(); public abstract void Reset(); diff --git a/PowerControl/Menu/MenuItemWithOptions.cs b/PowerControl/Menu/MenuItemWithOptions.cs index 84a7d49..1afdf99 100644 --- a/PowerControl/Menu/MenuItemWithOptions.cs +++ b/PowerControl/Menu/MenuItemWithOptions.cs @@ -27,6 +27,23 @@ namespace PowerControl.Menu onApply(); }; + + toolStripItem.DropDownOpening += delegate + { + toolStripItem.DropDownItems.Clear(); + + foreach (var option in Options) + { + var item = new ToolStripMenuItem(option.ToString()); + item.Checked = Object.Equals(option, SelectedOption ?? ActiveOption); + item.Click += delegate + { + SelectedOption = option; + onApply(); + }; + toolStripItem.DropDownItems.Add(item); + } + }; } public override void Reset() @@ -62,20 +79,13 @@ namespace PowerControl.Menu { var result = OptionsValues(); if (result != null) - { Options = result.ToList(); - updateOptions(); - } else - { Visible = false; - } } if (ActiveOption == null && Options.Count > 0) ActiveOption = Options.First(); - - onUpdateToolStrip(); } private void scheduleApply() @@ -108,46 +118,13 @@ namespace PowerControl.Menu ActiveOption = SelectedOption; SelectedOption = null; - - onUpdateToolStrip(); } - private void onUpdateToolStrip() - { - if (toolStripItem == null) - return; - - foreach (ToolStripMenuItem item in toolStripItem.DropDownItems) - item.Checked = Object.Equals(item.Tag, SelectedOption ?? ActiveOption); - - toolStripItem.Visible = Visible && Options.Count > 0; - } - - private void updateOptions() - { - if (toolStripItem == null) - return; - - toolStripItem.DropDownItems.Clear(); - - foreach (var option in Options) - { - var optionItem = new ToolStripMenuItem(option.ToString()); - optionItem.Tag = option; - optionItem.Click += delegate (object? sender, EventArgs e) - { - SelectedOption = option; - onApply(); - }; - toolStripItem.DropDownItems.Add(optionItem); - } - } - - public override void CreateMenu(ToolStripItemCollection collection) + public override void CreateMenu(System.Windows.Forms.ContextMenuStrip contextMenu) { toolStripItem.Text = Name; - updateOptions(); - collection.Add(toolStripItem); + contextMenu.Items.Add(toolStripItem); + contextMenu.Opening += delegate { toolStripItem.Visible = Visible && Options.Count > 0; }; } private void SelectIndex(int index) diff --git a/PowerControl/Menu/MenuRoot.cs b/PowerControl/Menu/MenuRoot.cs index 47f4ff7..0baf2f9 100644 --- a/PowerControl/Menu/MenuRoot.cs +++ b/PowerControl/Menu/MenuRoot.cs @@ -26,10 +26,10 @@ namespace PowerControl.Menu } } - public override void CreateMenu(ToolStripItemCollection collection) + public override void CreateMenu(System.Windows.Forms.ContextMenuStrip contextMenu) { foreach (var item in Items) - item.CreateMenu(collection); + item.CreateMenu(contextMenu); } public override void Update() diff --git a/PowerControl/Menu/MenuSeparator.cs b/PowerControl/Menu/MenuSeparator.cs index 9fe82b1..e589b17 100644 --- a/PowerControl/Menu/MenuSeparator.cs +++ b/PowerControl/Menu/MenuSeparator.cs @@ -9,9 +9,9 @@ namespace PowerControl.Menu Selectable = false; } - public override void CreateMenu(ToolStripItemCollection collection) + public override void CreateMenu(System.Windows.Forms.ContextMenuStrip contextMenu) { - collection.Add(toolStripItem); + contextMenu.Items.Add(toolStripItem); } public override string Render(MenuItem? selected)