From 6a33f142e01f1c4b002339449c379aab1f046d1b Mon Sep 17 00:00:00 2001 From: tznind Date: Sun, 12 Mar 2023 03:06:12 +0000 Subject: [PATCH] Added MenuOpenedEventArgs class --- .../Core/EventArgs/MenuOpenedEventArgs.cs | 36 +++++++++++++++++++ Terminal.Gui/Views/Menu.cs | 14 +++++--- UnitTests/Menus/MenuTests.cs | 26 +++++++------- 3 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 Terminal.Gui/Core/EventArgs/MenuOpenedEventArgs.cs diff --git a/Terminal.Gui/Core/EventArgs/MenuOpenedEventArgs.cs b/Terminal.Gui/Core/EventArgs/MenuOpenedEventArgs.cs new file mode 100644 index 000000000..dec432449 --- /dev/null +++ b/Terminal.Gui/Core/EventArgs/MenuOpenedEventArgs.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Terminal.Gui { + + /// + /// Defines arguments for the event + /// + public class MenuOpenedEventArgs : EventArgs{ + + /// + /// Creates a new instance of the class + /// + /// + /// + public MenuOpenedEventArgs (MenuBarItem parent, MenuItem menuItem) + { + Parent = parent; + MenuItem = menuItem; + } + + /// + /// The parent of . Will be null if menu opening + /// is the root (see ). + /// + public MenuBarItem Parent { get; } + + /// + /// Gets the being opened. + /// + public MenuItem MenuItem { get; } + } +} diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs index 585cc11e1..a8e0cf34e 100644 --- a/Terminal.Gui/Views/Menu.cs +++ b/Terminal.Gui/Views/Menu.cs @@ -1201,7 +1201,7 @@ namespace Terminal.Gui { /// /// Raised when a menu is opened. /// - public event Action MenuOpened; + public event EventHandler MenuOpened; /// /// Raised when a menu is closing passing . @@ -1254,16 +1254,20 @@ namespace Terminal.Gui { public virtual void OnMenuOpened () { MenuItem mi = null; + MenuBarItem parent; + if (openCurrentMenu.barItems.Children != null && openCurrentMenu.barItems.Children.Length > 0 && openCurrentMenu?.current > -1) { - - mi = openCurrentMenu.barItems.Children [openCurrentMenu.current]; + parent = openCurrentMenu.barItems; + mi = parent.Children [openCurrentMenu.current]; } else if (openCurrentMenu.barItems.IsTopLevel) { + parent = null; mi = openCurrentMenu.barItems; } else { - mi = openMenu.barItems.Children [openMenu.current]; + parent = openMenu.barItems; + mi = parent.Children [openMenu.current]; } - MenuOpened?.Invoke (mi); + MenuOpened?.Invoke (this, new MenuOpenedEventArgs(parent, mi)); } /// diff --git a/UnitTests/Menus/MenuTests.cs b/UnitTests/Menus/MenuTests.cs index aeb37e46b..cf8bd0b99 100644 --- a/UnitTests/Menus/MenuTests.cs +++ b/UnitTests/Menus/MenuTests.cs @@ -120,12 +120,14 @@ namespace Terminal.Gui.MenuTests { new MenuItem ("_Copy", "Copies the selection.", Copy) }); }; - menu.MenuOpened += (e) => { - Assert.Equal ("_Edit", e.Parent.Title); - Assert.Equal ("_Copy", e.Title); - Assert.Equal ("Copies the selection.", e.Help); - Assert.Equal (Copy, e.Action); - e.Action (); + menu.MenuOpened += (s, e) => { + var mi = e.MenuItem; + + Assert.Equal ("_Edit", mi.Parent.Title); + Assert.Equal ("_Copy", mi.Title); + Assert.Equal ("Copies the selection.", mi.Help); + Assert.Equal (Copy, mi.Action); + mi.Action (); Assert.Equal ("Copy", miAction); }; menu.MenuClosing += (s,e) => { @@ -194,8 +196,8 @@ Edit new MenuItem ("_Save", "Saves the file.", null, null) }) }); - menu.MenuOpened += (e) => { - miCurrent = e; + menu.MenuOpened += (s,e) => { + miCurrent = e.MenuItem; mCurrent = menu.openMenu; }; menu.UseKeysUpDownAsKeysLeftRight = true; @@ -290,8 +292,8 @@ Edit new MenuItem ("_Paste", "", null) }) }); - menu.MenuOpened += (e) => { - miCurrent = e; + menu.MenuOpened += (s, e) => { + miCurrent = e.MenuItem; mCurrent = menu.openCurrentMenu; }; Application.Top.Add (menu); @@ -379,8 +381,8 @@ Edit new MenuBarItem ("_About", "Top-Level", () => miAction ="About") }); menu.MenuOpening += (s,e) => mbiCurrent = e.CurrentMenu; - menu.MenuOpened += (e) => { - miCurrent = e; + menu.MenuOpened += (s, e) => { + miCurrent = e.MenuItem; mCurrent = menu.openCurrentMenu; }; menu.MenuClosing += (s,e) => {