From 5fcbe2af790ee947dbc2cbe81a678cce7d4683b2 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Sat, 27 Jun 2026 19:51:55 +0200 Subject: [PATCH] Add plugins search box to main page --- .../DataContexts/MainWindowDataContext.cs | 11 ++++++ src/DesktopMagic/Pages/MainPage.xaml | 12 +++++-- src/DesktopMagic/Pages/MainPage.xaml.cs | 36 ++++++++++++++++++- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/src/DesktopMagic/DataContexts/MainWindowDataContext.cs b/src/DesktopMagic/DataContexts/MainWindowDataContext.cs index 8c3c0fd..d99941a 100644 --- a/src/DesktopMagic/DataContexts/MainWindowDataContext.cs +++ b/src/DesktopMagic/DataContexts/MainWindowDataContext.cs @@ -13,6 +13,7 @@ internal class MainWindowDataContext : INotifyPropertyChanged private static DesktopMagicSettings settings = new(); private bool isLoading = true; + private string? pluginsSearchText; public string Title => #if DEBUG @@ -43,6 +44,16 @@ internal class MainWindowDataContext : INotifyPropertyChanged } } + public string? PluginsSearchText + { + get => pluginsSearchText; + set + { + pluginsSearchText = value; + OnPropertyChanged(); + } + } + public bool IsAutoStartEnabled { get => StartupManager.IsAutoStartEnabled(); diff --git a/src/DesktopMagic/Pages/MainPage.xaml b/src/DesktopMagic/Pages/MainPage.xaml index 67ff6ae..e477d81 100644 --- a/src/DesktopMagic/Pages/MainPage.xaml +++ b/src/DesktopMagic/Pages/MainPage.xaml @@ -20,11 +20,19 @@ - + + + + + + + + + - + diff --git a/src/DesktopMagic/Pages/MainPage.xaml.cs b/src/DesktopMagic/Pages/MainPage.xaml.cs index 6b6f56a..008bf1b 100644 --- a/src/DesktopMagic/Pages/MainPage.xaml.cs +++ b/src/DesktopMagic/Pages/MainPage.xaml.cs @@ -4,10 +4,12 @@ using DesktopMagic.Helpers; using DesktopMagic.Plugins; using DesktopMagic.Settings; +using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; +using System.Windows.Data; namespace DesktopMagic.Pages; @@ -56,8 +58,8 @@ public partial class MainPage : Page { Dispatcher.Invoke(() => { - // Refresh the UI if needed _dataContext.Settings = _manager.Settings; + ApplyPluginsFilter(); }); } @@ -107,6 +109,38 @@ public partial class MainPage : Page } } + #region Plugin Search + + private void AllPluginsSearchTextBox_TextChanged(object sender, TextChangedEventArgs e) + { + ApplyPluginsFilter(); + } + + private void ApplyPluginsFilter() + { + string? searchText = _dataContext.PluginsSearchText; + + System.ComponentModel.ICollectionView view = CollectionViewSource.GetDefaultView(pluginsItemsControl.ItemsSource); + + if (string.IsNullOrWhiteSpace(searchText)) + { + view.Filter = null; + } + else + { + view.Filter = (item) => + { + if (item is KeyValuePair kvp) + { + return kvp.Value.Metadata.Name.Contains(searchText, StringComparison.OrdinalIgnoreCase); + } + return false; + }; + } + } + + #endregion + #region Layout Management private void LayoutsComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)