using System; using System.Collections.Generic; using System.Linq; using Content.Shared.Administration; using Content.Shared.Administration.Events; using Robust.Client.AutoGenerated; using Robust.Client.Player; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Players; namespace Content.Client.Administration.UI.CustomControls { [GenerateTypedNameReferences] public partial class PlayerListControl : BoxContainer { private readonly AdminSystem _adminSystem; public event Action? OnSelectionChanged; public PlayerListControl() { _adminSystem = EntitySystem.Get(); IoCManager.InjectDependencies(this); RobustXamlLoader.Load(this); } protected override void EnteredTree() { // Fill the Option data PopulateList(); PlayerItemList.OnItemSelected += PlayerItemListOnOnItemSelected; PlayerItemList.OnItemDeselected += PlayerItemListOnOnItemDeselected; FilterLineEdit.OnTextChanged += FilterLineEditOnOnTextEntered; _adminSystem.PlayerListChanged += PopulateList; } private void FilterLineEditOnOnTextEntered(LineEdit.LineEditEventArgs obj) { PopulateList(); } private void PlayerItemListOnOnItemSelected(ItemList.ItemListSelectedEventArgs obj) { var selectedPlayer = (PlayerInfo) obj.ItemList[obj.ItemIndex].Metadata!; OnSelectionChanged?.Invoke(selectedPlayer); } private void PlayerItemListOnOnItemDeselected(ItemList.ItemListDeselectedEventArgs obj) { OnSelectionChanged?.Invoke(null); } private void PopulateList(IReadOnlyList _ = null!) { PlayerItemList.Clear(); foreach (var info in _adminSystem.PlayerList) { var displayName = $"{info.CharacterName} ({info.Username})"; if (!string.IsNullOrEmpty(FilterLineEdit.Text) && !displayName.ToLowerInvariant().Contains(FilterLineEdit.Text.Trim().ToLowerInvariant())) { continue; } PlayerItemList.Add(new ItemList.Item(PlayerItemList) { Metadata = info, Text = displayName }); } } } }