From 3f5f9ddb877fe9725d76d71e92bc322c73c6664a Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Mon, 15 Apr 2024 09:00:39 +0200 Subject: [PATCH] fix: add custom event handler if not default --- Pilz.Plugins.Advanced/Extensions.cs | 8 +++++++- Pilz.Plugins.Advanced/FeatureInsertPosition.cs | 17 +++++++++++++++++ .../PluginFeatureController.cs | 4 ++-- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 Pilz.Plugins.Advanced/FeatureInsertPosition.cs diff --git a/Pilz.Plugins.Advanced/Extensions.cs b/Pilz.Plugins.Advanced/Extensions.cs index 13b2b1c..dabc116 100644 --- a/Pilz.Plugins.Advanced/Extensions.cs +++ b/Pilz.Plugins.Advanced/Extensions.cs @@ -65,7 +65,7 @@ namespace Pilz.Plugins.Advanced /// You usually don't set customClickHandler if you set this parameter to . /// 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 void InsertItemsTo(this IEnumerable features, RadItemOwnerCollection itemsCollection, bool addDefaultHandler = false, EventHandler? customClickHandler = null, FeatureInsertMode insertMode = FeatureInsertMode.Default, int? customDefault = null, int? customTop = null, int? customBottom = null) + public static void InsertItemsTo(this IEnumerable features, RadItemOwnerCollection itemsCollection, bool addDefaultHandler = false, EventHandler? customClickHandler = null, FeatureInsertMode insertMode = FeatureInsertMode.Default, int? customDefault = null, int? customTop = null, int? customBottom = null, FeatureInsertPosition insertSplitter = FeatureInsertPosition.None) { var insertDefault = customDefault ?? (insertMode.HasFlag(FeatureInsertMode.DefaultStart) ? 0 : itemsCollection.Count); var insertTop = customTop ?? (insertMode.HasFlag(FeatureInsertMode.InsertTop) || insertMode.HasFlag(FeatureInsertMode.DefaultStart) ? 0 : insertDefault); @@ -82,21 +82,27 @@ namespace Pilz.Plugins.Advanced else item = feature.GetAsItem(null); + if (!addDefaultHandler && customClickHandler != null) + item.Click += customClickHandler; + switch (feature.Prioritization) { case FeaturePrioritization.High: if (insertDefault >= insertTop) insertDefault++; if (insertBottom >= insertTop) insertBottom++; + // ... itemsCollection.Insert(insertTop++, item); break; case FeaturePrioritization.Default: if (insertBottom >= insertDefault) insertBottom++; if (insertTop >= insertDefault) insertTop++; + // ... itemsCollection.Insert(insertDefault++, item); break; case FeaturePrioritization.Low: if (insertTop >= insertBottom) insertTop++; if (insertDefault >= insertBottom) insertDefault++; + // ... itemsCollection.Insert(insertBottom++, item); break; } diff --git a/Pilz.Plugins.Advanced/FeatureInsertPosition.cs b/Pilz.Plugins.Advanced/FeatureInsertPosition.cs new file mode 100644 index 0000000..fa3bc66 --- /dev/null +++ b/Pilz.Plugins.Advanced/FeatureInsertPosition.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilz.Plugins.Advanced +{ + [Flags] + public enum FeatureInsertPosition + { + None = 0, + Default = 1, + Top = 2, + Bottom = 3, + } +} diff --git a/Pilz.Plugins.Advanced/PluginFeatureController.cs b/Pilz.Plugins.Advanced/PluginFeatureController.cs index b41b3ea..db3240e 100644 --- a/Pilz.Plugins.Advanced/PluginFeatureController.cs +++ b/Pilz.Plugins.Advanced/PluginFeatureController.cs @@ -28,7 +28,7 @@ namespace Pilz.Plugins.Advanced /// public static PluginFeatureController Instance { get; private set; } = new(); - private readonly List features = new(); + private readonly HashSet features = new(); /// /// A wrapper of all registred instances. @@ -78,7 +78,7 @@ namespace Pilz.Plugins.Advanced public virtual IEnumerable GetAll() { - return controller.features.AsReadOnly(); + return controller.features.ToArray(); } public virtual IEnumerable Get(string featureType)