GasFilterWindow.xaml.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using Content.Shared.Atmos.Prototypes;
  5. using Robust.Client.AutoGenerated;
  6. using Robust.Client.UserInterface.Controls;
  7. using Robust.Client.UserInterface.CustomControls;
  8. using Robust.Client.UserInterface.XAML;
  9. using Robust.Shared.Localization;
  10. namespace Content.Client.Atmos.UI
  11. {
  12. /// <summary>
  13. /// Client-side UI used to control a gas filter.
  14. /// </summary>
  15. [GenerateTypedNameReferences]
  16. public sealed partial class GasFilterWindow : DefaultWindow
  17. {
  18. private readonly ButtonGroup _buttonGroup = new();
  19. public bool FilterStatus = true;
  20. public string? SelectedGas;
  21. public string? CurrentGasId;
  22. public event Action? ToggleStatusButtonPressed;
  23. public event Action<string>? FilterTransferRateChanged;
  24. public event Action? SelectGasPressed;
  25. public GasFilterWindow()
  26. {
  27. RobustXamlLoader.Load(this);
  28. ToggleStatusButton.OnPressed += _ => SetFilterStatus(!FilterStatus);
  29. ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke();
  30. FilterTransferRateInput.OnTextChanged += _ => SetFilterRate.Disabled = false;
  31. SetFilterRate.OnPressed += _ =>
  32. {
  33. FilterTransferRateChanged?.Invoke(FilterTransferRateInput.Text);
  34. SetFilterRate.Disabled = true;
  35. };
  36. SelectGasButton.OnPressed += _ => SelectGasPressed?.Invoke();
  37. GasList.OnItemSelected += GasListOnItemSelected;
  38. GasList.OnItemDeselected += GasListOnItemDeselected;
  39. }
  40. public void SetTransferRate(float rate)
  41. {
  42. FilterTransferRateInput.Text = rate.ToString(CultureInfo.CurrentCulture);
  43. }
  44. public void SetFilterStatus(bool enabled)
  45. {
  46. FilterStatus = enabled;
  47. if (enabled)
  48. {
  49. ToggleStatusButton.Text = Loc.GetString("comp-gas-filter-ui-status-enabled");
  50. }
  51. else
  52. {
  53. ToggleStatusButton.Text = Loc.GetString("comp-gas-filter-ui-status-disabled");
  54. }
  55. }
  56. public void SetGasFiltered(string? id, string name)
  57. {
  58. CurrentGasId = id;
  59. CurrentGasLabel.Text = Loc.GetString("comp-gas-filter-ui-filter-gas-current") + $" {name}";
  60. GasList.ClearSelected();
  61. SelectGasButton.Disabled = true;
  62. }
  63. public void PopulateGasList(IEnumerable<GasPrototype> gases)
  64. {
  65. GasList.Add(new ItemList.Item(GasList)
  66. {
  67. Metadata = null,
  68. Text = Loc.GetString("comp-gas-filter-ui-filter-gas-none")
  69. });
  70. foreach (var gas in gases)
  71. {
  72. var gasName = Loc.GetString(gas.Name);
  73. GasList.Add(GetGasItem(gas.ID, gasName, GasList));
  74. }
  75. }
  76. private static ItemList.Item GetGasItem(string id, string name, ItemList itemList)
  77. {
  78. return new(itemList)
  79. {
  80. Metadata = id,
  81. Text = name
  82. };
  83. }
  84. private void GasListOnItemSelected(ItemList.ItemListSelectedEventArgs obj)
  85. {
  86. SelectedGas = (string) obj.ItemList[obj.ItemIndex].Metadata!;
  87. if(SelectedGas != CurrentGasId) SelectGasButton.Disabled = false;
  88. }
  89. private void GasListOnItemDeselected(ItemList.ItemListDeselectedEventArgs obj)
  90. {
  91. SelectedGas = CurrentGasId;
  92. SelectGasButton.Disabled = true;
  93. }
  94. }
  95. }