瀏覽代碼

Removed DefaultOptions field, because semantics were wrong and order of execution was unclear

Kenric Nugteren 1 年之前
父節點
當前提交
bbc5ccdd7f

+ 1 - 1
inabox.wpf/DigitalForms/Designer/DynamicFormControlGrid.cs

@@ -19,7 +19,7 @@ namespace InABox.DynamicGrid
 
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
-            options.AddRange(DynamicGridOption.RecordCount);
+            options.Add(DynamicGridOption.RecordCount);
         }
 
         public List<T> Items { get; set; }

+ 7 - 5
inabox.wpf/DynamicGrid/BaseDynamicGrid.cs

@@ -10,6 +10,7 @@ using System.Windows.Media.Imaging;
 using FastReport.Editor;
 using InABox.Core;
 using Syncfusion.Data;
+using static InABox.DynamicGrid.IDynamicGrid;
 using Selection = InABox.Core.Selection;
 
 namespace InABox.DynamicGrid
@@ -86,9 +87,6 @@ namespace InABox.DynamicGrid
         {
             Options = new FluentList<DynamicGridOption>();
             Options.OnChanged += OptionsChanged;
-
-            DefaultOptions = new FluentList<DynamicGridOption>();
-            DefaultOptions.OnChanged += DefaultOptions_OnChanged;
             
             RowStyleSelector = GetRowStyleSelector();
             RowStyleSelector.GetStyle += (row, style) => GetRowStyle(row, style);
@@ -112,7 +110,7 @@ namespace InABox.DynamicGrid
         /// </summary>
         protected void Reconfigure(FluentList<DynamicGridOption> options)
         {
-            options.BeginUpdate().Clear().AddRange(DefaultOptions);
+            options.BeginUpdate().Clear();
             DoReconfigure(options);
             OnReconfigure?.Invoke(options);
             options.EndUpdate();
@@ -121,6 +119,11 @@ namespace InABox.DynamicGrid
         {
             Reconfigure(Options);
         }
+        public void Reconfigure(ReconfigureEvent onReconfigure)
+        {
+            OnReconfigure += onReconfigure;
+            Reconfigure();
+        }
 
         public List<Expression<Func<T, object?>>> HiddenColumns { get; }
 
@@ -137,7 +140,6 @@ namespace InABox.DynamicGrid
         //public abstract bool DirectEdit(CoreTable data);
 
         protected FluentList<DynamicGridOption> Options { get; }
-        public FluentList<DynamicGridOption> DefaultOptions { get; }
 
         public DynamicGridColumns MasterColumns { get; protected set; }
         public DynamicGridColumns VisibleColumns { get; protected set; }

+ 11 - 9
inabox.wpf/DynamicGrid/Editors/EmbeddedListEditor/EmbeddedListEditorControl.cs

@@ -46,15 +46,17 @@ namespace InABox.DynamicGrid
             
             var grid = (Activator.CreateInstance(gridtype) as IDynamicItemsListGrid)!;
             grid.Items = list as IEnumerable<object>;
-            grid.DefaultOptions
-                .BeginUpdate()
-                .Add(DynamicGridOption.AddRows)
-                .Add(DynamicGridOption.EditRows)
-                .Add(DynamicGridOption.DeleteRows)
-                .Add(DynamicGridOption.RecordCount);
-            if (EditorDefinition.DirectEdit)
-                grid.DefaultOptions.Add(DynamicGridOption.DirectEdit);
-            grid.DefaultOptions.EndUpdate();
+            grid.Reconfigure(options =>
+            {
+                options.BeginUpdate()
+                    .Add(DynamicGridOption.AddRows)
+                    .Add(DynamicGridOption.EditRows)
+                    .Add(DynamicGridOption.DeleteRows)
+                    .Add(DynamicGridOption.RecordCount);
+                if (EditorDefinition.DirectEdit)
+                    options.Add(DynamicGridOption.DirectEdit);
+                options.EndUpdate();
+            });
             grid.Refresh(true, true);
 
             EditorDefinition.CreateButtons(grid);

+ 8 - 5
inabox.wpf/DynamicGrid/Editors/PopupEditor/PopupList.xaml.cs

@@ -69,11 +69,14 @@ namespace InABox.DynamicGrid
             }
 
             layoutGrid.Children.Add((UIElement)_grid);
-
-            _grid.DefaultOptions.BeginUpdate().Clear().AddRange(
-                DynamicGridOption.SelectColumns,
-                DynamicGridOption.FilterRows
-            ).EndUpdate();
+            
+            _grid.Reconfigure(options =>
+            {
+                options.BeginUpdate().Clear().AddRange(
+                    DynamicGridOption.SelectColumns,
+                    DynamicGridOption.FilterRows
+                ).EndUpdate();
+            });
 
             CoreUtils.SetPropertyValue(_grid, "ColumnsTag", "Popup");
 

+ 6 - 2
inabox.wpf/DynamicGrid/IDynamicGrid.cs

@@ -37,6 +37,12 @@ namespace InABox.DynamicGrid
 
         public abstract void Reconfigure();
 
+        /// <summary>
+        /// Add <paramref name="onReconfigure"/> to <see cref="OnReconfigure"/>, and then call <see cref="Reconfigure"/>
+        /// </summary>
+        /// <param name="onReconfigure"></param>
+        public void Reconfigure(ReconfigureEvent onReconfigure);
+
         void InitialiseEditorForm(IDynamicEditorForm editor, object[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false);
         bool EditItems(object[] items, Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false);
 
@@ -49,8 +55,6 @@ namespace InABox.DynamicGrid
 
         delegate void ReconfigureEvent(FluentList<DynamicGridOption> options);
         event ReconfigureEvent? OnReconfigure;
-        
-        FluentList<DynamicGridOption> DefaultOptions { get; }
 
         void AddVisualFilter(string column, string value, FilterType filtertype = FilterType.Contains);
 

+ 15 - 11
inabox.wpf/DynamicGrid/MasterList.xaml.cs

@@ -51,22 +51,26 @@ namespace InABox.DynamicGrid
 
             layoutGrid.Children.Add((UIElement)grid);
 
-            grid.DefaultOptions.BeginUpdate();
-            grid.DefaultOptions.AddRange(
-                DynamicGridOption.SelectColumns,
-                DynamicGridOption.FilterRows,
-                DynamicGridOption.ShowHelp
-            );
-
             DataModelType = typeof(AutoDataModel<>).MakeGenericType(type);
-            if (DataModelType != null)
-                grid.DefaultOptions.Add(DynamicGridOption.Print);
+
+            grid.Reconfigure(options =>
+            {
+                options.BeginUpdate();
+                options.AddRange(
+                    DynamicGridOption.SelectColumns,
+                    DynamicGridOption.FilterRows,
+                    DynamicGridOption.ShowHelp
+                );
+
+                if (DataModelType != null)
+                    options.Add(DynamicGridOption.Print);
+
+                options.EndUpdate();
+            });
 
             if (!string.IsNullOrWhiteSpace(GroupBy))
                 grid.AddHiddenColumn(GroupBy);
 
-            grid.DefaultOptions.EndUpdate();
-
             grid.OnPrintData += PrintData;
 
             grid.AfterRefresh += Grid_AfterReload;

+ 9 - 6
inabox.wpf/DynamicGrid/MultiSelectDialog.cs

@@ -49,12 +49,15 @@ namespace InABox.DynamicGrid
 
             datagrid = new DynamicDataGrid<T>();
 
-            datagrid.DefaultOptions.BeginUpdate();
-            datagrid.DefaultOptions.Clear();
-            datagrid.DefaultOptions.AddRange(DynamicGridOption.SelectColumns, DynamicGridOption.FilterRows);
-            if (multiselect)
-                datagrid.DefaultOptions.Add(DynamicGridOption.MultiSelect);
-            datagrid.DefaultOptions.EndUpdate();
+            datagrid.Reconfigure(options =>
+            {
+                options.BeginUpdate();
+                options.Clear();
+                options.AddRange(DynamicGridOption.SelectColumns, DynamicGridOption.FilterRows);
+                if (multiselect)
+                    options.Add(DynamicGridOption.MultiSelect);
+                options.EndUpdate();
+            });
 
             datagrid.OnReload += Grid_OnReload;
             datagrid.OnDoubleClick += Grid_DoubleClick;