From 3698d7e891edfdb2a56a42e3fd06b3c80df1edc8 Mon Sep 17 00:00:00 2001 From: Peter Kirmeier Date: Sat, 15 Apr 2023 22:47:29 +0200 Subject: [PATCH] Simplified post processing of Menu creation --- Business/Menus.cs | 49 +++++++++++++++++++++----------------- DataClasses/MenuData.cs | 5 ++-- UserInterface/Menu.xaml.cs | 2 +- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/Business/Menus.cs b/Business/Menus.cs index 61c80b3..7336de5 100644 --- a/Business/Menus.cs +++ b/Business/Menus.cs @@ -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; } diff --git a/DataClasses/MenuData.cs b/DataClasses/MenuData.cs index 5c71f42..716637a 100644 --- a/DataClasses/MenuData.cs +++ b/DataClasses/MenuData.cs @@ -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 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; } diff --git a/UserInterface/Menu.xaml.cs b/UserInterface/Menu.xaml.cs index 72bcd0d..0d00247 100644 --- a/UserInterface/Menu.xaml.cs +++ b/UserInterface/Menu.xaml.cs @@ -442,7 +442,7 @@ namespace SystemTrayMenu.UserInterface return textBoxSearch.Text; } - internal void SetSearchText(string userSearchText) + internal void SetSearchText(string? userSearchText) { if (!string.IsNullOrEmpty(userSearchText)) {