using System.Reflection.Metadata; namespace Pilz.Plugins.Advanced.UI; public abstract class PluginModule : PluginModuleBase where TPluginModuleUI : Control { public delegate void PluginModuleUIEventHandler(PluginModuleBase module, TPluginModuleUI ui); /// /// Fires when a instance has been created. /// public static event PluginModuleUIEventHandler? OnUICreated; 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) { var ui = CreateNewUI(@params); OnUICreated?.Invoke(this, ui); return ui; } protected abstract TPluginModuleUI CreateNewUI(PluginFunctionParameter? @params); }