1
0

ScrubberControl.xaml.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using Content.Shared.Atmos;
  2. using Content.Shared.Atmos.Monitor.Components;
  3. using Content.Shared.Atmos.Piping.Unary.Components;
  4. using Robust.Client.AutoGenerated;
  5. using Robust.Client.UserInterface.Controls;
  6. using Robust.Client.UserInterface.XAML;
  7. namespace Content.Client.Atmos.Monitor.UI.Widgets;
  8. [GenerateTypedNameReferences]
  9. public sealed partial class ScrubberControl : BoxContainer
  10. {
  11. private GasVentScrubberData _data;
  12. private string _address;
  13. public event Action<string, IAtmosDeviceData>? ScrubberDataChanged;
  14. public event Action<IAtmosDeviceData>? ScrubberDataCopied;
  15. private CheckBox _enabled => CEnableDevice;
  16. private CollapsibleHeading _addressLabel => CAddress;
  17. private OptionButton _pumpDirection => CPumpDirection;
  18. private FloatSpinBox _volumeRate => CVolumeRate;
  19. private CheckBox _wideNet => CWideNet;
  20. private Button _copySettings => CCopySettings;
  21. private GridContainer _gases => CGasContainer;
  22. private Dictionary<Gas, Button> _gasControls = new();
  23. public ScrubberControl(GasVentScrubberData data, string address)
  24. {
  25. RobustXamlLoader.Load(this);
  26. Name = address;
  27. _data = data;
  28. _address = address;
  29. _addressLabel.Title = Loc.GetString("air-alarm-ui-atmos-net-device-label", ("address", $"{address}"));
  30. _enabled.Pressed = data.Enabled;
  31. _enabled.OnToggled += _ =>
  32. {
  33. _data.Enabled = _enabled.Pressed;
  34. ScrubberDataChanged?.Invoke(_address, _data);
  35. };
  36. _wideNet.Pressed = data.WideNet;
  37. _wideNet.OnToggled += _ =>
  38. {
  39. _data.WideNet = _wideNet.Pressed;
  40. ScrubberDataChanged?.Invoke(_address, _data);
  41. };
  42. _volumeRate.Value = _data.VolumeRate;
  43. _volumeRate.OnValueChanged += _ =>
  44. {
  45. _data.VolumeRate = _volumeRate.Value;
  46. ScrubberDataChanged?.Invoke(_address, _data);
  47. };
  48. _volumeRate.IsValid += value => value >= 0;
  49. foreach (var value in Enum.GetValues<ScrubberPumpDirection>())
  50. {
  51. _pumpDirection.AddItem(Loc.GetString($"{value}"), (int) value);
  52. }
  53. _pumpDirection.SelectId((int) _data.PumpDirection);
  54. _pumpDirection.OnItemSelected += args =>
  55. {
  56. _pumpDirection.SelectId(args.Id);
  57. _data.PumpDirection = (ScrubberPumpDirection) args.Id;
  58. ScrubberDataChanged?.Invoke(_address, _data);
  59. };
  60. _copySettings.OnPressed += _ =>
  61. {
  62. ScrubberDataCopied?.Invoke(_data);
  63. };
  64. foreach (var value in Enum.GetValues<Gas>())
  65. {
  66. var gasButton = new Button
  67. {
  68. Name = value.ToString(),
  69. Text = Loc.GetString($"{value}"),
  70. ToggleMode = true,
  71. HorizontalExpand = true,
  72. Pressed = _data.FilterGases.Contains(value)
  73. };
  74. gasButton.OnToggled += args =>
  75. {
  76. if (args.Pressed)
  77. _data.FilterGases.Add(value);
  78. else
  79. _data.FilterGases.Remove(value);
  80. ScrubberDataChanged?.Invoke(_address, _data);
  81. };
  82. _gasControls.Add(value, gasButton);
  83. _gases.AddChild(gasButton);
  84. }
  85. }
  86. public void ChangeData(GasVentScrubberData data)
  87. {
  88. _data.Enabled = data.Enabled;
  89. _enabled.Pressed = _data.Enabled;
  90. _data.PumpDirection = data.PumpDirection;
  91. _pumpDirection.Select((int) _data.PumpDirection);
  92. _data.VolumeRate = data.VolumeRate;
  93. _volumeRate.Value = _data.VolumeRate;
  94. _data.WideNet = data.WideNet;
  95. _wideNet.Pressed = _data.WideNet;
  96. _data.FilterGases = data.FilterGases;
  97. foreach (var value in Enum.GetValues<Gas>())
  98. {
  99. _gasControls[value].Pressed = data.FilterGases.Contains(value);
  100. }
  101. }
  102. }