瀏覽代碼

Improved Auto df-layout function

Kenric Nugteren 2 年之前
父節點
當前提交
84260f2160

+ 14 - 13
InABox.Core/DigitalForms/Layouts/DFLayout.cs

@@ -254,22 +254,21 @@ namespace InABox.Core
         }
 
         public static DFLayout GenerateAutoDesktopLayout(
-            IEnumerable<DigitalFormVariable> variables)
+            IList<DigitalFormVariable> variables)
         {
             var layout = new DFLayout();
 
-            layout.ColumnWidths.Add("*");
             layout.ColumnWidths.Add("Auto");
             layout.ColumnWidths.Add("Auto");
+            layout.ColumnWidths.Add("*");
 
-            for (var i = 0; i < variables.Count(); i++)
+            int row = 1;
+            foreach(var variable in variables)
             {
-                var variable = variables.ElementAt(i);
-
                 layout.RowHeights.Add("Auto");
 
-                var rowNum = new DFLayoutLabel { Caption = (i + 1).ToString(), Row = i + 1, Column = 1 };
-                var label = new DFLayoutLabel { Caption = variable.Code, Row = i + 1, Column = 2 };
+                var rowNum = new DFLayoutLabel { Caption = row.ToString(), Row = row, Column = 1 };
+                var label = new DFLayoutLabel { Caption = variable.Code, Row = row, Column = 2 };
 
                 layout.Elements.Add(rowNum);
                 layout.Elements.Add(label);
@@ -277,18 +276,20 @@ namespace InABox.Core
                 var field = GenerateLayoutFieldFromVariable(variable);
                 if(field != null)
                 {
-                    field.Row = i + 1;
+                    field.Row = row;
                     field.Column = 3;
 
                     layout.Elements.Add(field);
                 }
+
+                ++row;
             }
 
             return layout;
         }
 
         public static DFLayout GenerateAutoMobileLayout(
-            IEnumerable<DigitalFormVariable> variables)
+            IList<DigitalFormVariable> variables)
         {
             var layout = new DFLayout();
 
@@ -296,10 +297,9 @@ namespace InABox.Core
             layout.ColumnWidths.Add("*");
 
             var row = 1;
-            for (var i = 0; i < variables.Count(); i++)
+            var i = 0;
+            foreach(var variable in variables)
             {
-                var variable = variables.ElementAt(i);
-
                 layout.RowHeights.Add("Auto");
                 layout.RowHeights.Add("Auto");
 
@@ -320,12 +320,13 @@ namespace InABox.Core
                 }
 
                 row += 2;
+                ++i;
             }
 
             return layout;
         }
 
-        public static DFLayout GenerateAutoLayout(DFLayoutType type, IEnumerable<DigitalFormVariable> variables)
+        public static DFLayout GenerateAutoLayout(DFLayoutType type, IList<DigitalFormVariable> variables)
         {
             return type switch
             {

+ 4 - 4
InABox.DynamicGrid/FormDesigner/DynamicFormDesignGrid.cs

@@ -102,7 +102,7 @@ namespace InABox.DynamicGrid
         private IDigitalFormDataModel? _datamodel;
         private DFLayout form = new();
         private FormMode _mode;
-        private DigitalFormVariable[] _variables = Array.Empty<DigitalFormVariable>();
+        private IList<DigitalFormVariable> _variables = new List<DigitalFormVariable>();
         private bool _isChanged;
         private bool _changing = false;
 
@@ -178,7 +178,7 @@ namespace InABox.DynamicGrid
         public bool IsEditing { get => _mode == FormMode.Editing || _mode == FormMode.Filling; }
         public bool IsChanged => _isChanged;
 
-        public DigitalFormVariable[] Variables
+        public IList<DigitalFormVariable> Variables
         {
             get => _variables;
             set
@@ -443,7 +443,7 @@ namespace InABox.DynamicGrid
             foreach (var element in form.Elements)
                 if (element.Row > row)
                     element.Row--;
-                else if (element.Row == row)
+                else if (element.Row == row && element.RowSpan <= 1)
                     deletes.Add(element);
                 else if (element.Row + element.RowSpan - 1 >= row)
                     element.RowSpan--;
@@ -558,7 +558,7 @@ namespace InABox.DynamicGrid
             foreach (var element in form.Elements)
                 if (element.Column > column)
                     element.Column--;
-                else if (element.Column == column)
+                else if (element.Column == column && element.ColumnSpan <= 1)
                     deletes.Add(element);
                 else if (element.Column + element.ColumnSpan - 1 >= column)
                     element.ColumnSpan--;

+ 2 - 2
InABox.DynamicGrid/FormDesigner/DynamicFormWindow.cs

@@ -33,7 +33,7 @@ namespace InABox.DynamicGrid
             set => Grid.Form = value;
         }
 
-        public DigitalFormVariable[] Variables
+        public IList<DigitalFormVariable> Variables
         {
             get => Grid.Variables;
             set => Grid.Variables = value;
@@ -47,7 +47,7 @@ namespace InABox.DynamicGrid
             Grid.Initialize();
         }
 
-        public void LoadLayout(DigitalFormLayout layout, DigitalFormVariable[] variables)
+        public void LoadLayout(DigitalFormLayout layout, IList<DigitalFormVariable> variables)
         {
             Variables = variables;