diff --git a/PowerControl/Controller.cs b/PowerControl/Controller.cs index 4cff97b..910be19 100644 --- a/PowerControl/Controller.cs +++ b/PowerControl/Controller.cs @@ -52,6 +52,7 @@ namespace PowerControl var contextMenu = new System.Windows.Forms.ContextMenuStrip(components); + rootMenu.Init(); rootMenu.Visible = false; rootMenu.Update(); rootMenu.CreateMenu(contextMenu); diff --git a/PowerControl/Menu/MenuItemWithOptions.cs b/PowerControl/Menu/MenuItemWithOptions.cs index 16363d1..52f886e 100644 --- a/PowerControl/Menu/MenuItemWithOptions.cs +++ b/PowerControl/Menu/MenuItemWithOptions.cs @@ -13,6 +13,8 @@ namespace PowerControl.Menu public Func? ApplyValue { get; set; } public Func? ResetValue { get; set; } + public event Action ValueChanged; + private System.Windows.Forms.Timer delayTimer = new System.Windows.Forms.Timer(); private ToolStripMenuItem toolStripItem = new ToolStripMenuItem(); @@ -20,6 +22,8 @@ namespace PowerControl.Menu { this.Selectable = true; + ValueChanged += delegate { }; + delayTimer.Tick += delegate (object? sender, EventArgs e) { if (delayTimer != null) @@ -89,12 +93,17 @@ namespace PowerControl.Menu private void FinalizeSet() { + var wasOption = ActiveOption; + if (ApplyValue != null && SelectedOption != null) ActiveOption = ApplyValue(SelectedOption); else ActiveOption = SelectedOption; SelectedOption = null; + + if (wasOption != ActiveOption && ActiveOption != null) + ValueChanged(this, wasOption, ActiveOption); } public override void CreateMenu(System.Windows.Forms.ContextMenuStrip contextMenu) diff --git a/PowerControl/Menu/MenuRoot.cs b/PowerControl/Menu/MenuRoot.cs index 0baf2f9..44410a5 100644 --- a/PowerControl/Menu/MenuRoot.cs +++ b/PowerControl/Menu/MenuRoot.cs @@ -6,11 +6,14 @@ namespace PowerControl.Menu { public IList Items { get; } = new List(); public MenuItem? Selected; + public event Action VisibleChanged; + public event Action ValueChanged; public MenuRoot() { VisibleChanged += delegate { }; + ValueChanged += delegate { }; } public MenuItem? this[String name] @@ -26,12 +29,34 @@ namespace PowerControl.Menu } } + public IEnumerable AllMenuItemOptions() + { + foreach (var item in Items) + { + if (item is MenuItemWithOptions) + yield return (MenuItemWithOptions)item; + } + } + public override void CreateMenu(System.Windows.Forms.ContextMenuStrip contextMenu) { foreach (var item in Items) item.CreateMenu(contextMenu); } + public void Init() + { + foreach (var item in AllMenuItemOptions()) + { + item.ValueChanged += MenuItem_ValueChanged; + } + } + + private void MenuItem_ValueChanged(MenuItemWithOptions item, String? was, String isNow) + { + ValueChanged(item, was, isNow); + } + public override void Update() { foreach (var item in Items)