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)