Преглед на файлове

Fixed Filter editor for subqueries breaking on reflection for constructors.

Kenric Nugteren преди 1 година
родител
ревизия
3d0767ba83

+ 0 - 141
inabox.wpf/DynamicGrid/Editors/FilterEditor/FilterComponent.cs

@@ -1,141 +0,0 @@
-using System;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using InABox.Core;
-
-namespace InABox.DynamicGrid;
-
-public class FilterComponent : Grid
-{
-    private TextBox Display;
-    private Button Edit;
-    private BaseFilterNode? FilterNode;
-
-    private Type? _filterType;
-    public Type? FilterType
-    {
-        get => _filterType;
-        set
-        {
-            _filterType = value;
-            HideFilter(value == null);
-            Filter = null;
-        }
-    }
-
-    private IFilter? _filter;
-    private IFilter? Filter
-    {
-        get => _filter;
-        set
-        {
-            _filter = value;
-            Display.Text = _filter?.AsOData() ?? "";
-        }
-    }
-    private bool Hidden = true;
-
-    public FilterComponent(IFilter? filter)
-    {
-        ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
-        ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
-
-        RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
-        RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
-
-        Display = new TextBox
-        {
-            VerticalAlignment = System.Windows.VerticalAlignment.Stretch,
-            VerticalContentAlignment = System.Windows.VerticalAlignment.Center,
-            Background = new SolidColorBrush(Colors.LightYellow),
-            IsEnabled = false,
-            Margin = new Thickness(0, 0, 5, 5)
-        };
-        Display.SetValue(Grid.RowProperty, 0);
-        Display.SetValue(Grid.ColumnProperty, 0);
-
-        Edit = new Button
-        {
-            Content = "Edit",
-            IsEnabled = false,
-            Margin = new Thickness(0, 0, 0, 5),
-            Padding = new Thickness(5)
-        };
-        Edit.SetValue(Grid.RowProperty, 0);
-        Edit.SetValue(Grid.ColumnProperty, 1);
-        Edit.Click += Edit_Click;
-
-        Children.Add(Display);
-        Children.Add(Edit);
-
-        Filter = filter;
-
-        HideFilter();
-    }
-
-    private void Edit_Click(object sender, RoutedEventArgs e)
-    {
-        if (Hidden)
-        {
-            EditFilter();
-        }
-        else
-        {
-            HideFilter();
-        }
-    }
-
-    private void HideFilter(bool disable = false)
-    {
-        Hidden = true;
-        Edit.Content = "Edit";
-        Edit.IsEnabled = !disable;
-
-        if (FilterNode != null)
-        {
-            Filter = FilterNode.GetFilter();
-
-            Children.Remove(FilterNode);
-            FilterNode = null;
-        }
-    }
-
-    public void EditFilter()
-    {
-        if (FilterType == null)
-            return;
-
-        Hidden = false;
-        Edit.Content = "Hide";
-
-        var filter = Filter ?? Activator.CreateInstance(typeof(Filter<>).MakeGenericType(FilterType)) as IFilter;
-
-        Filter = filter;
-        if (FilterNode != null)
-            Children.Remove(FilterNode);
-
-        FilterNode = (Activator.CreateInstance(typeof(FilterNode<>).MakeGenericType(FilterType), filter, FilterNodeType.ROOT) as BaseFilterNode)!;
-        FilterNode.SetValue(Grid.RowProperty, 1);
-        FilterNode.SetValue(Grid.ColumnProperty, 0);
-        FilterNode.SetValue(Grid.ColumnSpanProperty, 2);
-
-        Children.Add(FilterNode);
-    }
-
-    public IFilter? GetFilter() => Hidden ? Filter : FilterNode?.GetFilter();
-
-    public void SetFilter(IFilter? filter)
-    {
-        Filter = filter;
-        if (filter == null)
-        {
-            HideFilter();
-        }
-        else
-        {
-            if (!Hidden)
-                EditFilter();
-        }
-    }
-}

+ 1 - 1
inabox.wpf/DynamicGrid/Editors/FilterEditor/FilterNode.cs

@@ -218,7 +218,7 @@ public class FilterNode<T> : BaseFilterNode
                 return new StringValueNode();
 
             case Core.Operator.InQuery:
-                return new SubQueryNode();
+                return new SubQueryNode(Configuration);
 
             case Core.Operator.All:
             case Core.Operator.None:

+ 7 - 2
inabox.wpf/DynamicGrid/Editors/FilterEditor/Nodes/ValueNodes/SubQueryNode.cs

@@ -3,6 +3,7 @@ using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Media;
 using InABox.Core;
+using InABox.Wpf;
 
 namespace InABox.DynamicGrid;
 
@@ -15,6 +16,8 @@ public class SubQueryNode : ValueNode
     private string? Column;
     private IFilter? Filter;
 
+    private FilterEditorConfiguration Configuration;
+
     public override object? Value
     {
         get => GetSubQuery();
@@ -51,8 +54,10 @@ public class SubQueryNode : ValueNode
         }
     }
 
-    public SubQueryNode()
+    public SubQueryNode(FilterEditorConfiguration configuration)
     {
+        Configuration = configuration;
+
         var panel = new DockPanel();
 
         Display = new TextBox {
@@ -79,7 +84,7 @@ public class SubQueryNode : ValueNode
 
     private void Edit_Click(object sender, RoutedEventArgs e)
     {
-        var window = new SubQueryNodePopup();
+        var window = new SubQueryNodePopup(Configuration);
         window.QueryType = QueryType;
         window.Column = Column;
         window.Filter = Filter ?? (QueryType != null ? (Activator.CreateInstance(typeof(Filter<>).MakeGenericType(QueryType)) as IFilter) : null);

+ 5 - 2
inabox.wpf/DynamicGrid/Editors/FilterEditor/Nodes/ValueNodes/SubQueryNodePopup.xaml.cs

@@ -61,7 +61,7 @@ namespace InABox.DynamicGrid
                 }
                 if (value != null && QueryType is not null)
                 {
-                    FilterNode = Activator.CreateInstance(typeof(FilterNode<>).MakeGenericType(QueryType), value, FilterNodeType.ROOT) as BaseFilterNode;
+                    FilterNode = Activator.CreateInstance(typeof(FilterNode<>).MakeGenericType(QueryType), value, FilterNodeType.ROOT, Configuration) as BaseFilterNode;
                     FilterNode.SetValue(Grid.RowProperty, 2);
                     FilterNode.SetValue(Grid.ColumnProperty, 0);
                     FilterNode.SetValue(Grid.ColumnSpanProperty, 2);
@@ -74,9 +74,11 @@ namespace InABox.DynamicGrid
             }
         }
 
+        private FilterEditorConfiguration Configuration;
+
         private BaseFilterNode? FilterNode;
 
-        public SubQueryNodePopup()
+        public SubQueryNodePopup(FilterEditorConfiguration configuration)
         {
             InitializeComponent();
 
@@ -93,6 +95,7 @@ namespace InABox.DynamicGrid
                 Type.Items.Add(new TypeEntry(type));
             }
             Type.SelectionChanged += Type_SelectionChanged;
+            Configuration = configuration;
         }
 
         private void Type_SelectionChanged(object sender, SelectionChangedEventArgs e)