diff --git a/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs b/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs
index 8e36d92..4070253 100644
--- a/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs
+++ b/Pilz.Plugins.Advanced.UI.Telerik/Extensions.cs
@@ -73,7 +73,7 @@ public static class Extensions
/// 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 if splitters should be inserted to seperate the new items by priorization.
/// Defines what type of button should be created.
public static IEnumerable InsertItemsTo(this IEnumerable features,
RadItemOwnerCollection itemsCollection,
@@ -83,13 +83,17 @@ public static class Extensions
int? customDefault = null,
int? customTop = null,
int? customBottom = null,
- FeatureInsertPosition insertSplitter = FeatureInsertPosition.None,
+ bool insertPrioSplitters = false,
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();
+ FeaturePrioritization? prevPrio = null;
+
+ // Oder by priorization
+ features = features.OrderByDescending(n => n.Prioritization);
foreach (var feature in features)
{
@@ -105,26 +109,37 @@ public static class Extensions
if (!addDefaultHandler && customClickHandler != null)
item.Click += customClickHandler;
- switch (feature.Prioritization)
+ if (insertPrioSplitters && (prevPrio == null || prevPrio > 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;
+ insertItem(new RadMenuSeparatorItem());
+ prevPrio = feature.Prioritization;
+ }
+
+ insertItem(item);
+
+ void insertItem(RadButtonItem item)
+ {
+ 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;
+ }
}
if (item.Parent != null)
diff --git a/Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs b/Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs
index 19a4394..1c0ab10 100644
--- a/Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs
+++ b/Pilz.Plugins.Advanced.UI/FeatureInsertPosition.cs
@@ -7,4 +7,5 @@ public enum FeatureInsertPosition
Default = 1,
Top = 2,
Bottom = 3,
+ All = int.MaxValue,
}