Added MenuOpenedEventArgs class

This commit is contained in:
tznind
2023-03-12 03:06:12 +00:00
parent e347a255b7
commit 6a33f142e0
3 changed files with 59 additions and 17 deletions

View File

@@ -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; }
}
}

View File

@@ -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>

View File

@@ -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) => {