diff --git a/Business/Menus.cs b/Business/Menus.cs index 7336de5..4e0d5bf 100644 --- a/Business/Menus.cs +++ b/Business/Menus.cs @@ -176,33 +176,40 @@ namespace SystemTrayMenu.Business void LoadSubMenuCompleted(object? senderCompleted, RunWorkerCompletedEventArgs e) { + if (e.Result == null) + { + return; + } + MenuData menuData = (MenuData)e.Result; - - Menu menuLoading = menus[menuData.Level]; - string userSearchText = string.Empty; - bool closedLoadingMenu = false; - if (menuLoading != null && menuLoading.IsLoadingMenu) + Menu? menu = menus[menuData.Level]; + if (menu == null || !menu.IsLoadingMenu) { - menuLoading.HideWithFade(); - userSearchText = menuLoading.GetSearchText(); - menus[menuLoading.Level] = null; - closedLoadingMenu = true; + return; } - if (menuData.DirectoryState != MenuDataDirectoryState.Undefined && - menus[0].IsUsable) + if (menus[0].IsUsable) { - Create(menuData, menuData.RowDataParent.ResolvedPath, userSearchText); // Level 1+ Sub Menu (completed) - } - else if (closedLoadingMenu && menus[0].IsUsable) - { - menuData.RowDataParent.IsMenuOpen = false; - menuData.RowDataParent.IsClicking = false; - menuData.RowDataParent.IsSelected = false; - Menu menuPrevious = menus[menuData.Level - 1]; - if (menuPrevious != null) + if (menuData.DirectoryState != MenuDataDirectoryState.Undefined) { - RefreshSelection(menuPrevious.GetDataGridView()); + // Sub Menu (completed) + UpdateMenuContent(menu, menuData); + menu.SetBehavior(menuData.DirectoryState); + AdjustMenusSizeAndLocation(); + } + else + { + menu.HideWithFade(); + menus[menu.Level] = null; + + menuData.RowDataParent.IsMenuOpen = false; + menuData.RowDataParent.IsClicking = false; + menuData.RowDataParent.IsSelected = false; + Menu menuPrevious = menus[menuData.Level - 1]; + if (menuPrevious != null) + { + RefreshSelection(menuPrevious.GetDataGridView()); + } } } } @@ -573,7 +580,7 @@ namespace SystemTrayMenu.Business return (App.TaskbarLogo != null && App.TaskbarLogo.IsActive) || IsShellContextMenuOpen(); } - private Menu Create(MenuData menuData, string path, string? userSearchText = null) + private Menu Create(MenuData menuData, string path) { Menu menu = new(menuData, path); @@ -633,7 +640,7 @@ namespace SystemTrayMenu.Business menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender); - AddItemsToMenu(menuData.RowDatas, menu, out int foldersCount, out int filesCount); + UpdateMenuContent(menu, menuData); menu.CellMouseEnter += dgvMouseRow.CellMouseEnter; menu.CellMouseLeave += dgvMouseRow.CellMouseLeave; @@ -658,33 +665,33 @@ namespace SystemTrayMenu.Business #endif } - menu.SetCounts(foldersCount, filesCount); - if (menuData.Level == 0) { // Main Menu - menus[0] = menu; + menus[menuData.Level] = 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); + if (menus[0].IsUsable) + { + HideOldMenu(menu, true); + menus[menu.Level] = menu; + AdjustMenusSizeAndLocation(); + menus[menu.Level]?.ShowWithFadeOrTransparent(IsActive()); + } } return menu; } + private void UpdateMenuContent(Menu menu, MenuData menuData) + { + AddItemsToMenu(menuData.RowDatas, menu, out int foldersCount, out int filesCount); + menu.SetCounts(foldersCount, filesCount); + } + private void MenuVisibleChanged(Menu menu) { if (menu.IsUsable) @@ -695,7 +702,6 @@ namespace SystemTrayMenu.Business { menu.SetBehavior(MenuDataDirectoryState.Valid); menu.ResetSearchText(); - menu.ResetHeight(); } } @@ -1001,14 +1007,6 @@ namespace SystemTrayMenu.Business }); } - private void ShowSubMenu(Menu menuToShow) - { - HideOldMenu(menuToShow, true); - menus[menuToShow.Level] = menuToShow; - AdjustMenusSizeAndLocation(); - menus[menuToShow.Level]?.ShowWithFadeOrTransparent(IsActive()); - } - private void HideOldMenu(Menu menuToShow, bool keepOrSetIsMenuOpen = false) { Menu menuPrevious = menus[menuToShow.Level - 1]; @@ -1340,7 +1338,6 @@ namespace SystemTrayMenu.Business keyboardInput.ClearIsSelectedByKey(); hideSubmenuDuringRefreshSearch = false; - menus[0].ResetHeight(); menus[0].RefreshSearchText(); hideSubmenuDuringRefreshSearch = true; } @@ -1384,7 +1381,6 @@ namespace SystemTrayMenu.Business AddItemsToMenu(rowDatas, menus[0], out _, out _); hideSubmenuDuringRefreshSearch = false; - menus[0].ResetHeight(); menus[0].RefreshSearchText(); hideSubmenuDuringRefreshSearch = true; diff --git a/UserInterface/Menu.xaml.cs b/UserInterface/Menu.xaml.cs index 0d00247..79eb47e 100644 --- a/UserInterface/Menu.xaml.cs +++ b/UserInterface/Menu.xaml.cs @@ -44,7 +44,6 @@ namespace SystemTrayMenu.UserInterface private Point lastLocation; #if TODO // SEARCH private bool isSetSearchText; - private bool dgvHeightSet; #endif private bool isClosed = false; // TODO WPF Replace Forms wrapper private DispatcherTimer timerUpdateIcons = new DispatcherTimer(DispatcherPriority.Render, Dispatcher.CurrentDispatcher); @@ -83,7 +82,7 @@ namespace SystemTrayMenu.UserInterface title = $"{title[..MenuDefines.LengthMax]}..."; } - txtTitle.Text = title; + txtTitle.Text = Title = title; foreach (FrameworkElement control in new List() @@ -408,18 +407,27 @@ namespace SystemTrayMenu.UserInterface switch (state) { case MenuDataDirectoryState.Valid: + IsLoadingMenu = false; textBoxSearch.TextChanged += (_, _) => TextBoxSearch_TextChanged(); buttonMenuAlwaysOpen.Visibility = Visibility.Collapsed; + buttonOpenFolder.Visibility = Visibility.Visible; + pictureBoxLoading.Visibility = Visibility.Collapsed; break; case MenuDataDirectoryState.Empty: + IsLoadingMenu = false; searchPanel.Visibility = Visibility.Collapsed; labelStatus.Content = Translator.GetText("Directory empty"); buttonMenuAlwaysOpen.Visibility = Visibility.Collapsed; + buttonOpenFolder.Visibility = Visibility.Visible; + pictureBoxLoading.Visibility = Visibility.Collapsed; break; case MenuDataDirectoryState.NoAccess: + IsLoadingMenu = false; searchPanel.Visibility = Visibility.Collapsed; labelStatus.Content = Translator.GetText("Directory inaccessible"); buttonMenuAlwaysOpen.Visibility = Visibility.Collapsed; + buttonOpenFolder.Visibility = Visibility.Visible; + pictureBoxLoading.Visibility = Visibility.Collapsed; break; case MenuDataDirectoryState.Undefined: IsLoadingMenu = true; @@ -437,22 +445,6 @@ namespace SystemTrayMenu.UserInterface } } - internal string GetSearchText() - { - return textBoxSearch.Text; - } - - internal void SetSearchText(string? userSearchText) - { - if (!string.IsNullOrEmpty(userSearchText)) - { - textBoxSearch.Text = userSearchText + "*"; -#if TODO // SEARCH - isSetSearchText = true; -#endif - } - } - internal bool IsMouseOn() { Point mousePos = NativeMethods.Screen.CursorPosition; @@ -467,6 +459,11 @@ namespace SystemTrayMenu.UserInterface return dgv; } + internal void RefreshDataGridView() + { + ((CollectionView)CollectionViewSource.GetDefaultView(dgv.ItemsSource)).Refresh(); + } + internal void ShowWithFadeOrTransparent(bool formActiveFormIsMenu) { if (formActiveFormIsMenu) @@ -810,22 +807,7 @@ namespace SystemTrayMenu.UserInterface windowFrame.CornerRadius = new CornerRadius(CornerRadius); } - // Keep its size when once created. - SizeToContent = SizeToContent.Manual; - } - } - - internal void ResetHeight() - { - if (IsLoaded) - { - // TODO: WPF Check if this "reset" works - SizeToContent = SizeToContent.WidthAndHeight; UpdateLayout(); - SizeToContent = SizeToContent.Manual; -#if TODO // SEARCH - dgvHeightSet = false; -#endif } } @@ -927,27 +909,9 @@ namespace SystemTrayMenu.UserInterface dgv.Tag = true; } -#if TODO // SEARCH - if (!dgvHeightSet && dgvHeightByItems > 0 && dgvHeightMax > 0) - { -#endif double heightMaxByOptions = Scaling.Factor * Scaling.FactorByDpi * 450f * (Settings.Default.HeightMaxInPercent / 100f); MaxHeight = Math.Min(screenHeightMax, heightMaxByOptions); -#if TODO // SEARCH - dgvHeightSet = true; - } -#endif -#if TODO // SEARCH and TOUCH - if (dgvHeightByItems > dgvHeightMax) - { - ScrollbarVisible = true; - } - else - { - ScrollbarVisible = false; - } -#endif } private void AdjustDataGridViewWidth() @@ -1216,7 +1180,7 @@ namespace SystemTrayMenu.UserInterface } else { - ((CollectionView)CollectionViewSource.GetDefaultView(dgv.ItemsSource)).Refresh(); + RefreshDataGridView(); } }