using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; namespace Content.Client.Research.UI { [GenerateTypedNameReferences] public sealed partial class ResearchClientServerSelectionMenu : DefaultWindow { private List _serverIds = []; private int _selectedServerId = -1; private ResearchClientBoundUserInterface Owner { get; } public ResearchClientServerSelectionMenu(ResearchClientBoundUserInterface owner) { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); Owner = owner; Servers.OnItemSelected += OnItemSelected; Servers.OnItemDeselected += OnItemDeselected; } private void OnItemSelected(ItemList.ItemListSelectedEventArgs itemListSelectedEventArgs) { Owner.SelectServer(_serverIds[itemListSelectedEventArgs.ItemIndex]); } private void OnItemDeselected(ItemList.ItemListDeselectedEventArgs itemListDeselectedEventArgs) { Owner.DeselectServer(); } public void Populate(List serverNames, List serverIds, int selectedServerId) { _serverIds = serverIds; _selectedServerId = selectedServerId; // Disable so we can select the new selected server without triggering a new sync request. Servers.OnItemSelected -= OnItemSelected; Servers.OnItemDeselected -= OnItemDeselected; Servers.Clear(); for (var i = 0; i < serverIds.Count; i++) { var id = serverIds[i]; var name = serverNames[i]; Servers.AddItem(Loc.GetString("research-client-server-selection-menu-server-entry-text", ("id", id), ("serverName", name))); if (id == _selectedServerId) { Servers[i].Selected = true; } } Servers.OnItemSelected += OnItemSelected; Servers.OnItemDeselected += OnItemDeselected; } } }