using System; using InABox.Core; using InABox.Mobile; namespace PRS.Mobile { class DigitalFormBoolean : MobileTabStrip, IDigitalFormField { private DFLayoutBooleanField _definition; public DFLayoutBooleanField Definition { get => _definition; set { _definition = value; Initialize(value ?? new DFLayoutBooleanField()); } } public bool Value { get => SelectedItem?.Index == 0; set => SelectedItem = (value ? Items[0] : Items[1]); } public bool IsEmpty => false; public void Deserialize(string serialized) => Value = String.Equals(serialized,Definition.Properties.TrueValue); public string Serialize() => Value ? Definition.Properties.TrueValue : Definition.Properties.FalseValue; private bool _readOnly; public bool ReadOnly { get => _readOnly; set { _readOnly = value; UpdateStatus(); } } public event DigitalFormViewChangedHandler ValueChanged; public DigitalFormBoolean() { HeightRequest = 35; Items.Add(new MobileTabStripItem() { Text = "Yes"}); Items.Add(new MobileTabStripItem() { Text = "No"}); SelectionChanged += (sender, args) => { Value = SelectedItem.Index == 0; ValueChanged?.Invoke(this,new DigitalFormViewChangedArgs(Definition,Value)); }; } private void Initialize(DFLayoutBooleanField value) { Items[0].Text = value.Properties.TrueValue; Items[1].Text = value.Properties.FalseValue; UpdateStatus(); } private void UpdateStatus() { IsEnabled = !_readOnly || Definition.Properties.Secure; var unselected = DigitalFormUtils.GetColors(!IsEnabled, Definition.Properties.Required, true); BorderColor = unselected.Border; UnselectedBackground = unselected.Background; UnselectedForeground = unselected.Foreground; var selected = DigitalFormUtils.GetColors(!IsEnabled, Definition.Properties.Required, false); SelectedBackground = selected.Background; SelectedForeground = selected.Foreground; } } }