Browse Source

Fix to summary alignment on DynamicTextColumns

Kenric Nugteren 8 months ago
parent
commit
b240848ccd

+ 2 - 21
inabox.wpf/DynamicGrid/DynamicGridColumn.cs

@@ -45,28 +45,9 @@ namespace InABox.DynamicGrid
 
         public BaseEditor Editor { get; set; }
 
-        public VerticalAlignment VerticalAlignment()
-        {
-            if (Alignment.Equals(Alignment.NotSet))
-                return System.Windows.VerticalAlignment.Center;
-            if (Alignment.Equals(Alignment.TopLeft) || Alignment.Equals(Alignment.TopCenter) || Alignment.Equals(Alignment.TopRight))
-                return System.Windows.VerticalAlignment.Top;
-            if (Alignment.Equals(Alignment.MiddleLeft) || Alignment.Equals(Alignment.MiddleCenter) || Alignment.Equals(Alignment.MiddleRight))
-                return System.Windows.VerticalAlignment.Center;
-            return System.Windows.VerticalAlignment.Bottom;
-        }
+        public VerticalAlignment VerticalAlignment() => Alignment.VerticalAlignment();
 
-        public HorizontalAlignment HorizontalAlignment(Type datatype)
-        {
-            if (Alignment.Equals(Alignment.NotSet))
-                return datatype.IsNumeric() ? System.Windows.HorizontalAlignment.Right :
-                    datatype == typeof(bool) ? System.Windows.HorizontalAlignment.Center : System.Windows.HorizontalAlignment.Left;
-            if (Alignment.Equals(Alignment.TopLeft) || Alignment.Equals(Alignment.MiddleLeft) || Alignment.Equals(Alignment.BottomLeft))
-                return System.Windows.HorizontalAlignment.Left;
-            if (Alignment.Equals(Alignment.TopCenter) || Alignment.Equals(Alignment.MiddleCenter) || Alignment.Equals(Alignment.BottomCenter))
-                return System.Windows.HorizontalAlignment.Center;
-            return System.Windows.HorizontalAlignment.Right;
-        }
+        public HorizontalAlignment HorizontalAlignment(Type datatype) => Alignment.HorizontalAlignment(datatype);
 
         public override string ToString()
         {

+ 39 - 0
inabox.wpf/DynamicGrid/DynamicGridUtils.cs

@@ -798,4 +798,43 @@ public static class DynamicGridUtils
             menu.Items.Add(manageForms);
         }, TaskScheduler.FromCurrentSynchronizationContext());
     }
+
+    #region Alignment
+
+    public static VerticalAlignment VerticalAlignment(this Alignment alignment)
+    {
+        if (alignment.Equals(Alignment.NotSet))
+            return System.Windows.VerticalAlignment.Center;
+        if (alignment.Equals(Alignment.TopLeft) || alignment.Equals(Alignment.TopCenter) || alignment.Equals(Alignment.TopRight))
+            return System.Windows.VerticalAlignment.Top;
+        if (alignment.Equals(Alignment.MiddleLeft) || alignment.Equals(Alignment.MiddleCenter) || alignment.Equals(Alignment.MiddleRight))
+            return System.Windows.VerticalAlignment.Center;
+        return System.Windows.VerticalAlignment.Bottom;
+    }
+
+    public static HorizontalAlignment HorizontalAlignment(this Alignment alignment, Type datatype)
+    {
+        if (alignment.Equals(Alignment.NotSet))
+            return datatype.IsNumeric() ? System.Windows.HorizontalAlignment.Right :
+                datatype == typeof(bool) ? System.Windows.HorizontalAlignment.Center : System.Windows.HorizontalAlignment.Left;
+        if (alignment.Equals(Alignment.TopLeft) || alignment.Equals(Alignment.MiddleLeft) || alignment.Equals(Alignment.BottomLeft))
+            return System.Windows.HorizontalAlignment.Left;
+        if (alignment.Equals(Alignment.TopCenter) || alignment.Equals(Alignment.MiddleCenter) || alignment.Equals(Alignment.BottomCenter))
+            return System.Windows.HorizontalAlignment.Center;
+        return System.Windows.HorizontalAlignment.Right;
+    }
+
+    public static TextAlignment TextAlignment(this Alignment alignment, Type datatype)
+    {
+        if (alignment.Equals(Alignment.NotSet))
+            return datatype.IsNumeric() ? System.Windows.TextAlignment.Right :
+                datatype == typeof(bool) ? System.Windows.TextAlignment.Center : System.Windows.TextAlignment.Left;
+        if (alignment.Equals(Alignment.TopLeft) || alignment.Equals(Alignment.MiddleLeft) || alignment.Equals(Alignment.BottomLeft))
+            return System.Windows.TextAlignment.Left;
+        if (alignment.Equals(Alignment.TopCenter) || alignment.Equals(Alignment.MiddleCenter) || alignment.Equals(Alignment.BottomCenter))
+            return System.Windows.TextAlignment.Center;
+        return System.Windows.TextAlignment.Right;
+    }
+
+    #endregion
 }

+ 5 - 9
inabox.wpf/DynamicGrid/UIComponent/DynamicGridGridUIComponent.cs

@@ -800,6 +800,10 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
             style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty,
                 column != null ? gridColumn.HorizontalAlignment(typeof(double)) : HorizontalAlignment.Right));
         }
+        else if(column is DynamicTextColumn textColumn)
+        {
+            style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty, textColumn.Alignment.HorizontalAlignment(typeof(string))));
+        }
         else
         {
             style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty, HorizontalAlignment.Right));
@@ -993,15 +997,7 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
                     gridRowResizingOptions.ExcludeColumns.Add(sColName);
                     newcol.TextWrapping = TextWrapping.NoWrap;
 
-                    newcol.TextAlignment = txtCol.Alignment == Alignment.NotSet
-                        ? TextAlignment.Left
-                        : txtCol.Alignment == Alignment.BottomLeft || txtCol.Alignment == Alignment.MiddleLeft ||
-                          txtCol.Alignment == Alignment.TopLeft
-                            ? TextAlignment.Left
-                            : txtCol.Alignment == Alignment.BottomCenter || txtCol.Alignment == Alignment.MiddleCenter ||
-                              txtCol.Alignment == Alignment.TopCenter
-                                ? TextAlignment.Center
-                                : TextAlignment.Right;
+                    newcol.TextAlignment = txtCol.Alignment.TextAlignment(typeof(string));
 
                     newcol.AllowEditing = false;
                     newcol.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;

+ 16 - 12
inabox.wpf/DynamicGrid/UIComponent/DynamicGridTreeUIComponent.cs

@@ -23,6 +23,7 @@ using System.Windows.Media.Imaging;
 using Syncfusion.UI.Xaml.TreeGrid.Filtering;
 using Syncfusion.UI.Xaml.TreeGrid.Cells;
 using System.Windows.Controls.Primitives;
+using NPOI.OpenXmlFormats.Dml;
 
 namespace InABox.DynamicGrid;
 
@@ -354,6 +355,8 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
                     grid.AddChild(summaryScroll, 1, 0);
                 }
             }
+
+            RebuildSummaryRow();
         });
     }
 
@@ -754,6 +757,10 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
             style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty,
                 column != null ? gridColumn.HorizontalAlignment(typeof(double)) : HorizontalAlignment.Right));
         }
+        else if(column is DynamicTextColumn textColumn)
+        {
+            style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty, textColumn.Alignment.HorizontalAlignment(typeof(string))));
+        }
         else
         {
             style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty, HorizontalAlignment.Right));
@@ -1028,15 +1035,7 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
                     var newcol = new TreeGridTextColumn();
                     newcol.TextWrapping = TextWrapping.NoWrap;
 
-                    newcol.TextAlignment = txtCol.Alignment == Alignment.NotSet
-                        ? TextAlignment.Left
-                        : txtCol.Alignment == Alignment.BottomLeft || txtCol.Alignment == Alignment.MiddleLeft ||
-                          txtCol.Alignment == Alignment.TopLeft
-                            ? TextAlignment.Left
-                            : txtCol.Alignment == Alignment.BottomCenter || txtCol.Alignment == Alignment.MiddleCenter ||
-                              txtCol.Alignment == Alignment.TopCenter
-                                ? TextAlignment.Center
-                                : TextAlignment.Right;
+                    newcol.TextAlignment = txtCol.Alignment.TextAlignment(typeof(string));
 
                     newcol.AllowEditing = false;
                     newcol.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
@@ -1349,15 +1348,18 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
 
     private object? CalculateSummaryData(IDynamicGridSummary summary, DynamicColumnBase column)
     {
+        var nodes = _tree.View is not null
+            ? _tree.View.Nodes.Select(x => x.Item as CoreTreeNode).NotNull()
+            : Nodes.Nodes;
         if(summary is DynamicGridCountSummary count)
         {
-            return string.Format("{0:N0}", _tree.View.Nodes.Count);
+            return string.Format("{0:N0}", nodes.Count());
         }
         else if(summary is DynamicGridSumSummary sum)
         {
             if(column is DynamicGridColumn gridColumn)
             {
-                var data = _tree.View.Nodes.Select(x => MapRow((x.Item as CoreTreeNode)?.Row)).NotNull()
+                var data = nodes.Select(x => MapRow(x.Row)).NotNull()
                     .Select(x => x[gridColumn.ColumnName]);
 
                 object? result;
@@ -1385,7 +1387,7 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
         }
         else if(summary is DynamicGridCustomSummary custom)
         {
-            var data = _tree.View.Nodes.Select(x => MapRow((x.Item as CoreTreeNode)?.Row)).NotNull();
+            var data = nodes.Select(x => MapRow(x.Row)).NotNull();
             var result = custom.Aggregate(data);
             if(result is not null)
             {
@@ -1549,6 +1551,8 @@ public class DynamicGridTreeUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
         var coreTreeNode = Nodes.Find(_innerRow);
         coreTreeNode?.InvalidateData();
 
+        CalculateSummaries();
+
         _invalidating = false;
     }