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)