From bc8396795c81246337c0681a0812fc7c13f8f2c4 Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Wed, 10 Mar 2021 12:39:41 +0100 Subject: [PATCH] Added Run Program plugin Added Author and URL display in Plugins list --- .../MassiveKnob.Plugin.RunProgram.csproj | 91 +++++++++++ .../MassiveKnobPlugin.json | 3 + .../MassiveKnobRunProgramPlugin.cs | 21 +++ .../Properties/AssemblyInfo.cs | 36 +++++ .../RunProgram/RunProgramAction.cs | 81 ++++++++++ .../RunProgram/RunProgramSettings.cs | 8 + .../RunProgram/RunProgramSettingsView.xaml | 21 +++ .../RunProgram/RunProgramSettingsView.xaml.cs | 27 ++++ .../RunProgram/RunProgramSettingsViewModel.cs | 53 +++++++ .../Strings.Designer.cs | 126 ++++++++++++++++ .../Strings.resx | 141 ++++++++++++++++++ .../MassiveKnob.Plugin/IMassiveKnobPlugin.cs | 2 - Windows/MassiveKnob.sln | 6 + Windows/MassiveKnob/Style.xaml | 11 ++ .../View/Settings/SettingsPluginsView.xaml | 2 + .../View/Settings/SettingsPluginsView.xaml.cs | 17 ++- .../MassiveKnob/ViewModel/PluginViewModel.cs | 8 +- .../Settings/SettingsPluginsViewModel.cs | 6 +- 18 files changed, 653 insertions(+), 7 deletions(-) create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/MassiveKnob.Plugin.RunProgram.csproj create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobPlugin.json create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobRunProgramPlugin.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/Properties/AssemblyInfo.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramAction.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettings.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsViewModel.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/Strings.Designer.cs create mode 100644 Windows/MassiveKnob.Plugin.RunProgram/Strings.resx diff --git a/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnob.Plugin.RunProgram.csproj b/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnob.Plugin.RunProgram.csproj new file mode 100644 index 0000000..a83be72 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnob.Plugin.RunProgram.csproj @@ -0,0 +1,91 @@ + + + + + Debug + AnyCPU + {BB1E8BA4-7965-4E46-B1BE-D2A7C491A204} + Library + Properties + MassiveKnob.Plugin.RunProgram + MassiveKnob.Plugin.RunProgram + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + RunProgramSettingsView.xaml + + + + + + Strings.resx + True + True + + + + + Always + + + + + {A1298BE4-1D23-416C-8C56-FC9264487A95} + MassiveKnob.Plugin + + + + + PublicResXFileCodeGenerator + Strings.Designer.cs + + + + + 4.5.4 + + + + + MSBuild:Compile + Designer + + + + \ No newline at end of file diff --git a/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobPlugin.json b/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobPlugin.json new file mode 100644 index 0000000..d892ba4 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobPlugin.json @@ -0,0 +1,3 @@ +{ + "EntryAssembly": "MassiveKnob.Plugin.RunProgram.dll" +} diff --git a/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobRunProgramPlugin.cs b/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobRunProgramPlugin.cs new file mode 100644 index 0000000..6e9f0ff --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/MassiveKnobRunProgramPlugin.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using MassiveKnob.Plugin.RunProgram.RunProgram; + +namespace MassiveKnob.Plugin.RunProgram +{ + [MassiveKnobPlugin] + public class MassiveKnobRunProgramPlugin : IMassiveKnobActionPlugin + { + public Guid PluginId { get; } = new Guid("10537f2a-6876-48b8-8ef9-8d05f185fa62"); + public string Name { get; } = Strings.PluginName; + public string Description { get; } = Strings.PluginDescription; + public string Author { get; } = "Mark van Renswoude "; + public string Url { get; } = "https://www.github.com/MvRens/MassiveKnob/"; + + public IEnumerable Actions { get; } = new IMassiveKnobAction[] + { + new RunProgramAction() + }; + } +} diff --git a/Windows/MassiveKnob.Plugin.RunProgram/Properties/AssemblyInfo.cs b/Windows/MassiveKnob.Plugin.RunProgram/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..754d30c --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MassiveKnob.Plugin.RunProgram")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MassiveKnob.Plugin.RunProgram")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("bb1e8ba4-7965-4e46-b1be-d2a7c491a204")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramAction.cs b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramAction.cs new file mode 100644 index 0000000..8a1342a --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramAction.cs @@ -0,0 +1,81 @@ +using System; +using System.Diagnostics; +using System.Threading.Tasks; +using System.Windows.Controls; +using Microsoft.Extensions.Logging; + +namespace MassiveKnob.Plugin.RunProgram.RunProgram +{ + public class RunProgramAction : IMassiveKnobAction + { + public Guid ActionId { get; } = new Guid("c3a79015-4b8f-414d-9682-02307de8639c"); + public MassiveKnobActionType ActionType { get; } = MassiveKnobActionType.InputDigital; + public string Name { get; } = Strings.RunProgramName; + public string Description { get; } = Strings.RunProgramDescription; + + + public IMassiveKnobActionInstance Create(ILogger logger) + { + return new Instance(logger); + } + + + private class Instance : IMassiveKnobDigitalAction + { + private readonly ILogger logger; + private IMassiveKnobActionContext actionContext; + private RunProgramSettings settings; + + + public Instance(ILogger logger) + { + this.logger = logger; + } + + + public void Initialize(IMassiveKnobActionContext context) + { + actionContext = context; + settings = context.GetSettings(); + } + + + public void Dispose() + { + } + + + public UserControl CreateSettingsControl() + { + var viewModel = new RunProgramSettingsViewModel(settings); + viewModel.PropertyChanged += (sender, args) => + { + actionContext.SetSettings(settings); + }; + + return new RunProgramSettingsView(viewModel); + } + + + public ValueTask DigitalChanged(bool on) + { + if (!on) + return default; + + if (string.IsNullOrEmpty(settings.Filename)) + return default; + + logger.LogInformation("Run program: filename = {filename}, arguments = {arguments}", settings.Filename, settings.Arguments); + Process.Start(new ProcessStartInfo + { + FileName = settings.Filename, + Arguments = settings.Arguments, + UseShellExecute = true, + Verb = "open" + }); + + return default; + } + } + } +} \ No newline at end of file diff --git a/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettings.cs b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettings.cs new file mode 100644 index 0000000..f0b00d6 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettings.cs @@ -0,0 +1,8 @@ +namespace MassiveKnob.Plugin.RunProgram.RunProgram +{ + public class RunProgramSettings + { + public string Filename { get; set; } + public string Arguments { get; set; } + } +} diff --git a/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml new file mode 100644 index 0000000..6ddd583 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml.cs b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml.cs new file mode 100644 index 0000000..bad83f5 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsView.xaml.cs @@ -0,0 +1,27 @@ +using System.Windows; + +namespace MassiveKnob.Plugin.RunProgram.RunProgram +{ + /// + /// Interaction logic for RunProgramSettingsView.xaml + /// + public partial class RunProgramSettingsView + { + public RunProgramSettingsView(RunProgramSettingsViewModel viewModel) + { + DataContext = viewModel; + InitializeComponent(); + } + + private void ButtonBrowseClick(object sender, RoutedEventArgs e) + { + var dialog = new Microsoft.Win32.OpenFileDialog + { + Filter = Strings.FilenameDialogFilter + }; + + if (dialog.ShowDialog().GetValueOrDefault()) + ((RunProgramSettingsViewModel) DataContext).Filename = dialog.FileName; + } + } +} diff --git a/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsViewModel.cs b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsViewModel.cs new file mode 100644 index 0000000..8d4a63e --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/RunProgram/RunProgramSettingsViewModel.cs @@ -0,0 +1,53 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace MassiveKnob.Plugin.RunProgram.RunProgram +{ + public class RunProgramSettingsViewModel : INotifyPropertyChanged + { + private readonly RunProgramSettings settings; + + + // ReSharper disable UnusedMember.Global - used by WPF Binding + public string Filename + { + get => settings.Filename; + set + { + if (value == settings.Filename) + return; + + settings.Filename = value; + OnPropertyChanged(); + } + } + + public string Arguments + { + get => settings.Arguments; + set + { + if (value == settings.Arguments) + return; + + settings.Arguments = value; + OnPropertyChanged(); + } + } + // ReSharper restore UnusedMember.Global + + + public RunProgramSettingsViewModel(RunProgramSettings settings) + { + this.settings = settings; + } + + + public event PropertyChangedEventHandler PropertyChanged; + + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Windows/MassiveKnob.Plugin.RunProgram/Strings.Designer.cs b/Windows/MassiveKnob.Plugin.RunProgram/Strings.Designer.cs new file mode 100644 index 0000000..f2c7400 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/Strings.Designer.cs @@ -0,0 +1,126 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MassiveKnob.Plugin.RunProgram { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Strings { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Strings() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MassiveKnob.Plugin.RunProgram.Strings", typeof(Strings).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Executable files (*.exe, *.bat, *.cmd)|*.exe,*.bat,*.cmd|All files (*.*)|*.*. + /// + public static string FilenameDialogFilter { + get { + return ResourceManager.GetString("FilenameDialogFilter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provides an action to run an application when a button is pressed.. + /// + public static string PluginDescription { + get { + return ResourceManager.GetString("PluginDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Run Program. + /// + public static string PluginName { + get { + return ResourceManager.GetString("PluginName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Runs an application when a button is pressed.. + /// + public static string RunProgramDescription { + get { + return ResourceManager.GetString("RunProgramDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Run program. + /// + public static string RunProgramName { + get { + return ResourceManager.GetString("RunProgramName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Optional arguments passed to the executable. + /// + public static string SettingArguments { + get { + return ResourceManager.GetString("SettingArguments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Executable, file or URL to open. + /// + public static string SettingFilename { + get { + return ResourceManager.GetString("SettingFilename", resourceCulture); + } + } + } +} diff --git a/Windows/MassiveKnob.Plugin.RunProgram/Strings.resx b/Windows/MassiveKnob.Plugin.RunProgram/Strings.resx new file mode 100644 index 0000000..82a4572 --- /dev/null +++ b/Windows/MassiveKnob.Plugin.RunProgram/Strings.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Executable files (*.exe, *.bat, *.cmd)|*.exe,*.bat,*.cmd|All files (*.*)|*.* + + + Provides an action to run an application when a button is pressed. + + + Run Program + + + Runs an application when a button is pressed. + + + Run program + + + Optional arguments passed to the executable + + + Executable, file or URL to open + + \ No newline at end of file diff --git a/Windows/MassiveKnob.Plugin/IMassiveKnobPlugin.cs b/Windows/MassiveKnob.Plugin/IMassiveKnobPlugin.cs index e4a138d..d7b15a0 100644 --- a/Windows/MassiveKnob.Plugin/IMassiveKnobPlugin.cs +++ b/Windows/MassiveKnob.Plugin/IMassiveKnobPlugin.cs @@ -1,7 +1,5 @@ using System; -// ReSharper disable UnusedMember.Global - public API - namespace MassiveKnob.Plugin { /// diff --git a/Windows/MassiveKnob.sln b/Windows/MassiveKnob.sln index c19297a..6268963 100644 --- a/Windows/MassiveKnob.sln +++ b/Windows/MassiveKnob.sln @@ -21,6 +21,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MassiveKnob.Plugin.VoiceMee EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Voicemeeter", "VoicemeeterRemote\Voicemeeter\Voicemeeter.csproj", "{F35DD8E5-91FA-403E-B6F6-8D2B4AE84198}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MassiveKnob.Plugin.RunProgram", "MassiveKnob.Plugin.RunProgram\MassiveKnob.Plugin.RunProgram.csproj", "{BB1E8BA4-7965-4E46-B1BE-D2A7C491A204}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -63,6 +65,10 @@ Global {F35DD8E5-91FA-403E-B6F6-8D2B4AE84198}.Debug|Any CPU.Build.0 = Debug|Any CPU {F35DD8E5-91FA-403E-B6F6-8D2B4AE84198}.Release|Any CPU.ActiveCfg = Release|Any CPU {F35DD8E5-91FA-403E-B6F6-8D2B4AE84198}.Release|Any CPU.Build.0 = Release|Any CPU + {BB1E8BA4-7965-4E46-B1BE-D2A7C491A204}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB1E8BA4-7965-4E46-B1BE-D2A7C491A204}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB1E8BA4-7965-4E46-B1BE-D2A7C491A204}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB1E8BA4-7965-4E46-B1BE-D2A7C491A204}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Windows/MassiveKnob/Style.xaml b/Windows/MassiveKnob/Style.xaml index 8193282..e0a5785 100644 --- a/Windows/MassiveKnob/Style.xaml +++ b/Windows/MassiveKnob/Style.xaml @@ -56,4 +56,15 @@ + + + + \ No newline at end of file diff --git a/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml b/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml index 3006f35..3b5c24a 100644 --- a/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml +++ b/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml @@ -21,6 +21,8 @@ + + diff --git a/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml.cs b/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml.cs index 62c5ca9..8c0d43b 100644 --- a/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml.cs +++ b/Windows/MassiveKnob/View/Settings/SettingsPluginsView.xaml.cs @@ -1,4 +1,8 @@ -using MassiveKnob.ViewModel.Settings; +using System.Diagnostics; +using System.Windows; +using System.Windows.Input; +using MassiveKnob.ViewModel; +using MassiveKnob.ViewModel.Settings; namespace MassiveKnob.View.Settings { @@ -12,5 +16,16 @@ namespace MassiveKnob.View.Settings DataContext = viewModel; InitializeComponent(); } + + private void UrlMouseDown(object sender, MouseButtonEventArgs e) + { + var dataContext = ((FrameworkElement) e.Source).DataContext; + + Process.Start(new ProcessStartInfo + { + FileName = ((PluginViewModel) dataContext).Url, + Verb = "open" + }); + } } } diff --git a/Windows/MassiveKnob/ViewModel/PluginViewModel.cs b/Windows/MassiveKnob/ViewModel/PluginViewModel.cs index 5d292e0..86cc751 100644 --- a/Windows/MassiveKnob/ViewModel/PluginViewModel.cs +++ b/Windows/MassiveKnob/ViewModel/PluginViewModel.cs @@ -8,16 +8,22 @@ namespace MassiveKnob.ViewModel public string Name { get; } public string Description { get; } public string Filename { get; } + public string Author { get; } + public string Url { get; } public Visibility DescriptionVisibility => string.IsNullOrEmpty(Description) ? Visibility.Collapsed : Visibility.Visible; + public Visibility AuthorVisibility => string.IsNullOrEmpty(Author) ? Visibility.Collapsed : Visibility.Visible; + public Visibility UrlVisibility => string.IsNullOrEmpty(Url) ? Visibility.Collapsed : Visibility.Visible; // ReSharper restore UnusedMember.Global - public PluginViewModel(string name, string description, string filename) + public PluginViewModel(string name, string description, string filename, string author, string url) { Name = name; Description = description; Filename = filename; + Author = author; + Url = url; } } } diff --git a/Windows/MassiveKnob/ViewModel/Settings/SettingsPluginsViewModel.cs b/Windows/MassiveKnob/ViewModel/Settings/SettingsPluginsViewModel.cs index d6a6211..dfe6c80 100644 --- a/Windows/MassiveKnob/ViewModel/Settings/SettingsPluginsViewModel.cs +++ b/Windows/MassiveKnob/ViewModel/Settings/SettingsPluginsViewModel.cs @@ -19,7 +19,7 @@ namespace MassiveKnob.ViewModel.Settings return; Plugins = pluginManager.GetPlugins() - .Select(p => new PluginViewModel(p.Plugin.Name, p.Plugin.Description, p.Filename)) + .Select(p => new PluginViewModel(p.Plugin.Name, p.Plugin.Description, p.Filename, p.Plugin.Author, p.Plugin.Url)) .OrderBy(p => p.Name, StringComparer.CurrentCultureIgnoreCase) .ToList(); } @@ -33,8 +33,8 @@ namespace MassiveKnob.ViewModel.Settings { Plugins = new[] { - new PluginViewModel("Plugin without description", null, "D:\\Does\\Not\\Exist.dll"), - new PluginViewModel("Design-time plugin", "Fake plugin only visible at design-time.", "C:\\Does\\Not\\Exist.dll") + new PluginViewModel("Plugin without description", null, "D:\\Does\\Not\\Exist.dll", "Some Massive Knob ", "https://lmgtfy.app/?q=Massive+Knob"), + new PluginViewModel("Design-time plugin", "Fake plugin only visible at design-time.", "C:\\Does\\Not\\Exist.dll", null, null) }; } }