mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-10-03 10:36:30 +13:00
Simplified MenuData and speedup sub menu closing
This commit is contained in:
parent
2e1cc20593
commit
b735ad4b46
5 changed files with 55 additions and 75 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue