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); 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; waitToOpenMenu.CloseMenu += CloseMenu;
@ -156,11 +111,6 @@ namespace SystemTrayMenu.Business
HideOldMenu(menu); HideOldMenu(menu);
} }
} }
if (level - 1 < menus.Length && menus[level - 1] != null)
{
menus[level - 1]?.FocusTextBox();
}
} }
waitToOpenMenu.MouseEnterOk += MouseEnterOk; waitToOpenMenu.MouseEnterOk += MouseEnterOk;
@ -442,11 +392,7 @@ namespace SystemTrayMenu.Business
IconReader.IsPreloading = false; IconReader.IsPreloading = false;
if (showMenuAfterMainPreload) if (showMenuAfterMainPreload)
{ {
Menu? menu = menus[0]; menus[0]?.ShowWithFade();
if (menu != null)
{
menu.ShowWithFade();
}
} }
} }
else else
@ -478,6 +424,44 @@ namespace SystemTrayMenu.Business
openCloseState = OpenCloseState.Default; 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() private bool IsActive()
{ {
bool IsShellContextMenuOpen() bool IsShellContextMenuOpen()
@ -594,9 +578,6 @@ namespace SystemTrayMenu.Business
} }
menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender); menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender);
menu.AddItemsToMenu(menuData.RowDatas);
menu.CellMouseEnter += waitToOpenMenu.MouseEnter; menu.CellMouseEnter += waitToOpenMenu.MouseEnter;
menu.CellMouseLeave += waitToOpenMenu.MouseLeave; menu.CellMouseLeave += waitToOpenMenu.MouseLeave;
menu.CellMouseDown += Dgv_MouseDown; menu.CellMouseDown += Dgv_MouseDown;
@ -616,10 +597,10 @@ namespace SystemTrayMenu.Business
#endif #endif
} }
if (menuData.Level == 0) if (menu.Level == 0)
{ {
// Main Menu // Main Menu
menus[menuData.Level] = menu; menus[menu.Level] = menu;
menu.Loaded += (s, e) => ExecuteWatcherHistory(); menu.Loaded += (s, e) => ExecuteWatcherHistory();
} }
else else

View file

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

View file

@ -37,14 +37,12 @@ namespace SystemTrayMenu.DataClasses
RowDataParent = rowDataParent; RowDataParent = rowDataParent;
} }
internal List<RowData> RowDatas { get; set; } = new ();
internal MenuDataDirectoryState DirectoryState { get; set; } = MenuDataDirectoryState.Undefined;
internal int Level { get; } internal int Level { get; }
internal RowData? RowDataParent { get; set; } 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) internal static void DiscoverItems(BackgroundWorker? worker, string path, ref MenuData menuData)
{ {
bool isNetworkRoot = false;
try try
{ {
menuData.IsNetworkRoot = FileLnk.IsNetworkRoot(path); isNetworkRoot = FileLnk.IsNetworkRoot(path);
if (menuData.IsNetworkRoot) if (isNetworkRoot)
{ {
DiscoverNetworkRootDirectories(path, ref menuData); 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) if (menuData.RowDatas.Count == 0)
{ {
@ -115,7 +116,7 @@ namespace SystemTrayMenu.Helpers
return rowDatas; 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(); List<RowData> rowDatasToRemove = new();
foreach (RowData rowData in menuData.RowDatas) foreach (RowData rowData in menuData.RowDatas)
@ -125,7 +126,7 @@ namespace SystemTrayMenu.Helpers
return; return;
} }
if (!menuData.IsNetworkRoot) if (!isNetworkRoot)
{ {
FolderOptions.ReadHiddenAttributes(rowData.Path, out bool hasHiddenFlag, out bool isDirectoryToHide); FolderOptions.ReadHiddenAttributes(rowData.Path, out bool hasHiddenFlag, out bool isDirectoryToHide);
if (isDirectoryToHide) if (isDirectoryToHide)

View file

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