From 0c1e9ebec8c0b6a1b5e67112d5877f990429fa11 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Fri, 26 Apr 2024 08:56:02 +0200 Subject: [PATCH] separate plugin ui & make Pilz.Plugins.Advanced package platform independent --- .../Extensions.cs | 11 +++--- .../Pilz.Plugins.Advanced.UI.Telerik.csproj | 35 +++++++++++++++++ .../PluginModule.cs | 39 +++++++++++++++++++ .../PluginModuleUI.cs | 2 +- .../FeatureInsertMode.cs | 2 +- .../FeatureInsertPosition.cs | 2 +- .../Pilz.Plugins.Advanced.UI.csproj | 21 ++++++++++ .../PluginModule.cs | 33 +++++++++------- .../Pilz.Plugins.Advanced.csproj | 17 +++----- Pilz.Plugins.Advanced/PluginFeature.cs | 3 +- .../PluginFeatureController.cs | 4 +- Pilz.Plugins.Advanced/PluginFunction.cs | 1 - Pilz.Plugins.Advanced/PluginModuleBase.cs | 16 ++++++++ Pilz.sln | 20 ++++++++++ 14 files changed, 166 insertions(+), 40 deletions(-) rename {Pilz.Plugins.Advanced => Pilz.Plugins.Advanced.UI.Telerik}/Extensions.cs (93%) create mode 100644 Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj create mode 100644 Pilz.Plugins.Advanced.UI.Telerik/PluginModule.cs rename {Pilz.Plugins.Advanced => Pilz.Plugins.Advanced.UI.Telerik}/PluginModuleUI.cs (90%) rename {Pilz.Plugins.Advanced => Pilz.Plugins.Advanced.UI}/FeatureInsertMode.cs (97%) rename {Pilz.Plugins.Advanced => Pilz.Plugins.Advanced.UI}/FeatureInsertPosition.cs (88%) create mode 100644 Pilz.Plugins.Advanced.UI/Pilz.Plugins.Advanced.UI.csproj rename {Pilz.Plugins.Advanced => Pilz.Plugins.Advanced.UI}/PluginModule.cs (50%) create mode 100644 Pilz.Plugins.Advanced/PluginModuleBase.cs diff --git a/Pilz.Plugins.Advanced/Extensions.cs b/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs similarity index 93% rename from Pilz.Plugins.Advanced/Extensions.cs rename to Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs index dabc116..ecc0448 100644 --- a/Pilz.Plugins.Advanced/Extensions.cs +++ b/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs @@ -4,7 +4,7 @@ using Telerik.WinControls; using Telerik.WinControls.Elements; using Telerik.WinControls.UI; -namespace Pilz.Plugins.Advanced +namespace Pilz.Plugins.Advanced.UI.Telerik { public static class Extensions { @@ -15,12 +15,12 @@ namespace Pilz.Plugins.Advanced return null; } - public static RadMenuItem GetAsItem(this PluginModule module) + public static RadMenuItem GetAsItem(this PluginModuleBase module) { return GetAsItem(module, true); } - public static RadMenuItem GetAsItem(this PluginModule module, bool addDefaultHandler) + public static RadMenuItem GetAsItem(this PluginModuleBase module, bool addDefaultHandler) { return GetAsItem(module, addDefaultHandler ? RadMenuItem_RMMethod_Click : null); } @@ -40,7 +40,8 @@ namespace Pilz.Plugins.Advanced var item = new RadMenuItem { Text = module.Name, - SvgImage = module.Icon, + Image = module.Icon as Image, + SvgImage = module.Icon as RadSvgImage, Tag = module, Visibility = module.Enabled ? ElementVisibility.Visible : ElementVisibility.Collapsed }; @@ -77,7 +78,7 @@ namespace Pilz.Plugins.Advanced if (feature is PluginFunction function) item = function.GetAsItem(addDefaultHandler); - else if (feature is PluginModule module) + else if (feature is PluginModuleBase module) item = module.GetAsItem(addDefaultHandler); else item = feature.GetAsItem(null); diff --git a/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj b/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj new file mode 100644 index 0000000..b124e57 --- /dev/null +++ b/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj @@ -0,0 +1,35 @@ + + + + net8.0-windows + enable + enable + true + https://gitlab.com/Pilzinsel64/pilz-framework + MIT + + + + + + + + + + True + 1.0.0 + + + + + all + + + + + + UserControl + + + + diff --git a/Pilz.Plugins.Advanced.UI.Telerik/PluginModule.cs b/Pilz.Plugins.Advanced.UI.Telerik/PluginModule.cs new file mode 100644 index 0000000..0eecf11 --- /dev/null +++ b/Pilz.Plugins.Advanced.UI.Telerik/PluginModule.cs @@ -0,0 +1,39 @@ +using Pilz.Plugins.Advanced.UI; +using Pilz.UI.Telerik; +using Pilz.UI.Telerik.Dialogs; +using System.Drawing; +using System.Windows.Forms; +using Telerik.WinControls; + +namespace Pilz.Plugins.Advanced.UI.Telerik +{ + public abstract class PluginModule : PluginModule + { + /// + /// Wrapper for the property to directly use it as . + /// + public RadSvgImage? SvgImage + { + get => base.Icon as RadSvgImage; + set => base.Icon = value; + } + + protected PluginModule(string moduleType, string moduleIdentifier) : base(moduleType, moduleIdentifier) + { + + } + + protected PluginModule(string moduleType, string moduleIdentifier, string moduleName) : base(moduleType, moduleIdentifier, moduleName) + { + } + + public override void ShowUI() + { + if (CreateNewUI() is PluginModuleUI ui) + { + ui.BackColor = Color.Transparent; + DialogBaseForm.Show(ui, Name!, SvgImage!.ToImage().ToIcon()!); + } + } + } +} \ No newline at end of file diff --git a/Pilz.Plugins.Advanced/PluginModuleUI.cs b/Pilz.Plugins.Advanced.UI.Telerik/PluginModuleUI.cs similarity index 90% rename from Pilz.Plugins.Advanced/PluginModuleUI.cs rename to Pilz.Plugins.Advanced.UI.Telerik/PluginModuleUI.cs index 43006ba..e2b2142 100644 --- a/Pilz.Plugins.Advanced/PluginModuleUI.cs +++ b/Pilz.Plugins.Advanced.UI.Telerik/PluginModuleUI.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; -namespace Pilz.Plugins.Advanced +namespace Pilz.Plugins.Advanced.UI.Telerik { public class PluginModuleUI : FlyoutDialogBase, ILoadContent { diff --git a/Pilz.Plugins.Advanced/FeatureInsertMode.cs b/Pilz.Plugins.Advanced.UI/FeatureInsertMode.cs similarity index 97% rename from Pilz.Plugins.Advanced/FeatureInsertMode.cs rename to Pilz.Plugins.Advanced.UI/FeatureInsertMode.cs index 3982075..7aae2a6 100644 --- a/Pilz.Plugins.Advanced/FeatureInsertMode.cs +++ b/Pilz.Plugins.Advanced.UI/FeatureInsertMode.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Pilz.Plugins.Advanced +namespace Pilz.Plugins.Advanced.UI { [Flags] public enum FeatureInsertMode diff --git a/Pilz.Plugins.Advanced/FeatureInsertPosition.cs b/Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs similarity index 88% rename from Pilz.Plugins.Advanced/FeatureInsertPosition.cs rename to Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs index fa3bc66..e45a0df 100644 --- a/Pilz.Plugins.Advanced/FeatureInsertPosition.cs +++ b/Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Pilz.Plugins.Advanced +namespace Pilz.Plugins.Advanced.UI { [Flags] public enum FeatureInsertPosition diff --git a/Pilz.Plugins.Advanced.UI/Pilz.Plugins.Advanced.UI.csproj b/Pilz.Plugins.Advanced.UI/Pilz.Plugins.Advanced.UI.csproj new file mode 100644 index 0000000..27e5a3a --- /dev/null +++ b/Pilz.Plugins.Advanced.UI/Pilz.Plugins.Advanced.UI.csproj @@ -0,0 +1,21 @@ + + + + net8.0-windows + enable + enable + true + https://gitlab.com/Pilzinsel64/pilz-framework + MIT + + + + True + 1.0.0 + + + + + + + diff --git a/Pilz.Plugins.Advanced/PluginModule.cs b/Pilz.Plugins.Advanced.UI/PluginModule.cs similarity index 50% rename from Pilz.Plugins.Advanced/PluginModule.cs rename to Pilz.Plugins.Advanced.UI/PluginModule.cs index bb1b171..7990af4 100644 --- a/Pilz.Plugins.Advanced/PluginModule.cs +++ b/Pilz.Plugins.Advanced.UI/PluginModule.cs @@ -1,14 +1,11 @@ -using Pilz.UI.Telerik; -using Pilz.UI.Telerik.Dialogs; -using System.Drawing; +using System.Drawing; using System.Windows.Forms; -using Telerik.WinControls; -namespace Pilz.Plugins.Advanced +namespace Pilz.Plugins.Advanced.UI { - public abstract class PluginModule : PluginFeature + public abstract class PluginModule : PluginModuleBase where TPluginModuleUI : Control { - public delegate void PluginModuleUIEventHandler(PluginModule module, PluginModuleUI ui); + public delegate void PluginModuleUIEventHandler(PluginModuleBase module, TPluginModuleUI ui); /// /// Fires when a instance has been created. @@ -18,26 +15,34 @@ namespace Pilz.Plugins.Advanced public bool Visible { get; set; } = true; public bool AllowEmbedding { get; set; } = true; + /// + /// Wrapper for the property to directly use it as . + /// + public Image? Image + { + get => base.Icon as Image; + set => base.Icon = value; + } + + protected PluginModule(string moduleType, string moduleIdentifier) : base(moduleType, moduleIdentifier) + { + } + protected PluginModule(string moduleType, string moduleIdentifier, string moduleName) : base(moduleType, moduleIdentifier, moduleName) { } public virtual void ShowUI() { - if (CreateNewUI() is PluginModuleUI ui) - { - ui.BackColor = Color.Transparent; - DialogBaseForm.Show(ui, Name!, Icon!.ToImage().ToIcon()!); - } } - public virtual PluginModuleUI CreateUI() + public virtual TPluginModuleUI CreateUI() { var ui = CreateNewUI(); OnUICreated?.Invoke(this, ui); return ui; } - protected abstract PluginModuleUI CreateNewUI(); + protected abstract TPluginModuleUI CreateNewUI(); } } \ No newline at end of file diff --git a/Pilz.Plugins.Advanced/Pilz.Plugins.Advanced.csproj b/Pilz.Plugins.Advanced/Pilz.Plugins.Advanced.csproj index d6ab606..a9b0041 100644 --- a/Pilz.Plugins.Advanced/Pilz.Plugins.Advanced.csproj +++ b/Pilz.Plugins.Advanced/Pilz.Plugins.Advanced.csproj @@ -1,23 +1,16 @@  + - net8.0-windows + net8.0 enable enable - true https://gitlab.com/Pilzinsel64/pilz-framework MIT + True - 2.6.1 + 2.7.0 - - - - - - - all - - + \ No newline at end of file diff --git a/Pilz.Plugins.Advanced/PluginFeature.cs b/Pilz.Plugins.Advanced/PluginFeature.cs index 9029e2e..dff18a3 100644 --- a/Pilz.Plugins.Advanced/PluginFeature.cs +++ b/Pilz.Plugins.Advanced/PluginFeature.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Telerik.WinControls; namespace Pilz.Plugins.Advanced { @@ -30,7 +29,7 @@ namespace Pilz.Plugins.Advanced /// /// The symbol for the feature. /// - public virtual RadSvgImage? Icon { get; set; } + public virtual object? Icon { get; set; } /// /// Sets the prioritization of the feature. /// This will be respected on abfragen features and on inserting as items using the extension methods"/>. diff --git a/Pilz.Plugins.Advanced/PluginFeatureController.cs b/Pilz.Plugins.Advanced/PluginFeatureController.cs index 2f1a0a4..66ae903 100644 --- a/Pilz.Plugins.Advanced/PluginFeatureController.cs +++ b/Pilz.Plugins.Advanced/PluginFeatureController.cs @@ -4,8 +4,6 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; -using Telerik.Pdf; -using Telerik.WinControls; namespace Pilz.Plugins.Advanced { @@ -167,7 +165,7 @@ namespace Pilz.Plugins.Advanced } } - public class ModuleController(PluginFeatureController controller) : FeatureController(controller) + public class ModuleController(PluginFeatureController controller) : FeatureController(controller) { } diff --git a/Pilz.Plugins.Advanced/PluginFunction.cs b/Pilz.Plugins.Advanced/PluginFunction.cs index b8f6629..4831687 100644 --- a/Pilz.Plugins.Advanced/PluginFunction.cs +++ b/Pilz.Plugins.Advanced/PluginFunction.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Telerik.WinControls; namespace Pilz.Plugins.Advanced { diff --git a/Pilz.Plugins.Advanced/PluginModuleBase.cs b/Pilz.Plugins.Advanced/PluginModuleBase.cs new file mode 100644 index 0000000..7e3e33c --- /dev/null +++ b/Pilz.Plugins.Advanced/PluginModuleBase.cs @@ -0,0 +1,16 @@ +using System.ComponentModel; + +namespace Pilz.Plugins.Advanced +{ + [EditorBrowsable(EditorBrowsableState.Never)] + public abstract class PluginModuleBase : PluginFeature + { + protected PluginModuleBase(string moduleType, string moduleIdentifier) : base(moduleType, moduleIdentifier) + { + } + + protected PluginModuleBase(string moduleType, string moduleIdentifier, string moduleName) : base(moduleType, moduleIdentifier, moduleName) + { + } + } +} \ No newline at end of file diff --git a/Pilz.sln b/Pilz.sln index 0048474..9dc50ea 100644 --- a/Pilz.sln +++ b/Pilz.sln @@ -41,6 +41,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced", "Pi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Plugins.Advanced.UI", "Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj", "{5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Plugins.Advanced.UI.Telerik", "Pilz.Plugins.Advanced.UI.Telerik\Pilz.Plugins.Advanced.UI.Telerik.csproj", "{0A837BD6-A19C-4A05-A57D-CBB0CD64B244}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -201,6 +205,22 @@ Global {B285DA24-39C9-4BA2-AF3D-A1A05737268B}.Release|Any CPU.Build.0 = Release|Any CPU {B285DA24-39C9-4BA2-AF3D-A1A05737268B}.Release|x86.ActiveCfg = Release|Any CPU {B285DA24-39C9-4BA2-AF3D-A1A05737268B}.Release|x86.Build.0 = Release|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Debug|x86.ActiveCfg = Debug|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Debug|x86.Build.0 = Debug|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Release|Any CPU.Build.0 = Release|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Release|x86.ActiveCfg = Release|Any CPU + {5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}.Release|x86.Build.0 = Release|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Debug|x86.ActiveCfg = Debug|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Debug|x86.Build.0 = Debug|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Release|Any CPU.Build.0 = Release|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Release|x86.ActiveCfg = Release|Any CPU + {0A837BD6-A19C-4A05-A57D-CBB0CD64B244}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE