diff --git a/Business/Menus.cs b/Business/Menus.cs index 6be2e9b..de0d870 100644 --- a/Business/Menus.cs +++ b/Business/Menus.cs @@ -182,7 +182,7 @@ namespace SystemTrayMenu.Business MenuData menuData = (MenuData)e.Result; Menu? menu = menus[menuData.Level]; - if (menu == null || !menu.IsLoadingMenu) + if (menu == null) { return; } @@ -192,8 +192,8 @@ namespace SystemTrayMenu.Business if (menuData.DirectoryState != MenuDataDirectoryState.Undefined) { // Sub Menu (completed) - UpdateMenuContent(menu, menuData); - menu.SetBehavior(menuData.DirectoryState); + menu.AddItemsToMenu(menuData.RowDatas); + menu.SetSubMenuState(menuData.DirectoryState); AdjustMenusSizeAndLocation(); } else @@ -481,42 +481,6 @@ namespace SystemTrayMenu.Business #endif } - private static void AddItemsToMenu(List data, Menu menu, out int foldersCount, out int filesCount) - { - foldersCount = 0; - filesCount = 0; - - ListView? lv = menu.GetDataGridView(); - if (lv != null) - { - List items = new(); - - foreach (RowData rowData in data) - { - if (!(rowData.IsAddionalItem && Settings.Default.ShowOnlyAsSearchResult)) - { - if (rowData.ContainsMenu) - { - foldersCount++; - } - else - { - filesCount++; - } - } - - rowData.RowIndex = items.Count; // Index - items.Add(new( - (rowData.HiddenEntry ? IconReader.AddIconOverlay(rowData.Icon, Properties.Resources.White50Percentage) : rowData.Icon)?.ToImageSource(), - rowData.Text ?? "?", - rowData, - rowData.IsAddionalItem && Settings.Default.ShowOnlyAsSearchResult ? 99 : 0)); - } - - lv.ItemsSource = items; - } - } - private bool IsActive() { bool IsShellContextMenuOpen() @@ -608,7 +572,7 @@ namespace SystemTrayMenu.Business menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender); - UpdateMenuContent(menu, menuData); + menu.AddItemsToMenu(menuData.RowDatas); menu.CellMouseEnter += dgvMouseRow.CellMouseEnter; menu.CellMouseLeave += dgvMouseRow.CellMouseLeave; @@ -654,12 +618,6 @@ namespace SystemTrayMenu.Business 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) @@ -668,7 +626,6 @@ namespace SystemTrayMenu.Business if (menu.Level == 0) { - menu.SetBehavior(MenuDataDirectoryState.Valid); menu.ResetSearchText(); } } @@ -1190,17 +1147,17 @@ namespace SystemTrayMenu.Business private void WatcherProcessItem(object sender, EventArgs e) { - bool UseHistory = false; + bool useHistory = false; if (menus[0] == null) { - UseHistory = true; + useHistory = true; } else { - menus[0].Dispatcher.Invoke(() => UseHistory = !menus[0].IsLoaded); + menus[0].Dispatcher.Invoke(() => useHistory = !menus[0].IsLoaded); } - if (UseHistory) + if (useHistory) { watcherHistory.Add(e); return; @@ -1263,7 +1220,7 @@ namespace SystemTrayMenu.Business rowDatas = DirectoryHelpers.SortItems(rowDatas); keyboardInput.ClearIsSelectedByKey(); - AddItemsToMenu(rowDatas, menus[0], out _, out _); + menus[0].AddItemsToMenu(rowDatas); hideSubmenuDuringRefreshSearch = false; menus[0].RefreshSearchText(); @@ -1346,7 +1303,7 @@ namespace SystemTrayMenu.Business rowDatas = DirectoryHelpers.SortItems(rowDatas); keyboardInput.ClearIsSelectedByKey(); - AddItemsToMenu(rowDatas, menus[0], out _, out _); + menus[0].AddItemsToMenu(rowDatas); hideSubmenuDuringRefreshSearch = false; menus[0].RefreshSearchText(); diff --git a/UserInterface/Menu.xaml b/UserInterface/Menu.xaml index 13ff50c..7b2800b 100644 --- a/UserInterface/Menu.xaml +++ b/UserInterface/Menu.xaml @@ -97,7 +97,7 @@ - + diff --git a/UserInterface/Menu.xaml.cs b/UserInterface/Menu.xaml.cs index 79eb47e..72e6033 100644 --- a/UserInterface/Menu.xaml.cs +++ b/UserInterface/Menu.xaml.cs @@ -59,6 +59,36 @@ namespace SystemTrayMenu.UserInterface InitializeComponent(); + if (!Config.ShowDirectoryTitleAtTop) + { + txtTitle.Visibility = Visibility.Hidden; + } + + if (!Config.ShowSearchBar) + { + searchPanel.Visibility = Visibility.Collapsed; + } + + if (!Config.ShowFunctionKeyOpenFolder) + { + buttonOpenFolder.Visibility = Visibility.Collapsed; + } + + if (!Config.ShowFunctionKeyPinMenu) + { + buttonMenuAlwaysOpen.Visibility = Visibility.Collapsed; + } + + if (!Config.ShowFunctionKeySettings) + { + buttonSettings.Visibility = Visibility.Collapsed; + } + + if (!Config.ShowFunctionKeyRestart) + { + buttonRestart.Visibility = Visibility.Collapsed; + } + folderPath = path; RowDataParent = menuData.RowDataParent; Level = menuData.Level; @@ -74,6 +104,16 @@ namespace SystemTrayMenu.UserInterface { RowDataParent.SubMenu = this; } + + buttonOpenFolder.Visibility = Visibility.Collapsed; + buttonSettings.Visibility = Visibility.Collapsed; + buttonRestart.Visibility = Visibility.Collapsed; + + labelStatus.Content = Translator.GetText("loading"); + + // Todo: use embedded resources that we can assign image in XAML already + pictureBoxLoading.Source = SystemTrayMenu.Resources.StaticResources.LoadingIcon.ToImageSource(); + pictureBoxLoading.Visibility = Visibility.Visible; } string title = new DirectoryInfo(path).Name; @@ -112,7 +152,7 @@ namespace SystemTrayMenu.UserInterface MouseUp += Menu_MouseUp; MouseMove += Menu_MouseMove; - + textBoxSearch.TextChanged += (_, _) => TextBoxSearch_TextChanged(); textBoxSearch.ContextMenu = new() { Background = SystemColors.ControlBrush, @@ -238,12 +278,6 @@ namespace SystemTrayMenu.UserInterface item.data.SubMenu?.Close(); } }; - - // This will be a submenu.. - if (Level > 0) - { - SetBehavior(menuData.DirectoryState); - } } internal event Action? MenuScrolled; @@ -298,8 +332,6 @@ namespace SystemTrayMenu.UserInterface TopRight, } - public bool IsLoadingMenu { get; internal set; } // TODO State out of window - public bool IsDisposed => isClosed; // TODO WPF Replace Forms wrapper public bool Disposing => isClosed; // TODO WPF Replace Forms wrapper @@ -355,93 +387,35 @@ namespace SystemTrayMenu.UserInterface #endif } - internal void SetBehavior(MenuDataDirectoryState state) + internal void SetSubMenuState(MenuDataDirectoryState state) { - if (!Config.ShowDirectoryTitleAtTop) + if (Config.ShowFunctionKeyOpenFolder) { - txtTitle.Visibility = Visibility.Hidden; + buttonOpenFolder.Visibility = Visibility.Visible; } - if (!Config.ShowSearchBar) - { - searchPanel.Visibility = Visibility.Collapsed; - } + buttonMenuAlwaysOpen.Visibility = Visibility.Collapsed; + pictureBoxLoading.Visibility = Visibility.Collapsed; - if (!(Config.ShowCountOfElementsBelow || state != MenuDataDirectoryState.Valid)) + switch (state) { - // Hide status when neither config is set nor an error message must be shown - labelStatus.Visibility = Visibility.Collapsed; - } + case MenuDataDirectoryState.Valid: + if (!Config.ShowCountOfElementsBelow) + { + labelStatus.Visibility = Visibility.Collapsed; + } - if (!Config.ShowFunctionKeyOpenFolder) - { - buttonOpenFolder.Visibility = Visibility.Collapsed; - } - - if (!Config.ShowFunctionKeyPinMenu) - { - buttonMenuAlwaysOpen.Visibility = Visibility.Collapsed; - } - - if (!Config.ShowFunctionKeySettings) - { - buttonSettings.Visibility = Visibility.Collapsed; - } - - if (!Config.ShowFunctionKeyRestart) - { - buttonRestart.Visibility = Visibility.Collapsed; - } - - if (Level == 0) - { - // Main Menu - textBoxSearch.TextChanged += (_, _) => TextBoxSearch_TextChanged(); - } - else - { - // SubMenu - buttonSettings.Visibility = Visibility.Collapsed; - buttonRestart.Visibility = Visibility.Collapsed; - - 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; - labelStatus.Content = Translator.GetText("loading"); - buttonMenuAlwaysOpen.Visibility = Visibility.Visible; - buttonOpenFolder.Visibility = Visibility.Collapsed; - - // Todo: use embedded resources that we can assign image in XAML already - pictureBoxLoading.Source = SystemTrayMenu.Resources.StaticResources.LoadingIcon.ToImageSource(); - pictureBoxLoading.Visibility = Visibility.Visible; - break; - default: - break; - } + break; + case MenuDataDirectoryState.Empty: + searchPanel.Visibility = Visibility.Collapsed; + labelStatus.Content = Translator.GetText("Directory empty"); + break; + case MenuDataDirectoryState.NoAccess: + searchPanel.Visibility = Visibility.Collapsed; + labelStatus.Content = Translator.GetText("Directory inaccessible"); + break; + default: + break; } } @@ -464,6 +438,40 @@ namespace SystemTrayMenu.UserInterface ((CollectionView)CollectionViewSource.GetDefaultView(dgv.ItemsSource)).Refresh(); } + internal void AddItemsToMenu(List data) + { + int foldersCount = 0; + int filesCount = 0; + + List items = new(); + + foreach (RowData rowData in data) + { + if (!(rowData.IsAddionalItem && Settings.Default.ShowOnlyAsSearchResult)) + { + if (rowData.ContainsMenu) + { + foldersCount++; + } + else + { + filesCount++; + } + } + + rowData.RowIndex = items.Count; // Index + items.Add(new( + (rowData.HiddenEntry ? IconReader.AddIconOverlay(rowData.Icon, Properties.Resources.White50Percentage) : rowData.Icon)?.ToImageSource(), + rowData.Text ?? "?", + rowData, + rowData.IsAddionalItem && Settings.Default.ShowOnlyAsSearchResult ? 99 : 0)); + } + + dgv.ItemsSource = items; + + SetCounts(foldersCount, filesCount); + } + internal void ShowWithFadeOrTransparent(bool formActiveFormIsMenu) { if (formActiveFormIsMenu) @@ -1269,7 +1277,7 @@ namespace SystemTrayMenu.UserInterface public int SortIndex { get; set; } } - private void textBoxSearch_TextInput(object sender, TextCompositionEventArgs e) + private void TextBoxSearch_TextInput(object sender, TextCompositionEventArgs e) { // TODO WPF }