DigitalFormBoolean.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using InABox.Core;
  2. using InABox.Mobile;
  3. namespace PRS.Mobile
  4. {
  5. class DigitalFormBoolean : MobileTabStrip, IDigitalFormField<DFLayoutBooleanField, DFLayoutBooleanFieldProperties, bool, bool?>
  6. {
  7. private bool _value;
  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 => _value;
  21. set
  22. {
  23. _value = value;
  24. UpdateUI();
  25. }
  26. }
  27. private void UpdateUI()
  28. {
  29. SelectedItem = (Value ? Items[0] : Items[1]);
  30. }
  31. public bool IsEmpty => false;
  32. public void Deserialize(DFLoadStorageEntry entry)
  33. {
  34. Value = Definition?.Properties.DeserializeValue(entry) == true;
  35. UpdateUI();
  36. }
  37. public void Serialize(DFSaveStorageEntry entry)
  38. => entry.SetValue(Value);
  39. private bool _readOnly;
  40. public bool ReadOnly
  41. {
  42. get => _readOnly;
  43. set
  44. {
  45. _readOnly = value;
  46. UpdateStatus();
  47. }
  48. }
  49. public event DigitalFormViewChangedHandler? ValueChanged;
  50. public DigitalFormBoolean()
  51. {
  52. HeightRequest = 35;
  53. Items.Add(new MobileTabStripItem() { Text = "Yes"});
  54. Items.Add(new MobileTabStripItem() { Text = "No"});
  55. SelectionChanged += (sender, args) =>
  56. {
  57. Value = SelectedItem.Index == 0;
  58. ValueChanged?.Invoke(this,new DigitalFormViewChangedArgs(Definition,Value));
  59. };
  60. }
  61. private void Initialize(DFLayoutBooleanField value)
  62. {
  63. Items[0].Text = value.Properties.TrueValue;
  64. Items[1].Text = value.Properties.FalseValue;
  65. UpdateStatus();
  66. }
  67. private void UpdateStatus()
  68. {
  69. IsEnabled = !_readOnly && Definition?.Properties.Secure == false;
  70. var unselected = DigitalFormUtils.GetColors(!IsEnabled, Definition?.Properties.Required ?? false, true);
  71. BorderColor = unselected.Border;
  72. UnselectedBackground = unselected.Background;
  73. UnselectedForeground = unselected.Foreground;
  74. var selected = DigitalFormUtils.GetColors(!IsEnabled, false, false);
  75. SelectedBackground = selected.Background;
  76. SelectedForeground = selected.Foreground;
  77. }
  78. }
  79. }