using System; using InABox.Core; using InABox.Mobile; using Xamarin.Forms; namespace PRS.Mobile { public class DigitalFormDoubleEntry : MobileCard, IDigitalFormField { private readonly MobileEntry _entry; private DFLayoutDoubleField? _definition; public DFLayoutDoubleField? Definition { get => _definition; set { _definition = value; Initialize(value ?? new DFLayoutDoubleField()); } } private double _value; public double Value { get => _value; set { _value = value; UpdateUI(); } } private void UpdateUI() { _entry.Text = Definition?.Properties.FormatValue(_value); } public bool IsEmpty => Math.Abs(Value).Equals(0F); public void Deserialize(DFLoadStorageEntry entry) => Value = Definition?.Properties.DeserializeValue(entry) ?? 0.0; public void Serialize(DFSaveStorageEntry entry) => entry.SetValue(Value); private bool _readOnly; public bool ReadOnly { get => _readOnly; set { _readOnly = value; UpdateStatus(); } } public event DigitalFormViewChangedHandler? ValueChanged; public DigitalFormDoubleEntry() { MinimumHeightRequest = 45; Padding = 5; _entry = new MobileEntry() { Placeholder = "Enter value", BackgroundColor = Color.Transparent, Keyboard = Keyboard.Numeric }; _entry.TextChanged += (o,e) => { if (double.TryParse(e.NewTextValue, out double d)) { _value = d; ValueChanged?.Invoke(this,new DigitalFormViewChangedArgs(Definition,Value)); } else _entry.Text = e.OldTextValue; }; Content = _entry; } private void Initialize(DFLayoutDoubleField definition) { UpdateStatus(); } private void UpdateStatus() { IsEnabled = !_readOnly && Definition?.Properties.Secure == false; var colors = DigitalFormUtils.GetColors(!IsEnabled, Definition?.Properties.Required ?? false, false); BackgroundColor = colors.Background; BorderColor = colors.Border; _entry.TextColor = colors.Foreground; } } }