Переглянути джерело

Added MenuOpenedEventArgs class

tznind 2 роки тому
батько
коміт
6a33f142e0

+ 36 - 0
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 {
+
+	/// <summary>
+	/// Defines arguments for the <see cref="MenuBar.MenuOpened"/> event
+	/// </summary>
+	public class MenuOpenedEventArgs : EventArgs{
+
+		/// <summary>
+		/// Creates a new instance of the <see cref="MenuOpenedEventArgs"/> class
+		/// </summary>
+		/// <param name="parent"></param>
+		/// <param name="menuItem"></param>
+		public MenuOpenedEventArgs (MenuBarItem parent, MenuItem menuItem)
+		{
+			Parent = parent;
+			MenuItem = menuItem;
+		}
+
+		/// <summary>
+		/// The parent of <see cref="MenuItem"/>.  Will be null if menu opening
+		/// is the root (see <see cref="MenuBarItem.IsTopLevel"/>).
+		/// </summary>
+		public MenuBarItem Parent { get; }
+
+		/// <summary>
+		/// Gets the <see cref="MenuItem"/> being opened.
+		/// </summary>
+		public MenuItem MenuItem { get; }
+	}
+}

+ 9 - 5
Terminal.Gui/Views/Menu.cs

@@ -1201,7 +1201,7 @@ namespace Terminal.Gui {
 		/// <summary>
 		/// Raised when a menu is opened.
 		/// </summary>
-		public event Action<MenuItem> MenuOpened;
+		public event EventHandler<MenuOpenedEventArgs> MenuOpened;
 
 		/// <summary>
 		/// Raised when a menu is closing passing <see cref="MenuClosingEventArgs"/>.
@@ -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));
 		}
 
 		/// <summary>

+ 14 - 12
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) => {