From f46f57d11a2e914e9782f07297db05759aaf7768 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 27 Dec 2023 15:45:51 +0100 Subject: [PATCH] Add search functionality to plugin manager and improve UX --- .../DataContexts/PluginEntryDataContext.cs | 26 +++++- .../DataContexts/PluginManagerDataContext.cs | 40 ++++++++- src/DesktopMagic/DesktopMagic.csproj | 6 +- src/DesktopMagic/Dialogs/ColorDialog.xaml.cs | 2 +- src/DesktopMagic/MainWindow.xaml.cs | 5 +- src/DesktopMagic/Plugins/ModEntry.xaml | 5 +- src/DesktopMagic/Plugins/PluginManager.xaml | 62 ++++++++++---- .../Plugins/PluginManager.xaml.cs | 82 ++++++++++++++++++- 8 files changed, 198 insertions(+), 30 deletions(-) diff --git a/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs b/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs index 6e35dfa..66401c7 100644 --- a/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs +++ b/src/DesktopMagic/DataContexts/PluginEntryDataContext.cs @@ -1,13 +1,19 @@ using DesktopMagic.Plugins; using System; +using System.ComponentModel; +using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Input; namespace DesktopMagic.DataContexts; -internal class PluginEntryDataContext(PluginMetadata pluginMetadata, ICommand command, bool installed = false) +internal class PluginEntryDataContext(PluginMetadata pluginMetadata, ICommand command, bool installed = false) : INotifyPropertyChanged { + public event PropertyChangedEventHandler? PropertyChanged; + + private bool isVisible = true; + public string Name => pluginMetadata.Name; public string? Description => pluginMetadata.Description; @@ -24,4 +30,22 @@ internal class PluginEntryDataContext(PluginMetadata pluginMetadata, ICommand co public Visibility InstallButtonVisibility => installed ? Visibility.Collapsed : Visibility.Visible; public Visibility RemoveButtonVisibility => installed ? Visibility.Visible : Visibility.Collapsed; + + public bool IsVisible + { + get => isVisible; + set + { + isVisible = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(Visibility)); + } + } + + public Visibility Visibility => IsVisible ? Visibility.Visible : Visibility.Collapsed; + + private void OnPropertyChanged([CallerMemberName] string? propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } } \ No newline at end of file diff --git a/src/DesktopMagic/DataContexts/PluginManagerDataContext.cs b/src/DesktopMagic/DataContexts/PluginManagerDataContext.cs index b253214..ac1cdfb 100644 --- a/src/DesktopMagic/DataContexts/PluginManagerDataContext.cs +++ b/src/DesktopMagic/DataContexts/PluginManagerDataContext.cs @@ -8,17 +8,19 @@ internal class PluginManagerDataContext : INotifyPropertyChanged { public event PropertyChangedEventHandler? PropertyChanged; + private string allPluginsSearchText = string.Empty; + private string installedPluginsSearchText = string.Empty; + private bool isLoading = true; + private bool isSearching; public ObservableCollection AllPlugins { get; } = []; public ObservableCollection InstalledPlugins { get; } = []; - private bool _isLoading; - public bool IsLoading { - get => _isLoading; + get => isLoading; set { - _isLoading = value; + isLoading = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsNotLoading)); } @@ -26,6 +28,36 @@ internal class PluginManagerDataContext : INotifyPropertyChanged public bool IsNotLoading => !IsLoading; + public bool IsSearching + { + get => isSearching; + set + { + isSearching = value; + OnPropertyChanged(); + } + } + + public string AllPluginsSearchText + { + get => allPluginsSearchText; + set + { + allPluginsSearchText = value; + OnPropertyChanged(); + } + } + + public string InstalledPluginsSearchText + { + get => installedPluginsSearchText; + set + { + installedPluginsSearchText = value; + OnPropertyChanged(); + } + } + protected void OnPropertyChanged([CallerMemberName] string? name = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); diff --git a/src/DesktopMagic/DesktopMagic.csproj b/src/DesktopMagic/DesktopMagic.csproj index 79a61f8..1c7b8bf 100644 --- a/src/DesktopMagic/DesktopMagic.csproj +++ b/src/DesktopMagic/DesktopMagic.csproj @@ -7,11 +7,11 @@ icon.ico OnBuildSuccess Stone_Red - 0.0.4.0 + 1.0.0.0 https://github.com/Stone-Red-Code/DesktopMagic https://github.com/Stone-Red-Code/DesktopMagic - 0.0.4.0 - 0.0.4.0 + 1.0.0.0 + 1.0.0.0 net8.0-windows7.0 enable diff --git a/src/DesktopMagic/Dialogs/ColorDialog.xaml.cs b/src/DesktopMagic/Dialogs/ColorDialog.xaml.cs index f3e203d..1f07499 100644 --- a/src/DesktopMagic/Dialogs/ColorDialog.xaml.cs +++ b/src/DesktopMagic/Dialogs/ColorDialog.xaml.cs @@ -15,7 +15,7 @@ public partial class ColorDialog : Window { public System.Drawing.Color ResultColor { get; private set; } - public Brush ResultBrush { get; private set; } + public Brush ResultBrush { get; private set; } = Brushes.Transparent; public ColorDialog(string content, System.Drawing.Color defaultColor, string title = "ColorDialog") { diff --git a/src/DesktopMagic/MainWindow.xaml.cs b/src/DesktopMagic/MainWindow.xaml.cs index c8501bd..780186c 100644 --- a/src/DesktopMagic/MainWindow.xaml.cs +++ b/src/DesktopMagic/MainWindow.xaml.cs @@ -573,15 +573,16 @@ namespace DesktopMagic // Load plugins foreach (uint pluginId in plugins.Keys) { + InternalPluginData internalPluginData = plugins[pluginId]; + // Add plugin to layout if it doesn't exist if (!Settings.CurrentLayout.Plugins.TryGetValue(pluginId, out PluginSettings? pluginSettings)) { - Settings.CurrentLayout.Plugins.Add(pluginId, new PluginSettings()); + Settings.CurrentLayout.Plugins.Add(pluginId, new PluginSettings() { Name = internalPluginData.Metadata.Name }); continue; } - InternalPluginData internalPluginData = plugins[pluginId]; pluginSettings.Name = internalPluginData.Metadata.Name; if (pluginSettings.Enabled) diff --git a/src/DesktopMagic/Plugins/ModEntry.xaml b/src/DesktopMagic/Plugins/ModEntry.xaml index 89d1e8d..820c8b9 100644 --- a/src/DesktopMagic/Plugins/ModEntry.xaml +++ b/src/DesktopMagic/Plugins/ModEntry.xaml @@ -10,7 +10,8 @@ mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" Background="{DynamicResource MaterialDesignPaper}" - FontFamily="{DynamicResource MaterialDesignFont}"> + FontFamily="{DynamicResource MaterialDesignFont}" + Visibility="{Binding Visibility}"> @@ -36,7 +37,7 @@ \ No newline at end of file diff --git a/src/DesktopMagic/Plugins/PluginManager.xaml b/src/DesktopMagic/Plugins/PluginManager.xaml index 7fe6ba3..fd3e6e5 100644 --- a/src/DesktopMagic/Plugins/PluginManager.xaml +++ b/src/DesktopMagic/Plugins/PluginManager.xaml @@ -33,21 +33,40 @@