Simplified post processing of Menu creation

This commit is contained in:
Peter Kirmeier 2023-04-15 22:47:29 +02:00
parent 176e9f896d
commit 3698d7e891
3 changed files with 31 additions and 25 deletions

View file

@ -100,8 +100,7 @@ namespace SystemTrayMenu.Business
if (IconReader.MainPreload) if (IconReader.MainPreload)
{ {
workerMainMenu.DoWork -= LoadMenu; workerMainMenu.DoWork -= LoadMenu;
menus[0] = Create(menuData, Config.Path); Create(menuData, Config.Path); // Level 0 Main Menu
menus[0].Loaded += (s, e) => ExecuteWatcherHistory();
IconReader.MainPreload = false; IconReader.MainPreload = false;
if (showMenuAfterMainPreload) if (showMenuAfterMainPreload)
@ -157,17 +156,7 @@ namespace SystemTrayMenu.Business
(menus[rowData.Level + 1] == null || (menus[rowData.Level + 1] == null ||
menus[rowData.Level + 1].RowDataParent != rowData)) menus[rowData.Level + 1].RowDataParent != rowData))
{ {
CreateAndShowLoadingMenu(rowData); Create(new(rowData.Level + 1, rowData), rowData.Path); // Level 1+ Sub Menu (loading)
void CreateAndShowLoadingMenu(RowData rowDataParent)
{
MenuData menuDataLoading = new(rowDataParent.Level + 1)
{
RowDataParent = rowDataParent,
};
Menu menuLoading = Create(menuDataLoading, rowDataParent.Path);
menus[menuDataLoading.Level] = menuLoading;
ShowSubMenu(menuLoading);
}
BackgroundWorker? workerSubMenu = workersSubMenu. BackgroundWorker? workerSubMenu = workersSubMenu.
Where(w => !w.IsBusy).FirstOrDefault(); Where(w => !w.IsBusy).FirstOrDefault();
@ -203,13 +192,7 @@ namespace SystemTrayMenu.Business
if (menuData.DirectoryState != MenuDataDirectoryState.Undefined && if (menuData.DirectoryState != MenuDataDirectoryState.Undefined &&
menus[0].IsUsable) menus[0].IsUsable)
{ {
Menu menu = Create(menuData, menuData.RowDataParent.ResolvedPath); Create(menuData, menuData.RowDataParent.ResolvedPath, userSearchText); // Level 1+ Sub Menu (completed)
menuData.RowDataParent.SubMenu = menu;
if (menus[0].IsUsable)
{
ShowSubMenu(menu);
menu.SetSearchText(userSearchText);
}
} }
else if (closedLoadingMenu && menus[0].IsUsable) else if (closedLoadingMenu && menus[0].IsUsable)
{ {
@ -359,7 +342,7 @@ namespace SystemTrayMenu.Business
internal static MenuData GetData(BackgroundWorker? worker, string path, int level) internal static MenuData GetData(BackgroundWorker? worker, string path, int level)
{ {
MenuData menuData = new(level); MenuData menuData = new(level, null);
if (worker?.CancellationPending == true || string.IsNullOrEmpty(path)) if (worker?.CancellationPending == true || string.IsNullOrEmpty(path))
{ {
return menuData; return menuData;
@ -590,7 +573,7 @@ namespace SystemTrayMenu.Business
return (App.TaskbarLogo != null && App.TaskbarLogo.IsActive) || IsShellContextMenuOpen(); return (App.TaskbarLogo != null && App.TaskbarLogo.IsActive) || IsShellContextMenuOpen();
} }
private Menu Create(MenuData menuData, string path) private Menu Create(MenuData menuData, string path, string? userSearchText = null)
{ {
Menu menu = new(menuData, path); Menu menu = new(menuData, path);
@ -677,6 +660,28 @@ namespace SystemTrayMenu.Business
menu.SetCounts(foldersCount, filesCount); menu.SetCounts(foldersCount, filesCount);
if (menuData.Level == 0)
{
// Main Menu
menus[0] = menu;
menu.Loaded += (s, e) => ExecuteWatcherHistory();
}
else if (menuData.DirectoryState != MenuDataDirectoryState.Undefined)
{
// Sub Menu (completed)
if (menus[0].IsUsable)
{
ShowSubMenu(menu);
menu.SetSearchText(userSearchText);
}
}
else
{
// Sub Menu (loading)
menus[menuData.Level] = menu;
ShowSubMenu(menu);
}
return menu; return menu;
} }

View file

@ -31,9 +31,10 @@ namespace SystemTrayMenu.DataClasses
internal struct MenuData internal struct MenuData
{ {
public MenuData(int level) public MenuData(int level, RowData? rowDataParent)
{ {
Level = level; Level = level;
RowDataParent = rowDataParent;
} }
internal List<RowData> RowDatas { get; set; } = new (); internal List<RowData> RowDatas { get; set; } = new ();
@ -42,7 +43,7 @@ namespace SystemTrayMenu.DataClasses
internal int Level { get; } internal int Level { get; }
internal RowData? RowDataParent { get; set; } = null; internal RowData? RowDataParent { get; set; }
internal bool IsNetworkRoot { get; set; } = false; internal bool IsNetworkRoot { get; set; } = false;
} }

View file

@ -442,7 +442,7 @@ namespace SystemTrayMenu.UserInterface
return textBoxSearch.Text; return textBoxSearch.Text;
} }
internal void SetSearchText(string userSearchText) internal void SetSearchText(string? userSearchText)
{ {
if (!string.IsNullOrEmpty(userSearchText)) if (!string.IsNullOrEmpty(userSearchText))
{ {