add a simple plugin system

This commit is contained in:
2023-11-14 14:20:26 +01:00
parent 1c4d7554e2
commit 9b7eb40cfc
20 changed files with 563 additions and 6 deletions

View 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();
}
}
}