From be8f9ea5441d698c191651e9ab38757f0314ed54 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Wed, 4 Jun 2025 09:33:18 +0200 Subject: [PATCH] insert prio splitters --- .../Extensions.cs | 57 ++++++++++++------- .../FeatureInsertPosition.cs | 1 + 2 files changed, 37 insertions(+), 21 deletions(-) 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, }