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)
{
workerMainMenu.DoWork -= LoadMenu;
menus[0] = Create(menuData, Config.Path);
menus[0].Loaded += (s, e) => ExecuteWatcherHistory();
Create(menuData, Config.Path); // Level 0 Main Menu
IconReader.MainPreload = false;
if (showMenuAfterMainPreload)
@ -157,17 +156,7 @@ namespace SystemTrayMenu.Business
(menus[rowData.Level + 1] == null ||
menus[rowData.Level + 1].RowDataParent != rowData))
{
CreateAndShowLoadingMenu(rowData);
void CreateAndShowLoadingMenu(RowData rowDataParent)
{
MenuData menuDataLoading = new(rowDataParent.Level + 1)
{
RowDataParent = rowDataParent,
};
Menu menuLoading = Create(menuDataLoading, rowDataParent.Path);
menus[menuDataLoading.Level] = menuLoading;
ShowSubMenu(menuLoading);
}
Create(new(rowData.Level + 1, rowData), rowData.Path); // Level 1+ Sub Menu (loading)
BackgroundWorker? workerSubMenu = workersSubMenu.
Where(w => !w.IsBusy).FirstOrDefault();
@ -203,13 +192,7 @@ namespace SystemTrayMenu.Business
if (menuData.DirectoryState != MenuDataDirectoryState.Undefined &&
menus[0].IsUsable)
{
Menu menu = Create(menuData, menuData.RowDataParent.ResolvedPath);
menuData.RowDataParent.SubMenu = menu;
if (menus[0].IsUsable)
{
ShowSubMenu(menu);
menu.SetSearchText(userSearchText);
}
Create(menuData, menuData.RowDataParent.ResolvedPath, userSearchText); // Level 1+ Sub Menu (completed)
}
else if (closedLoadingMenu && menus[0].IsUsable)
{
@ -359,7 +342,7 @@ namespace SystemTrayMenu.Business
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))
{
return menuData;
@ -590,7 +573,7 @@ namespace SystemTrayMenu.Business
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);
@ -677,6 +660,28 @@ namespace SystemTrayMenu.Business
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;
}

View file

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

View file

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