PumpControl.xaml.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using Content.Shared.Atmos.Monitor.Components;
  2. using Content.Shared.Atmos.Piping.Unary.Components;
  3. using Robust.Client.AutoGenerated;
  4. using Robust.Client.UserInterface.Controls;
  5. using Robust.Client.UserInterface.XAML;
  6. namespace Content.Client.Atmos.Monitor.UI.Widgets;
  7. [GenerateTypedNameReferences]
  8. public sealed partial class PumpControl : BoxContainer
  9. {
  10. private GasVentPumpData _data;
  11. private string _address;
  12. public event Action<string, IAtmosDeviceData>? PumpDataChanged;
  13. public event Action<IAtmosDeviceData>? PumpDataCopied;
  14. private CheckBox _enabled => CEnableDevice;
  15. private CollapsibleHeading _addressLabel => CAddress;
  16. private OptionButton _pumpDirection => CPumpDirection;
  17. private OptionButton _pressureCheck => CPressureCheck;
  18. private FloatSpinBox _externalBound => CExternalBound;
  19. private FloatSpinBox _internalBound => CInternalBound;
  20. private Button _copySettings => CCopySettings;
  21. public PumpControl(GasVentPumpData data, string address)
  22. {
  23. RobustXamlLoader.Load(this);
  24. Name = address;
  25. _data = data;
  26. _address = address;
  27. _addressLabel.Title = Loc.GetString("air-alarm-ui-atmos-net-device-label", ("address", $"{address}"));
  28. _enabled.Pressed = data.Enabled;
  29. _enabled.OnToggled += _ =>
  30. {
  31. _data.Enabled = _enabled.Pressed;
  32. PumpDataChanged?.Invoke(_address, _data);
  33. };
  34. _internalBound.Value = _data.InternalPressureBound;
  35. _internalBound.OnValueChanged += _ =>
  36. {
  37. _data.InternalPressureBound = _internalBound.Value;
  38. PumpDataChanged?.Invoke(_address, _data);
  39. };
  40. _internalBound.IsValid += value => value >= 0;
  41. _externalBound.Value = _data.ExternalPressureBound;
  42. _externalBound.OnValueChanged += _ =>
  43. {
  44. _data.ExternalPressureBound = _externalBound.Value;
  45. PumpDataChanged?.Invoke(_address, _data);
  46. };
  47. _externalBound.IsValid += value => value >= 0;
  48. foreach (var value in Enum.GetValues<VentPumpDirection>())
  49. {
  50. _pumpDirection.AddItem(Loc.GetString($"{value}"), (int) value);
  51. }
  52. _pumpDirection.SelectId((int) _data.PumpDirection);
  53. _pumpDirection.OnItemSelected += args =>
  54. {
  55. _pumpDirection.SelectId(args.Id);
  56. _data.PumpDirection = (VentPumpDirection) args.Id;
  57. PumpDataChanged?.Invoke(_address, _data);
  58. };
  59. foreach (var value in Enum.GetValues<VentPressureBound>())
  60. {
  61. _pressureCheck.AddItem(Loc.GetString($"{value}"), (int) value);
  62. }
  63. _pressureCheck.SelectId((int) _data.PressureChecks);
  64. _pressureCheck.OnItemSelected += args =>
  65. {
  66. _pressureCheck.SelectId(args.Id);
  67. _data.PressureChecks = (VentPressureBound) args.Id;
  68. PumpDataChanged?.Invoke(_address, _data);
  69. };
  70. _copySettings.OnPressed += _ =>
  71. {
  72. PumpDataCopied?.Invoke(_data);
  73. };
  74. }
  75. public void ChangeData(GasVentPumpData data)
  76. {
  77. _data.Enabled = data.Enabled;
  78. _enabled.Pressed = _data.Enabled;
  79. _data.PumpDirection = data.PumpDirection;
  80. _pumpDirection.SelectId((int) _data.PumpDirection);
  81. _data.PressureChecks = data.PressureChecks;
  82. _pressureCheck.SelectId((int) _data.PressureChecks);
  83. _data.ExternalPressureBound = data.ExternalPressureBound;
  84. _externalBound.Value = _data.ExternalPressureBound;
  85. _data.InternalPressureBound = data.InternalPressureBound;
  86. _internalBound.Value = _data.InternalPressureBound;
  87. }
  88. }