소스 검색

Allowed for FilterButtonComponent to populate a MenuItem instead of a ContextMenu

Kenric Nugteren 5 달 전
부모
커밋
e374720398
2개의 변경된 파일33개의 추가작업 그리고 9개의 파일을 삭제
  1. 18 9
      inabox.wpf/DynamicGrid/DynamicGridFilterButtonComponent.cs
  2. 15 0
      inabox.wpf/WPFUtils.cs

+ 18 - 9
inabox.wpf/DynamicGrid/DynamicGridFilterButtonComponent.cs

@@ -160,31 +160,40 @@ public abstract class DynamicGridFilterComponent<T>
 
     private ContextMenu? Menu;
 
-    private void RebuildMenu(ContextMenu menu)
+    public void PopulateMenu(ContextMenu menu)
+    {
+        RebuildMenu(menu);
+    }
+    public void PopulateMenu(MenuItem menu)
+    {
+        RebuildMenu(menu);
+    }
+
+    private void RebuildMenu(ItemsControl menu)
     {
         menu.Items.Clear();
 
         if (TemporaryFilter is null)
         {
-            menu.AddCheckItem("Filter...", TemporaryFilter_Click, isChecked: false);
+            menu.AddCheckMenuItem("Filter...", TemporaryFilter_Click, isChecked: false);
         }
         else
         {
-            menu.AddCheckItem("<Custom Filter>", TemporaryFilter_Click, isChecked: true);
+            menu.AddCheckMenuItem("<Custom Filter>", TemporaryFilter_Click, isChecked: true);
         }
 
-        menu.AddItem("Clear Filters", null, ClearFilter_Click);
-        var multipleFilters = menu.AddCheckItem("Use Multiple Filters", MultipleFilters_Click, MultipleFilters);
+        menu.AddMenuItem("Clear Filters", null, ClearFilter_Click);
+        var multipleFilters = menu.AddCheckMenuItem("Use Multiple Filters", MultipleFilters_Click, MultipleFilters);
         multipleFilters.StaysOpenOnClick = true;
 
-        menu.AddSeparatorIfNeeded();
+        menu.AddMenuSeparatorIfNeeded();
 
         var globalFilters = Security.IsAllowed<CanEditGlobalFilters>() ? GlobalConfiguration.Load() : new CoreFilterDefinitions();
         var userFilters = UserConfiguration.Load();
         var filters = new CoreFilterDefinitions(globalFilters.Count + userFilters.Count);
         foreach (var filter in BuiltInFilters.Concat<ICoreFilterDefinition>(globalFilters).Concat(userFilters))
         {
-            var item = menu.AddCheckItem(filter.Name, filter, Filter_Toggle);
+            var item = menu.AddCheckMenuItem(filter.Name, filter, Filter_Toggle);
             item.StaysOpenOnClick = true;
             if (SelectedFilters.Any(x => x.Name.Equals(filter.Name)))
             {
@@ -198,8 +207,8 @@ public abstract class DynamicGridFilterComponent<T>
 
         if (Security.IsAllowed<CanCustomiseFilters>())
         {
-            menu.AddSeparatorIfNeeded();
-            menu.AddItem("Manage Filters", null, () =>
+            menu.AddMenuSeparatorIfNeeded();
+            menu.AddMenuItem("Manage Filters", null, () =>
             {
                 var window = new DynamicGridFilterEditor(filters, typeof(T));
                 if (window.ShowDialog() == true)

+ 15 - 0
inabox.wpf/WPFUtils.cs

@@ -607,23 +607,38 @@ public static class WPFUtils
 
     public static Separator AddSeparator(this ContextMenu menu, int index = -1) => DoAddSeparator(menu, index);
     public static Separator AddSeparator(this MenuItem menu, int index = -1) => DoAddSeparator(menu, index);
+    public static Separator AddMenuSeparator(this ItemsControl menu, int index = -1) => DoAddSeparator(menu, index);
+
     public static Separator? AddSeparatorIfNeeded(this ContextMenu menu, int index = -1) => DoAddSeparatorIfNeeded(menu, index);
     public static Separator? AddSeparatorIfNeeded(this MenuItem menu, int index = -1) => DoAddSeparatorIfNeeded(menu, index);
+    public static Separator? AddMenuSeparatorIfNeeded(this ItemsControl menu, int index = -1) => DoAddSeparatorIfNeeded(menu, index);
+
     public static void RemoveUnnecessarySeparators(this ContextMenu menu) => DoRemoveUnnecessarySeparators(menu);
     public static void RemoveUnnecessarySeparators(this MenuItem menu) => DoRemoveUnnecessarySeparators(menu);
+    public static void RemoveUnnecessaryMenuSeparators(this ItemsControl menu) => DoRemoveUnnecessarySeparators(menu);
 
     public static MenuItem AddItem(this ContextMenu menu, string caption, Bitmap? image, Action? click, bool enabled = true, int index = -1)
         => DoAddMenuItem(menu, caption, image, click, enabled, index);
     public static MenuItem AddItem(this MenuItem menu, string caption, Bitmap? image, Action? click, bool enabled = true, int index = -1)
         => DoAddMenuItem(menu, caption, image, click, enabled, index);
+    public static MenuItem AddMenuItem(this ItemsControl menu, string caption, Bitmap? image, Action? click, bool enabled = true, int index = -1)
+        => DoAddMenuItem(menu, caption, image, click, enabled, index);
+
     public static MenuItem AddItem<T>(this ContextMenu menu, string caption, Bitmap? image, T tag, Action<T>? click, bool enabled = true, int index = -1)
         => DoAddMenuItem(menu, caption, image, tag, click, enabled, index);
     public static MenuItem AddItem<T>(this MenuItem menu, string caption, Bitmap? image, T tag, Action<T>? click, bool enabled = true, int index = -1)
         => DoAddMenuItem(menu, caption, image, tag, click, enabled, index);
+    public static MenuItem AddMenuItem<T>(this ItemsControl menu, string caption, Bitmap? image, T tag, Action<T>? click, bool enabled = true, int index = -1)
+        => DoAddMenuItem(menu, caption, image, tag, click, enabled, index);
+
     public static MenuItem AddCheckItem(this ContextMenu menu, string caption, CheckToggleAction click, bool isChecked = false, bool enabled = true, int index = -1)
         => DoAddCheckItem(menu, caption, click, isChecked, enabled, index);
+    public static MenuItem AddCheckMenuItem(this ItemsControl menu, string caption, CheckToggleAction click, bool isChecked = false, bool enabled = true, int index = -1)
+        => DoAddCheckItem(menu, caption, click, isChecked, enabled, index);
     public static MenuItem AddCheckItem<T>(this ContextMenu menu, string caption, T tag, CheckToggleAction<T> click, bool isChecked = false, bool enabled = true, int index = -1)
         => DoAddCheckItem(menu, caption, tag, click, isChecked, enabled, index);
+    public static MenuItem AddCheckMenuItem<T>(this ItemsControl menu, string caption, T tag, CheckToggleAction<T> click, bool isChecked = false, bool enabled = true, int index = -1)
+        => DoAddCheckItem(menu, caption, tag, click, isChecked, enabled, index);
 
     #endregion
 }