using System.Drawing; using System.Reflection; using Telerik.WinControls; using Telerik.WinControls.UI; namespace Pilz.Plugins.Advanced { public static class Extensions { public static Icon? ToIcon(this Image image) { if (image is Bitmap bitmap) return Icon.FromHandle(bitmap.GetHicon()); return null; } public static RadMenuItem GetAsItem(this PluginModule module, bool addDefaultHandler = true) { var item = new RadMenuItem { Text = module.Name, SvgImage = module.Icon, Tag = module, Visibility = module.Visible ? ElementVisibility.Visible : ElementVisibility.Collapsed }; if (addDefaultHandler) item.Click += RadMenuItem_RMMethod_Click; return item; } public static RadMenuItem GetAsItem(this PluginFunction function, bool addDefaultHandler = true) { var item = new RadMenuItem { Text = function.Name, SvgImage = function.Icon, Tag = function, Visibility = function.Enabled ? ElementVisibility.Visible : ElementVisibility.Collapsed }; if (addDefaultHandler) item.Click += RadMenuItem_RMFunction_Click; return item; } private static void RadMenuItem_RMMethod_Click(object? sender, EventArgs e) { if (sender is RadMenuItem item && item.Tag is PluginModule function) function.ShowUI(); } private static void RadMenuItem_RMFunction_Click(object? sender, EventArgs e) { if (sender is RadMenuItem item && item.Tag is PluginFunction function) function.Execute(); } } }