Jelajahi Sumber

avalonia: added double and integer textboxes as thin wrappers over NUmericUpDown

Kenric Nugteren 2 bulan lalu
induk
melakukan
b3951c4335

+ 32 - 0
InABox.Avalonia/Components/DoubleBox/DoubleBox.cs

@@ -0,0 +1,32 @@
+using Avalonia.Controls;
+using Avalonia.Input;
+using Avalonia.Interactivity;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InABox.Avalonia.Components;
+
+public class DoubleBox : NumericUpDown
+{
+    protected override Type StyleKeyOverride => typeof(NumericUpDown);
+
+    public DoubleBox()
+    {
+        ParsingNumberStyle = NumberStyles.Number;
+        ShowButtonSpinner = false;
+        AddHandler(TextInputEvent, TunnelTextEvent, RoutingStrategies.Direct | RoutingStrategies.Tunnel);
+    }
+
+    private void TunnelTextEvent(object? sender, TextInputEventArgs e)
+    {
+        e.Text = new string(e.Text?.Where(c => Char.IsDigit(c) || c == '.').ToArray());
+        if(e.Text == "")
+        {
+            e.Handled = true;
+        }
+    }
+}

+ 33 - 0
InABox.Avalonia/Components/IntegerBox/IntegerBox.cs

@@ -0,0 +1,33 @@
+using Avalonia.Controls;
+using Avalonia.Input;
+using Avalonia.Interactivity;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InABox.Avalonia.Components;
+
+public class IntegerBox : NumericUpDown
+{
+    protected override Type StyleKeyOverride => typeof(NumericUpDown);
+
+    public IntegerBox()
+    {
+        ParsingNumberStyle = NumberStyles.Integer;
+        FormatString = "N0";
+        ShowButtonSpinner = false;
+        AddHandler(TextInputEvent, TunnelTextEvent, RoutingStrategies.Direct | RoutingStrategies.Tunnel);
+    }
+
+    private void TunnelTextEvent(object? sender, TextInputEventArgs e)
+    {
+        e.Text = new string(e.Text?.Where(c => Char.IsDigit(c)).ToArray());
+        if(e.Text == "")
+        {
+            e.Handled = true;
+        }
+    }
+}

+ 31 - 32
inabox.wpf/DigitalForms/Designer/Controls/Fields/DFDoubleControl.cs

@@ -7,43 +7,42 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
 
-namespace InABox.DynamicGrid
+namespace InABox.DynamicGrid;
+
+public class DFDoubleControl : DynamicFormFieldControl<DFLayoutDoubleField, DFLayoutDoubleFieldProperties, double, double?>
 {
-    public class DFDoubleControl : DynamicFormFieldControl<DFLayoutDoubleField, DFLayoutDoubleFieldProperties, double, double?>
-    {
-        private DoubleTextBox Double = null!; // late-initialising
+    private DoubleTextBox Double = null!; // late-initialising
 
-        protected override FrameworkElement Create()
-        {
-            Double = new DoubleTextBox();
-            Double.Value = Field.Properties.Default;
-            Double.HorizontalContentAlignment = HorizontalAlignment.Center;
-            Double.VerticalContentAlignment = VerticalAlignment.Center;
-            Double.VerticalAlignment = VerticalAlignment.Stretch;
-            Double.ValueChanged += (sender, e) => ChangeField();
-            Double.IsScrollingOnCircle = false;
-            return Double;
-        }
+    protected override FrameworkElement Create()
+    {
+        Double = new DoubleTextBox();
+        Double.Value = Field.Properties.Default;
+        Double.HorizontalContentAlignment = HorizontalAlignment.Center;
+        Double.VerticalContentAlignment = VerticalAlignment.Center;
+        Double.VerticalAlignment = VerticalAlignment.Stretch;
+        Double.ValueChanged += (sender, e) => ChangeField();
+        Double.IsScrollingOnCircle = false;
+        return Double;
+    }
 
-        public override void SetSerializedValue(double? value)
-        {
-            Double.Value = value;
-        }
+    public override void SetSerializedValue(double? value)
+    {
+        Double.Value = value;
+    }
 
-        public override double? GetSerializedValue()
-        {
-            return Double.Value ?? 0.0;
-        }
+    public override double? GetSerializedValue()
+    {
+        return Double.Value ?? 0.0;
+    }
 
-        public override double GetValue()
-        {
-            return Double.Value ?? 0.0;
-        }
+    public override double GetValue()
+    {
+        return Double.Value ?? 0.0;
+    }
 
-        public override void SetValue(double value)
-        {
-            Double.Value = value;
-        }
-        protected override bool IsEmpty() => Double.Value == null;
+    public override void SetValue(double value)
+    {
+        Double.Value = value;
     }
+    protected override bool IsEmpty() => Double.Value == null;
 }

+ 42 - 43
inabox.wpf/DigitalForms/Designer/Controls/Fields/DFIntegerControl.cs

@@ -7,50 +7,49 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
 
-namespace InABox.DynamicGrid
+namespace InABox.DynamicGrid;
+
+public class DFIntegerControl : DynamicFormFieldControl<DFLayoutIntegerField, DFLayoutIntegerFieldProperties, int, int?>
 {
-    public class DFIntegerControl : DynamicFormFieldControl<DFLayoutIntegerField, DFLayoutIntegerFieldProperties, int, int?>
+    private IntegerTextBox Integer = null!; // late-initialising
+
+    protected override FrameworkElement Create()
+    {
+        Integer = new IntegerTextBox();
+        Integer.Value = Field.Properties.Default;
+        Integer.HorizontalContentAlignment = HorizontalAlignment.Center;
+        Integer.VerticalContentAlignment = VerticalAlignment.Center;
+        Integer.IsScrollingOnCircle = false;
+        Integer.VerticalAlignment = VerticalAlignment.Stretch;
+        Integer.ValueChanged += (sender, e) => ChangeField();
+
+        return Integer;
+    }
+
+    public override int? GetSerializedValue()
+    {
+        var value = Integer.Value;
+        if (value != null)
+            return Convert.ToInt32((long)value);
+        return null;
+    }
+
+    public override void SetSerializedValue(int? value)
+    {
+        Integer.Value = value;
+    }
+
+    public override int GetValue()
+    {
+        var value = Integer.Value;
+        if (value != null)
+            return Convert.ToInt32((long)value);
+        return 0;
+    }
+
+    public override void SetValue(int value)
     {
-        private IntegerTextBox Integer = null!; // late-initialising
-
-        protected override FrameworkElement Create()
-        {
-            Integer = new IntegerTextBox();
-            Integer.Value = Field.Properties.Default;
-            Integer.HorizontalContentAlignment = HorizontalAlignment.Center;
-            Integer.VerticalContentAlignment = VerticalAlignment.Center;
-            Integer.IsScrollingOnCircle = false;
-            Integer.VerticalAlignment = VerticalAlignment.Stretch;
-            Integer.ValueChanged += (sender, e) => ChangeField();
-
-            return Integer;
-        }
-
-        public override int? GetSerializedValue()
-        {
-            var value = Integer.Value;
-            if (value != null)
-                return Convert.ToInt32((long)value);
-            return null;
-        }
-
-        public override void SetSerializedValue(int? value)
-        {
-            Integer.Value = value;
-        }
-
-        public override int GetValue()
-        {
-            var value = Integer.Value;
-            if (value != null)
-                return Convert.ToInt32((long)value);
-            return 0;
-        }
-
-        public override void SetValue(int value)
-        {
-            Integer.Value = value;
-        }
-        protected override bool IsEmpty() => Integer.Value == null;
+        Integer.Value = value;
     }
+    protected override bool IsEmpty() => Integer.Value == null;
 }