namespace Pilz.Plugins.Advanced.UI; 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 moduleType, string moduleIdentifier) : base(moduleType, moduleIdentifier) { } protected PluginModule(string moduleType, string moduleIdentifier, string moduleName) : base(moduleType, moduleIdentifier, moduleName) { } 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); }