From d61e47f900f2733d85404b727f6480bb53cf8ee6 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Tue, 15 Oct 2024 11:36:14 +0200 Subject: [PATCH] allow creating RadButtonItem instead of RadMenuItem --- .../Extensions.cs | 61 +++++++++++-------- .../PluginButtonType.cs | 7 +++ 2 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 Pilz.Plugins.Advanced.UI.Telerik/PluginButtonType.cs diff --git a/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs b/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs index 1a58383..7cfbd8d 100644 --- a/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs +++ b/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs @@ -12,37 +12,41 @@ public static class Extensions return null; } - public static RadMenuItem GetAsItem(this PluginModuleBase module) + public static RadButtonItem GetAsItem(this PluginModuleBase module, PluginButtonType buttonType = PluginButtonType.RadMenuItem) { - return GetAsItem(module, true); + return GetAsItem(module, true, buttonType: buttonType); } - public static RadMenuItem GetAsItem(this PluginModuleBase module, bool addDefaultHandler) + public static RadButtonItem GetAsItem(this PluginModuleBase module, bool addDefaultHandler, PluginButtonType buttonType = PluginButtonType.RadMenuItem) { - return GetAsItem(module, addDefaultHandler ? RadMenuItem_RMMethod_Click : null); + return GetAsItem(module, addDefaultHandler ? RadMenuItem_RMMethod_Click : null, buttonType: buttonType); } - public static RadMenuItem GetAsItem(this PluginFunction function) + public static RadButtonItem GetAsItem(this PluginFunction function, PluginButtonType buttonType = PluginButtonType.RadMenuItem) { - return GetAsItem(function, true); + return GetAsItem(function, true, buttonType: buttonType); } - public static RadMenuItem GetAsItem(this PluginFunction function, bool addDefaultHandler) + public static RadButtonItem GetAsItem(this PluginFunction function, bool addDefaultHandler, PluginButtonType buttonType = PluginButtonType.RadMenuItem) { - return GetAsItem(function, addDefaultHandler ? RadMenuItem_RMFunction_Click : null); + return GetAsItem(function, addDefaultHandler ? RadMenuItem_RMFunction_Click : null, buttonType: buttonType); } - public static RadMenuItem GetAsItem(this PluginFeature module, EventHandler? clickHandler) + public static RadButtonItem GetAsItem(this PluginFeature module, EventHandler? clickHandler, PluginButtonType buttonType = PluginButtonType.RadMenuItem) { - var item = new RadMenuItem + var item = buttonType switch { - Text = module.Name, - Image = module.Icon as Image, - SvgImage = module.Icon as RadSvgImage, - Tag = module, - Visibility = module.Enabled ? ElementVisibility.Visible : ElementVisibility.Collapsed + PluginButtonType.RadMenuItem => new RadMenuItem(), + PluginButtonType.RadButtonItem => new RadButtonItem(), + _ => throw new NotSupportedException(), }; + item.Text = module.Name; + item.Image = module.Icon as Image; + item.SvgImage = module.Icon as RadSvgImage; + item.Tag = module; + item.Visibility = module.Enabled ? ElementVisibility.Visible : ElementVisibility.Collapsed; + if (clickHandler is not null) item.Click += clickHandler; @@ -60,10 +64,16 @@ public static class Extensions /// -
/// -
/// Will add a default click handler that executes the feature.
- /// You usually don't set customClickHandler if you set this parameter to . + /// You usually don't set customClickHandler if you set this parameter to true. /// Adds a custom click handler. If addDefaultHandler is true, it will only work on s.
/// You usually don't set addDefaultHandler to true if you set this parameter to something not null. - public static IEnumerable InsertItemsTo(this IEnumerable features, + /// Defines how and where the items will be inserted. + /// Defines a custom default position (index). + /// Defines a custom top position (index). + /// Defines a custom bottom position (index). + /// Defines if splitters should be inserted to seperate the new items from the existing items. + /// Defines what type of button should be created. + public static IEnumerable InsertItemsTo(this IEnumerable features, RadItemOwnerCollection itemsCollection, bool addDefaultHandler = false, EventHandler? customClickHandler = null, @@ -71,23 +81,24 @@ public static class Extensions int? customDefault = null, int? customTop = null, int? customBottom = null, - FeatureInsertPosition insertSplitter = FeatureInsertPosition.None) + FeatureInsertPosition insertSplitter = FeatureInsertPosition.None, + PluginButtonType buttonType = PluginButtonType.RadMenuItem) { var insertDefault = customDefault ?? (insertMode.HasFlag(FeatureInsertMode.DefaultStart) ? 0 : itemsCollection.Count); var insertTop = customTop ?? (insertMode.HasFlag(FeatureInsertMode.InsertTop) || insertMode.HasFlag(FeatureInsertMode.DefaultStart) ? 0 : insertDefault); var insertBottom = customBottom ?? (insertMode.HasFlag(FeatureInsertMode.InsertBottom) || insertMode.HasFlag(FeatureInsertMode.DefaultEnd) ? itemsCollection.Count : insertDefault); - var insertedItems = new List(); + var insertedItems = new List(); foreach (var feature in features) { - RadMenuItem item; + RadButtonItem item; if (feature is PluginFunction function) - item = function.GetAsItem(addDefaultHandler); + item = function.GetAsItem(addDefaultHandler, buttonType); else if (feature is PluginModuleBase module) - item = module.GetAsItem(addDefaultHandler); + item = module.GetAsItem(addDefaultHandler, buttonType); else - item = feature.GetAsItem(null); + item = feature.GetAsItem(null, buttonType); if (!addDefaultHandler && customClickHandler != null) item.Click += customClickHandler; @@ -123,7 +134,7 @@ public static class Extensions private static void RadMenuItem_RMMethod_Click(object? sender, EventArgs e) { - if (sender is RadMenuItem item && item.Enabled) + if (sender is RadButtonItem item && item.Enabled) { if (item.Tag is RadPluginModule radmodule) radmodule.ShowUI(); @@ -134,7 +145,7 @@ public static class Extensions private static void RadMenuItem_RMFunction_Click(object? sender, EventArgs e) { - if (sender is RadMenuItem item && item.Tag is PluginFunction function && function.Enabled) + if (sender is RadButtonItem item && item.Tag is PluginFunction function && function.Enabled) function.Execute(); } } \ No newline at end of file diff --git a/Pilz.Plugins.Advanced.UI.Telerik/PluginButtonType.cs b/Pilz.Plugins.Advanced.UI.Telerik/PluginButtonType.cs new file mode 100644 index 0000000..099e9cc --- /dev/null +++ b/Pilz.Plugins.Advanced.UI.Telerik/PluginButtonType.cs @@ -0,0 +1,7 @@ +namespace Pilz.Plugins.Advanced.UI.Telerik; + +public enum PluginButtonType +{ + RadMenuItem, + RadButtonItem, +}