Browse Source

Added Automatic Numbering to DynamicTreeNodes
Fixed Styling of Date and Time Buttons
Tweaked MobileGrid options and various XAML Converters

Frank van den Bos 1 year ago
parent
commit
69f1d2682f

+ 8 - 0
InABox.Mobile/InABox.Mobile.Shared/Components/MobileDateSelector/MobileDateButton.xaml

@@ -18,6 +18,14 @@
                 BackgroundColor="{TemplateBinding ButtonColor}"
                 BorderColor="{TemplateBinding BorderColor}"
                 Clicked="_frame_OnClicked">
+                <local:MobileCard.Triggers>
+                    <DataTrigger TargetType="local:MobileCard" Binding="{TemplateBinding IsEnabled}" Value="False">
+                        <Setter Property="BackgroundColor" Value="Silver" />
+                    </DataTrigger>
+                    <DataTrigger TargetType="local:MobileCard" Binding="{TemplateBinding IsEnabled}" Value="False">
+                        <Setter Property="BorderColor" Value="Gray" />
+                    </DataTrigger>
+                </local:MobileCard.Triggers>
                 
                 <material:MaterialLabel 
                     x:Name="_label" 

+ 12 - 0
InABox.Mobile/InABox.Mobile.Shared/Components/MobileGrid/MobileGrid.xaml.cs

@@ -129,6 +129,18 @@ namespace InABox.Mobile
             }
             return false;
         }
+
+        public double RowHeight
+        {
+            get => Grid.RowHeight;
+            set => Grid.RowHeight = value;
+        }
+
+        public void ClearSelection()
+        {
+            Grid.SelectedItem = null;
+            Grid.SelectedItems.Clear();
+        }
         
         public MobileGrid()
         {

+ 9 - 1
InABox.Mobile/InABox.Mobile.Shared/Components/MobileTimeSelector/MobileTimeButton.xaml

@@ -21,8 +21,16 @@
                 BackgroundColor="{TemplateBinding ButtonColor}"
                 BorderColor="{TemplateBinding BorderColor}"
                 Clicked="_frame_OnClicked">
+                <local:MobileCard.Triggers>
+                    <DataTrigger TargetType="local:MobileCard" Binding="{TemplateBinding IsEnabled}" Value="False">
+                        <Setter Property="BackgroundColor" Value="Silver" />
+                    </DataTrigger>
+                    <DataTrigger TargetType="local:MobileCard" Binding="{TemplateBinding IsEnabled}" Value="False">
+                        <Setter Property="BorderColor" Value="Gray" />
+                    </DataTrigger>
+                </local:MobileCard.Triggers>
                 
-                    <material:MaterialLabel 
+                <material:MaterialLabel 
                         x:Name="_label" 
                         Text="{TemplateBinding Time, Converter={StaticResource TimeSpanFormatter}}" 
                         VerticalOptions="CenterAndExpand" 

+ 4 - 12
InABox.Mobile/InABox.Mobile.Shared/Converters/BooleanToColorConverter.cs

@@ -4,23 +4,15 @@ using Xamarin.Forms;
 
 namespace InABox.Mobile
 {
-    public class BooleanToColorConverter: BindableObject, IValueConverter
+    public class BooleanToColorConverter: UtilityConverter<bool,Color>
     {
         
         public Color TrueColor { get; set; }
         public Color FalseColor { get; set; }
-        
-        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+
+        protected override Color Convert(bool value)
         {
-            if (value is bool bValue)
-                return bValue ? TrueColor : FalseColor;
-            return FalseColor;
+            return value ? TrueColor : FalseColor;
         }
-    
-        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
-        {
-            throw new NotImplementedException();
-        } 
     }
-    
 }

+ 20 - 0
InABox.Mobile/InABox.Mobile.Shared/Converters/DateTimeToColorConverter.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Globalization;
+using InABox.Core;
+using Xamarin.Forms;
+
+namespace InABox.Mobile
+{
+    public class DateTimeToColorConverter: UtilityConverter<DateTime,Color>
+    {
+        
+        public Color EmptyColor { get; set; }
+        public Color FilledColor { get; set; }
+
+        protected override Color Convert(DateTime value)
+        {
+            return value.IsEmpty() ? EmptyColor : FilledColor;
+        }
+        
+    }
+}

+ 5 - 3
InABox.Mobile/InABox.Mobile.Shared/Converters/TimeSpanToStringConverter.cs → InABox.Mobile/InABox.Mobile.Shared/Converters/FormatConverter.cs

@@ -10,9 +10,11 @@ namespace InABox.Mobile
 
         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
         {
-            return String.IsNullOrWhiteSpace(Format)
-                ? value
-                : String.Format($"{{0:{Format}}}", value);
+            var fmt = String.IsNullOrWhiteSpace(Format)
+                ? "{0}"
+                : $"{{0:{Format}}}";
+            
+            return String.Format($"{fmt}", value);
         }
 
         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

+ 11 - 5
InABox.Mobile/InABox.Mobile.Shared/Converters/StringToBooleanConverter.cs

@@ -5,17 +5,23 @@ using Xamarin.Forms;
 
 namespace InABox.Mobile
 {
-    public class StringToBooleanConverter : IValueConverter
+    public class StringToBooleanConverter : UtilityConverter<String,bool>
     {
-        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        public bool HasValue { get; set; }
+
+        protected override bool Convert(string value)
         {
-            return !String.IsNullOrWhiteSpace(value as String);
+            var empty = String.IsNullOrWhiteSpace(value);
+            return HasValue 
+                ? !empty 
+                : empty;
         }
 
-        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        public StringToBooleanConverter()
         {
-            throw new NotImplementedException();
+            HasValue = true;
         }
+        
     }
     
     public class StringWithDefaultValueConverter : IValueConverter

+ 27 - 0
InABox.Mobile/InABox.Mobile.Shared/DynamicTreeNodes.cs

@@ -78,6 +78,33 @@ namespace InABox.Mobile
             _id = id;
             _parent = parent;
         }
+
+        public DynamicTreeNode GetParent() => _owner.Nodes.FirstOrDefault(x => x.ID == _parent);
+
+        public int Index()
+        {
+            var parent = GetParent();
+            return parent != null
+                ? parent.Children.IndexOf(this) + 1
+                : _owner.Nodes.IndexOf(this) + 1;
+        }
+
+        public String Number
+        {
+            get
+            {
+                String result = Index().ToString();
+                var parent = GetParent();
+                while (parent != null)
+                {
+                    int index = parent.Index();
+                    result = $"{index}.{result}";
+                    parent = parent.GetParent();
+                }
+                return result;
+            }
+        }
+        
     }
 
     public class DynamicTreeNodes