using System; using System.Collections.Generic; using System.Globalization; using Content.Shared.Atmos.Prototypes; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Localization; namespace Content.Client.Atmos.UI { /// /// Client-side UI used to control a gas filter. /// [GenerateTypedNameReferences] public sealed partial class GasFilterWindow : DefaultWindow { private readonly ButtonGroup _buttonGroup = new(); public bool FilterStatus = true; public string? SelectedGas; public string? CurrentGasId; public event Action? ToggleStatusButtonPressed; public event Action? FilterTransferRateChanged; public event Action? SelectGasPressed; public GasFilterWindow() { RobustXamlLoader.Load(this); ToggleStatusButton.OnPressed += _ => SetFilterStatus(!FilterStatus); ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke(); FilterTransferRateInput.OnTextChanged += _ => SetFilterRate.Disabled = false; SetFilterRate.OnPressed += _ => { FilterTransferRateChanged?.Invoke(FilterTransferRateInput.Text); SetFilterRate.Disabled = true; }; SelectGasButton.OnPressed += _ => SelectGasPressed?.Invoke(); GasList.OnItemSelected += GasListOnItemSelected; GasList.OnItemDeselected += GasListOnItemDeselected; } public void SetTransferRate(float rate) { FilterTransferRateInput.Text = rate.ToString(CultureInfo.CurrentCulture); } public void SetFilterStatus(bool enabled) { FilterStatus = enabled; if (enabled) { ToggleStatusButton.Text = Loc.GetString("comp-gas-filter-ui-status-enabled"); } else { ToggleStatusButton.Text = Loc.GetString("comp-gas-filter-ui-status-disabled"); } } public void SetGasFiltered(string? id, string name) { CurrentGasId = id; CurrentGasLabel.Text = Loc.GetString("comp-gas-filter-ui-filter-gas-current") + $" {name}"; GasList.ClearSelected(); SelectGasButton.Disabled = true; } public void PopulateGasList(IEnumerable gases) { GasList.Add(new ItemList.Item(GasList) { Metadata = null, Text = Loc.GetString("comp-gas-filter-ui-filter-gas-none") }); foreach (var gas in gases) { var gasName = Loc.GetString(gas.Name); GasList.Add(GetGasItem(gas.ID, gasName, GasList)); } } private static ItemList.Item GetGasItem(string id, string name, ItemList itemList) { return new(itemList) { Metadata = id, Text = name }; } private void GasListOnItemSelected(ItemList.ItemListSelectedEventArgs obj) { SelectedGas = (string) obj.ItemList[obj.ItemIndex].Metadata!; if(SelectedGas != CurrentGasId) SelectGasButton.Disabled = false; } private void GasListOnItemDeselected(ItemList.ItemListDeselectedEventArgs obj) { SelectedGas = CurrentGasId; SelectGasButton.Disabled = true; } } }