mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-10-03 10:36:30 +13:00
Simplified menu initialization based on directory state
This commit is contained in:
parent
0158499a2c
commit
61e10bea00
3 changed files with 109 additions and 144 deletions
|
@ -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<RowData> data, Menu menu, out int foldersCount, out int filesCount)
|
||||
{
|
||||
foldersCount = 0;
|
||||
filesCount = 0;
|
||||
|
||||
ListView? lv = menu.GetDataGridView();
|
||||
if (lv != null)
|
||||
{
|
||||
List<Menu.ListViewItemData> 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();
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
<DockPanel x:Name="searchPanel" DockPanel.Dock="Top" Margin="6,0">
|
||||
<Separator x:Name="panelLine" Height="1" Margin="0,1" DockPanel.Dock="Bottom"/>
|
||||
<Image x:Name="pictureBoxSearch" Width="16" Height="16" Margin="1" DockPanel.Dock="Left" Source="{StaticResource ic_fluent_search_48_regularDrawingImage}"/>
|
||||
<TextBox x:Name="textBoxSearch" BorderBrush="{x:Null}" TextInput="textBoxSearch_TextInput" Background="{x:Null}" SelectionTextBrush="Red" SelectionBrush="#FFDAFF00" />
|
||||
<TextBox x:Name="textBoxSearch" BorderBrush="{x:Null}" TextInput="TextBoxSearch_TextInput" Background="{x:Null}" SelectionTextBrush="Red" SelectionBrush="#FFDAFF00" />
|
||||
</DockPanel>
|
||||
|
||||
<DockPanel x:Name="tableLayoutPanelBottom" DockPanel.Dock="Bottom" Margin="12,4">
|
||||
|
|
|
@ -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<RowData> data)
|
||||
{
|
||||
int foldersCount = 0;
|
||||
int filesCount = 0;
|
||||
|
||||
List<ListViewItemData> 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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue