separate plugin ui & make Pilz.Plugins.Advanced package platform independent

This commit is contained in:
2024-04-26 08:56:02 +02:00
parent 841f3b41ae
commit 0c1e9ebec8
14 changed files with 166 additions and 40 deletions

View File

@@ -4,7 +4,7 @@ using Telerik.WinControls;
using Telerik.WinControls.Elements; using Telerik.WinControls.Elements;
using Telerik.WinControls.UI; using Telerik.WinControls.UI;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced.UI.Telerik
{ {
public static class Extensions public static class Extensions
{ {
@@ -15,12 +15,12 @@ namespace Pilz.Plugins.Advanced
return null; return null;
} }
public static RadMenuItem GetAsItem(this PluginModule module) public static RadMenuItem GetAsItem(this PluginModuleBase module)
{ {
return GetAsItem(module, true); 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); return GetAsItem(module, addDefaultHandler ? RadMenuItem_RMMethod_Click : null);
} }
@@ -40,7 +40,8 @@ namespace Pilz.Plugins.Advanced
var item = new RadMenuItem var item = new RadMenuItem
{ {
Text = module.Name, Text = module.Name,
SvgImage = module.Icon, Image = module.Icon as Image,
SvgImage = module.Icon as RadSvgImage,
Tag = module, Tag = module,
Visibility = module.Enabled ? ElementVisibility.Visible : ElementVisibility.Collapsed Visibility = module.Enabled ? ElementVisibility.Visible : ElementVisibility.Collapsed
}; };
@@ -77,7 +78,7 @@ namespace Pilz.Plugins.Advanced
if (feature is PluginFunction function) if (feature is PluginFunction function)
item = function.GetAsItem(addDefaultHandler); item = function.GetAsItem(addDefaultHandler);
else if (feature is PluginModule module) else if (feature is PluginModuleBase module)
item = module.GetAsItem(addDefaultHandler); item = module.GetAsItem(addDefaultHandler);
else else
item = feature.GetAsItem(null); item = feature.GetAsItem(null);

View File

@@ -0,0 +1,35 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-windows</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<PackageProjectUrl>https://gitlab.com/Pilzinsel64/pilz-framework</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj" />
<ProjectReference Include="..\Pilz.UI.Telerik.SymbolFactory\Pilz.UI.Telerik.SymbolFactory.csproj" />
<ProjectReference Include="..\Pilz.UI.Telerik\Pilz.UI.Telerik.csproj" />
</ItemGroup>
<PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Version>1.0.0</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="UI.for.WinForms.AllControls.Net70" Version="2024.1.312">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Compile Update="PluginModuleUI.cs">
<SubType>UserControl</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -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<PluginModuleUI>
{
/// <summary>
/// Wrapper for the <see cref="PluginFeature.Icon"/> property to directly use it as <see cref="RadSvgImage"/>.
/// </summary>
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()!);
}
}
}
}

View File

@@ -6,7 +6,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced.UI.Telerik
{ {
public class PluginModuleUI : FlyoutDialogBase, ILoadContent public class PluginModuleUI : FlyoutDialogBase, ILoadContent
{ {

View File

@@ -4,7 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced.UI
{ {
[Flags] [Flags]
public enum FeatureInsertMode public enum FeatureInsertMode

View File

@@ -4,7 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced.UI
{ {
[Flags] [Flags]
public enum FeatureInsertPosition public enum FeatureInsertPosition

View File

@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-windows</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<PackageProjectUrl>https://gitlab.com/Pilzinsel64/pilz-framework</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
<PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Version>1.0.0</Version>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.Plugins.Advanced\Pilz.Plugins.Advanced.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,14 +1,11 @@
using Pilz.UI.Telerik; using System.Drawing;
using Pilz.UI.Telerik.Dialogs;
using System.Drawing;
using System.Windows.Forms; 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<TPluginModuleUI> : PluginModuleBase where TPluginModuleUI : Control
{ {
public delegate void PluginModuleUIEventHandler(PluginModule module, PluginModuleUI ui); public delegate void PluginModuleUIEventHandler(PluginModuleBase module, TPluginModuleUI ui);
/// <summary> /// <summary>
/// Fires when a <see cref="PluginModuleUI"/> instance has been created. /// Fires when a <see cref="PluginModuleUI"/> instance has been created.
@@ -18,26 +15,34 @@ namespace Pilz.Plugins.Advanced
public bool Visible { get; set; } = true; public bool Visible { get; set; } = true;
public bool AllowEmbedding { get; set; } = true; public bool AllowEmbedding { get; set; } = true;
/// <summary>
/// Wrapper for the <see cref="PluginFeature.Icon"/> property to directly use it as <see cref="System.Drawing.Image"/>.
/// </summary>
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) protected PluginModule(string moduleType, string moduleIdentifier, string moduleName) : base(moduleType, moduleIdentifier, moduleName)
{ {
} }
public virtual void ShowUI() 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(); var ui = CreateNewUI();
OnUICreated?.Invoke(this, ui); OnUICreated?.Invoke(this, ui);
return ui; return ui;
} }
protected abstract PluginModuleUI CreateNewUI(); protected abstract TPluginModuleUI CreateNewUI();
} }
} }

View File

@@ -1,23 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net8.0-windows</TargetFrameworks> <TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<PackageProjectUrl>https://gitlab.com/Pilzinsel64/pilz-framework</PackageProjectUrl> <PackageProjectUrl>https://gitlab.com/Pilzinsel64/pilz-framework</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild> <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Version>2.6.1</Version> <Version>2.7.0</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.UI.Telerik.SymbolFactory\Pilz.UI.Telerik.SymbolFactory.csproj" />
<ProjectReference Include="..\Pilz.UI.Telerik\Pilz.UI.Telerik.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="UI.for.WinForms.AllControls.Net70" Version="2024.1.312">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project> </Project>

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Telerik.WinControls;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced
{ {
@@ -30,7 +29,7 @@ namespace Pilz.Plugins.Advanced
/// <summary> /// <summary>
/// The symbol for the feature. /// The symbol for the feature.
/// </summary> /// </summary>
public virtual RadSvgImage? Icon { get; set; } public virtual object? Icon { get; set; }
/// <summary> /// <summary>
/// Sets the prioritization of the feature. /// Sets the prioritization of the feature.
/// This will be respected on abfragen features and on inserting as items using the extension methods"/>. /// This will be respected on abfragen features and on inserting as items using the extension methods"/>.

View File

@@ -4,8 +4,6 @@ using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Telerik.Pdf;
using Telerik.WinControls;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced
{ {
@@ -167,7 +165,7 @@ namespace Pilz.Plugins.Advanced
} }
} }
public class ModuleController(PluginFeatureController controller) : FeatureController<PluginModule>(controller) public class ModuleController(PluginFeatureController controller) : FeatureController<PluginModuleBase>(controller)
{ {
} }

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Telerik.WinControls;
namespace Pilz.Plugins.Advanced namespace Pilz.Plugins.Advanced
{ {

View File

@@ -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)
{
}
}
}

View File

@@ -41,6 +41,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced", "Pi
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}"
EndProject 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 Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU 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|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.ActiveCfg = Release|Any CPU
{B285DA24-39C9-4BA2-AF3D-A1A05737268B}.Release|x86.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE