add a simple plugin system
This commit is contained in:
62
Pilz.Plugins.Advanced/Extensions.cs
Normal file
62
Pilz.Plugins.Advanced/Extensions.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using SM64RomManager.Functions;
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user