DigitalFormBoolean.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using InABox.Core;
  3. using InABox.Mobile;
  4. namespace PRS.Mobile
  5. {
  6. class DigitalFormBoolean : MobileTabStrip, IDigitalFormField<DFLayoutBooleanField, DFLayoutBooleanFieldProperties, bool>
  7. {
  8. private DFLayoutBooleanField _definition;
  9. public DFLayoutBooleanField Definition
  10. {
  11. get => _definition;
  12. set
  13. {
  14. _definition = value;
  15. Initialize(value ?? new DFLayoutBooleanField());
  16. }
  17. }
  18. public bool Value
  19. {
  20. get => SelectedItem?.Index == 0;
  21. set => SelectedItem = (value ? Items[0] : Items[1]);
  22. }
  23. public bool IsEmpty => false;
  24. public void Deserialize(string serialized) => Value =
  25. String.Equals(serialized,Definition.Properties.TrueValue);
  26. public string Serialize() => Value
  27. ? Definition.Properties.TrueValue
  28. : Definition.Properties.FalseValue;
  29. private bool _readOnly;
  30. public bool ReadOnly
  31. {
  32. get => _readOnly;
  33. set
  34. {
  35. _readOnly = value;
  36. UpdateStatus();
  37. }
  38. }
  39. public event DigitalFormViewChangedHandler ValueChanged;
  40. public DigitalFormBoolean()
  41. {
  42. HeightRequest = 35;
  43. Items.Add(new MobileTabStripItem() { Text = "Yes"});
  44. Items.Add(new MobileTabStripItem() { Text = "No"});
  45. SelectionChanged += (sender, args) =>
  46. {
  47. Value = SelectedItem.Index == 0;
  48. ValueChanged?.Invoke(this,new DigitalFormViewChangedArgs(Definition,Value));
  49. };
  50. }
  51. private void Initialize(DFLayoutBooleanField value)
  52. {
  53. Items[0].Text = value.Properties.TrueValue;
  54. Items[1].Text = value.Properties.FalseValue;
  55. UpdateStatus();
  56. }
  57. private void UpdateStatus()
  58. {
  59. IsEnabled = !_readOnly || Definition.Properties.Secure;
  60. var unselected = DigitalFormUtils.GetColors(!IsEnabled, Definition.Properties.Required, true);
  61. BorderColor = unselected.Border;
  62. UnselectedBackground = unselected.Background;
  63. UnselectedForeground = unselected.Foreground;
  64. var selected = DigitalFormUtils.GetColors(!IsEnabled, Definition.Properties.Required, false);
  65. SelectedBackground = selected.Background;
  66. SelectedForeground = selected.Foreground;
  67. }
  68. }
  69. }