using Pilz.Features; namespace Pilz.UI.WinForms.Features; public abstract class PluginModule : PluginModuleBase where TPluginModuleUI : Control { 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 type, string identifier) : base(type, identifier) { } protected PluginModule(string type, string identifier, string? name) : base(type, identifier, name) { } public virtual void ShowUI() { ShowUI(null); } public virtual void ShowUI(PluginFunctionParameter? @params) { } public virtual TPluginModuleUI? CreateUI() { return CreateUI(null); } public virtual TPluginModuleUI? CreateUI(PluginFunctionParameter? @params) { object? ui = default; if (OnPreExecute(@params, ref ui)) ui = CreateNewUI(@params); OnPostExecute(@params, ref ui); return ui as TPluginModuleUI; } protected abstract TPluginModuleUI? CreateNewUI(PluginFunctionParameter? @params); }