From 1adcce95de388fa000b148021a62e9ba8ca35c34 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 21 Dec 2023 12:06:13 +0100 Subject: [PATCH] Improve plugin manager UI --- .../DataContexts/ModEntryDataContext.cs | 5 ++- src/DesktopMagic/Helpers/CommandHandler.cs | 26 ++++++++++++ src/DesktopMagic/MainWindow.xaml | 4 +- src/DesktopMagic/MainWindow.xaml.cs | 14 ++----- src/DesktopMagic/Plugins/ModEntry.xaml | 19 +++++---- src/DesktopMagic/Plugins/PluginManager.xaml | 41 +++++++++++++++++-- .../Plugins/PluginManager.xaml.cs | 11 ++++- .../Resources/StringResources.de.xaml | 2 +- .../Resources/StringResources.en.xaml | 2 +- 9 files changed, 95 insertions(+), 29 deletions(-) create mode 100644 src/DesktopMagic/Helpers/CommandHandler.cs diff --git a/src/DesktopMagic/DataContexts/ModEntryDataContext.cs b/src/DesktopMagic/DataContexts/ModEntryDataContext.cs index 5732e0d..14f57d2 100644 --- a/src/DesktopMagic/DataContexts/ModEntryDataContext.cs +++ b/src/DesktopMagic/DataContexts/ModEntryDataContext.cs @@ -1,9 +1,10 @@ using Modio.NET.Models; using System; +using System.Windows.Input; namespace DesktopMagic.DataContexts; -internal class ModEntryDataContext(Mod mod) +internal class ModEntryDataContext(Mod mod, ICommand installCommand) { public string Name => mod.Name!; @@ -13,4 +14,6 @@ internal class ModEntryDataContext(Mod mod) public DateTime FormattedDateAdded => DateTimeOffset.FromUnixTimeSeconds(mod.DateAdded).LocalDateTime; public DateTime FormattedDateUpdated => DateTimeOffset.FromUnixTimeSeconds(mod.DateUpdated).LocalDateTime; + + public ICommand InstallCommand => installCommand; } diff --git a/src/DesktopMagic/Helpers/CommandHandler.cs b/src/DesktopMagic/Helpers/CommandHandler.cs new file mode 100644 index 0000000..0373d07 --- /dev/null +++ b/src/DesktopMagic/Helpers/CommandHandler.cs @@ -0,0 +1,26 @@ +using System; +using System.Windows.Input; + +namespace DesktopMagic.Helpers; + +public class CommandHandler(Action action, Func? canExecute = null) : ICommand +{ + private readonly Action action = action; + private readonly Func canExecute = canExecute ?? new Func(() => true); + + public event EventHandler? CanExecuteChanged + { + add => CommandManager.RequerySuggested += value; + remove => CommandManager.RequerySuggested -= value; + } + + public bool CanExecute(object? parameter) + { + return canExecute.Invoke(); + } + + public void Execute(object? parameter) + { + action(); + } +} diff --git a/src/DesktopMagic/MainWindow.xaml b/src/DesktopMagic/MainWindow.xaml index d14d802..eb8c587 100644 --- a/src/DesktopMagic/MainWindow.xaml +++ b/src/DesktopMagic/MainWindow.xaml @@ -136,11 +136,11 @@