Simplified MenuData and speedup sub menu closing

This commit is contained in:
Peter Kirmeier 2023-04-27 22:19:02 +02:00
parent 2e1cc20593
commit b735ad4b46
5 changed files with 55 additions and 75 deletions

View file

@ -98,51 +98,6 @@ namespace SystemTrayMenu.Business
workerSubMenu.RunWorkerAsync(rowData);
}
void LoadSubMenuCompleted(object? senderCompleted, RunWorkerCompletedEventArgs e)
{
if (e.Result == null)
{
return;
}
MenuData menuData = (MenuData)e.Result;
Menu? menu = menus[menuData.Level];
if (menu == null)
{
return;
}
if (IsMainUsable)
{
if (menuData.DirectoryState != MenuDataDirectoryState.Undefined)
{
// Sub Menu (completed)
menu.AddItemsToMenu(menuData.RowDatas);
menu.SetSubMenuState(menuData.DirectoryState);
AdjustMenusSizeAndLocation(menu.Level);
menu.TimerUpdateIconsStart();
}
else
{
menu.HideWithFade();
menus[menu.Level] = null;
if (menuData.RowDataParent != null)
{
menuData.RowDataParent.IsMenuOpen = false;
menuData.RowDataParent.IsClicking = false;
menuData.RowDataParent.IsSelected = false;
}
ListView? lv = menus[menuData.Level - 1]?.GetDataGridView();
if (lv != null)
{
RefreshSelection(lv);
}
}
}
}
}
waitToOpenMenu.CloseMenu += CloseMenu;
@ -156,11 +111,6 @@ namespace SystemTrayMenu.Business
HideOldMenu(menu);
}
}
if (level - 1 < menus.Length && menus[level - 1] != null)
{
menus[level - 1]?.FocusTextBox();
}
}
waitToOpenMenu.MouseEnterOk += MouseEnterOk;
@ -442,11 +392,7 @@ namespace SystemTrayMenu.Business
IconReader.IsPreloading = false;
if (showMenuAfterMainPreload)
{
Menu? menu = menus[0];
if (menu != null)
{
menu.ShowWithFade();
}
menus[0]?.ShowWithFade();
}
}
else
@ -478,6 +424,44 @@ namespace SystemTrayMenu.Business
openCloseState = OpenCloseState.Default;
}
private void LoadSubMenuCompleted(object? senderCompleted, RunWorkerCompletedEventArgs e)
{
if (e.Result == null)
{
return;
}
MenuData menuData = (MenuData)e.Result;
Menu? menu = menus[menuData.Level];
if (menu == null)
{
return;
}
if (IsMainUsable)
{
if (menuData.DirectoryState != MenuDataDirectoryState.Undefined)
{
// Sub Menu (completed)
menu.AddItemsToMenu(menuData.RowDatas);
menu.SetSubMenuState(menuData.DirectoryState);
AdjustMenusSizeAndLocation(menu.Level);
menu.TimerUpdateIconsStart();
}
else
{
menu.HideWithFade();
menus[menu.Level] = null;
ListView? lv = menus[menuData.Level - 1]?.GetDataGridView();
if (lv != null)
{
RefreshSelection(lv);
}
}
}
}
private bool IsActive()
{
bool IsShellContextMenuOpen()
@ -594,9 +578,6 @@ namespace SystemTrayMenu.Business
}
menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender);
menu.AddItemsToMenu(menuData.RowDatas);
menu.CellMouseEnter += waitToOpenMenu.MouseEnter;
menu.CellMouseLeave += waitToOpenMenu.MouseLeave;
menu.CellMouseDown += Dgv_MouseDown;
@ -616,10 +597,10 @@ namespace SystemTrayMenu.Business
#endif
}
if (menuData.Level == 0)
if (menu.Level == 0)
{
// Main Menu
menus[menuData.Level] = menu;
menus[menu.Level] = menu;
menu.Loaded += (s, e) => ExecuteWatcherHistory();
}
else

View file

@ -171,13 +171,11 @@ namespace SystemTrayMenu.Handler
RowData rowData = dgvItemData.data;
Menu menu = (Menu)dgv.GetParentWindow();
rowData.Level = menu.Level;
if (rowData.ContainsMenu)
{
CloseMenu?.Invoke(rowData.Level + 2);
}
CloseMenu?.Invoke(rowData.Level + 1);
menu?.FocusTextBox();
if (!rowData.IsContextMenuOpen &&
rowData.ContainsMenu &&
rowData.Level + 1 < MenuDefines.MenusMax)

View file

@ -37,14 +37,12 @@ namespace SystemTrayMenu.DataClasses
RowDataParent = rowDataParent;
}
internal List<RowData> RowDatas { get; set; } = new ();
internal MenuDataDirectoryState DirectoryState { get; set; } = MenuDataDirectoryState.Undefined;
internal int Level { get; }
internal RowData? RowDataParent { get; set; }
internal bool IsNetworkRoot { get; set; } = false;
internal List<RowData> RowDatas { get; set; } = new ();
internal MenuDataDirectoryState DirectoryState { get; set; } = MenuDataDirectoryState.Undefined;
}
}
}

View file

@ -18,10 +18,11 @@ namespace SystemTrayMenu.Helpers
{
internal static void DiscoverItems(BackgroundWorker? worker, string path, ref MenuData menuData)
{
bool isNetworkRoot = false;
try
{
menuData.IsNetworkRoot = FileLnk.IsNetworkRoot(path);
if (menuData.IsNetworkRoot)
isNetworkRoot = FileLnk.IsNetworkRoot(path);
if (isNetworkRoot)
{
DiscoverNetworkRootDirectories(path, ref menuData);
}
@ -53,7 +54,7 @@ namespace SystemTrayMenu.Helpers
}
}
RemoveHiddenOrReadIcons(worker, ref menuData);
RemoveHiddenOrReadIcons(worker, isNetworkRoot, ref menuData);
if (menuData.RowDatas.Count == 0)
{
@ -115,7 +116,7 @@ namespace SystemTrayMenu.Helpers
return rowDatas;
}
private static void RemoveHiddenOrReadIcons(BackgroundWorker? worker, ref MenuData menuData)
private static void RemoveHiddenOrReadIcons(BackgroundWorker? worker, bool isNetworkRoot, ref MenuData menuData)
{
List<RowData> rowDatasToRemove = new();
foreach (RowData rowData in menuData.RowDatas)
@ -125,7 +126,7 @@ namespace SystemTrayMenu.Helpers
return;
}
if (!menuData.IsNetworkRoot)
if (!isNetworkRoot)
{
FolderOptions.ReadHiddenAttributes(rowData.Path, out bool hasHiddenFlag, out bool isDirectoryToHide);
if (isDirectoryToHide)

View file

@ -280,6 +280,8 @@ namespace SystemTrayMenu.UserInterface
item.data.SubMenu?.Close();
}
};
AddItemsToMenu(menuData.RowDatas);
}
internal event Action? MenuScrolled;