mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-10-03 10:36:30 +13:00
Reuse a loading sub menu for showing completed sub menu
Further simplification of sub menu creation
This commit is contained in:
parent
3698d7e891
commit
3c7a7a2aaf
2 changed files with 60 additions and 100 deletions
|
@ -176,26 +176,32 @@ 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)
|
||||
if (menuData.DirectoryState != MenuDataDirectoryState.Undefined)
|
||||
{
|
||||
// Sub Menu (completed)
|
||||
UpdateMenuContent(menu, menuData);
|
||||
menu.SetBehavior(menuData.DirectoryState);
|
||||
AdjustMenusSizeAndLocation();
|
||||
}
|
||||
else if (closedLoadingMenu && menus[0].IsUsable)
|
||||
else
|
||||
{
|
||||
menu.HideWithFade();
|
||||
menus[menu.Level] = null;
|
||||
|
||||
menuData.RowDataParent.IsMenuOpen = false;
|
||||
menuData.RowDataParent.IsClicking = false;
|
||||
menuData.RowDataParent.IsSelected = false;
|
||||
|
@ -207,6 +213,7 @@ namespace SystemTrayMenu.Business
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
waitToOpenMenu.CloseMenu += CloseMenu;
|
||||
void CloseMenu(int level)
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -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<FrameworkElement>()
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue