diff --git a/Content.Client/UserInterface/AdminMenu/CustomControls/PlayerListControl.xaml b/Content.Client/UserInterface/AdminMenu/CustomControls/PlayerListControl.xaml
new file mode 100644
index 0000000000..33d5d6d535
--- /dev/null
+++ b/Content.Client/UserInterface/AdminMenu/CustomControls/PlayerListControl.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/UserInterface/AdminMenu/CustomControls/PlayerListControl.xaml.cs b/Content.Client/UserInterface/AdminMenu/CustomControls/PlayerListControl.xaml.cs
new file mode 100644
index 0000000000..063a380a89
--- /dev/null
+++ b/Content.Client/UserInterface/AdminMenu/CustomControls/PlayerListControl.xaml.cs
@@ -0,0 +1,78 @@
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Robust.Client.AutoGenerated;
+using Robust.Client.Player;
+using Robust.Client.UserInterface.Controls;
+using Robust.Shared.IoC;
+
+namespace Content.Client.UserInterface.AdminMenu.CustomControls
+{
+ [GenerateTypedNameReferences]
+ public partial class PlayerListControl : VBoxContainer
+ {
+ private List? _data;
+
+ public event Action? OnSelectionChanged;
+
+ protected override void EnteredTree()
+ {
+ // Fill the Option data
+ _data = IoCManager.Resolve().Sessions.ToList();
+ PopulateList();
+ PlayerItemList.OnItemSelected += PlayerItemListOnOnItemSelected;
+ PlayerItemList.OnItemDeselected += PlayerItemListOnOnItemDeselected;
+ FilterLineEdit.OnTextChanged += FilterLineEditOnOnTextEntered;
+ }
+
+ private void FilterLineEditOnOnTextEntered(LineEdit.LineEditEventArgs obj)
+ {
+ PopulateList(FilterLineEdit.Text);
+ }
+
+ private static string GetDisplayName(IPlayerSession session)
+ {
+ return $"{session.Name} ({session.AttachedEntity?.Name})";
+ }
+
+ private void PlayerItemListOnOnItemSelected(ItemList.ItemListSelectedEventArgs obj)
+ {
+ var selectedPlayer = (IPlayerSession) obj.ItemList[obj.ItemIndex].Metadata!;
+ OnSelectionChanged?.Invoke(selectedPlayer);
+ }
+
+ private void PlayerItemListOnOnItemDeselected(ItemList.ItemListDeselectedEventArgs obj)
+ {
+ OnSelectionChanged?.Invoke(null);
+ }
+
+ private void PopulateList(string? filter = null)
+ {
+ // _data should never be null here
+ if (_data == null)
+ return;
+ PlayerItemList.Clear();
+ foreach (var session in _data)
+ {
+ var displayName = GetDisplayName(session);
+ if (!string.IsNullOrEmpty(filter) &&
+ !displayName.ToLowerInvariant().Contains(filter.Trim().ToLowerInvariant()))
+ {
+ continue;
+ }
+
+ PlayerItemList.Add(new ItemList.Item(PlayerItemList)
+ {
+ Metadata = session,
+ Text = displayName
+ });
+ }
+ }
+
+ public void ClearSelection()
+ {
+ PlayerItemList.ClearSelected();
+ }
+ }
+}
diff --git a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml
index 913fca61fc..4d2d583b79 100644
--- a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml
+++ b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml
@@ -1,10 +1,12 @@
+ xmlns="https://spacestation14.io"
+ xmlns:cc="clr-namespace:Content.Client.UserInterface.AdminMenu.CustomControls"
+ Title="{Loc Ban}" CustomMinimumSize="425 162">
-
+
@@ -14,8 +16,9 @@
-
+
+
diff --git a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml.cs b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml.cs
index 7c98f14766..f7d3321de1 100644
--- a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml.cs
+++ b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/BanWindow.xaml.cs
@@ -1,10 +1,7 @@
#nullable enable
-using System.Collections.Generic;
-using System.Linq;
using JetBrains.Annotations;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
-using Robust.Client.Player;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Shared.IoC;
@@ -16,33 +13,23 @@ namespace Content.Client.UserInterface.AdminMenu.Tabs.AdminTab
[UsedImplicitly]
public partial class BanWindow : SS14Window
{
- private IEnumerable? _data;
protected override void EnteredTree()
{
- // Fill the Option data
- _data = IoCManager.Resolve().Sessions;
- foreach (var session in _data)
- {
- PlayerOptions.AddItem(GetDisplayName(session));
- }
- PlayerOptions.OnItemSelected += eventArgs => PlayerOptions.SelectId(eventArgs.Id);
+ PlayerNameLine.OnTextChanged += PlayerNameLineOnOnTextChanged;
SubmitButton.OnPressed += SubmitButtonOnOnPressed;
}
- private static string GetDisplayName(IPlayerSession session)
+ private void PlayerNameLineOnOnTextChanged(LineEdit.LineEditEventArgs obj)
{
- return $"{session.Name} ({session.AttachedEntity?.Name})";
+ SubmitButton.Disabled = string.IsNullOrEmpty(PlayerNameLine.Text);
}
private void SubmitButtonOnOnPressed(BaseButton.ButtonEventArgs obj)
{
- if (_data == null)
- return;
- var dataList = _data.ToList();
- var session = dataList[PlayerOptions.SelectedId];
+ // Small verification if Player Name exists
IoCManager.Resolve().ExecuteCommand(
- $"ban \"{session.Name}\" \"{CommandParsing.Escape(ReasonLine.Text)}\" {MinutesLine.Text}");
+ $"ban \"{PlayerNameLine.Text}\" \"{CommandParsing.Escape(ReasonLine.Text)}\" {MinutesLine.Text}");
}
}
}
diff --git a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml
index f41cff6e44..be57f409b8 100644
--- a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml
+++ b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml
@@ -1,16 +1,14 @@
+ xmlns="https://spacestation14.io"
+ xmlns:cc="clr-namespace:Content.Client.UserInterface.AdminMenu.CustomControls"
+ Title="{Loc Kick}" CustomMinimumSize="425 272">
-
-
-
-
-
+
diff --git a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml.cs b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml.cs
index 7ae84f9655..1f4bfa0625 100644
--- a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml.cs
+++ b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/KickWindow.xaml.cs
@@ -1,6 +1,4 @@
#nullable enable
-using System.Collections.Generic;
-using System.Linq;
using JetBrains.Annotations;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
@@ -16,33 +14,26 @@ namespace Content.Client.UserInterface.AdminMenu.Tabs.AdminTab
[UsedImplicitly]
public partial class KickWindow : SS14Window
{
- private IEnumerable? _data;
+ private IPlayerSession? _selectedSession;
protected override void EnteredTree()
{
- // Fill the Option data
- _data = IoCManager.Resolve().Sessions;
- foreach (var session in _data)
- {
- PlayerOptions.AddItem(GetDisplayName(session));
- }
- PlayerOptions.OnItemSelected += eventArgs => PlayerOptions.SelectId(eventArgs.Id);
SubmitButton.OnPressed += SubmitButtonOnOnPressed;
+ PlayerList.OnSelectionChanged += OnListOnOnSelectionChanged;
}
- private static string GetDisplayName(IPlayerSession session)
+ private void OnListOnOnSelectionChanged(IPlayerSession? obj)
{
- return $"{session.Name} ({session.AttachedEntity?.Name})";
+ _selectedSession = obj;
+ SubmitButton.Disabled = _selectedSession == null;
}
private void SubmitButtonOnOnPressed(BaseButton.ButtonEventArgs obj)
{
- if (_data == null)
+ if (_selectedSession == null)
return;
- var dataList = _data.ToList();
- var session = dataList[PlayerOptions.SelectedId];
IoCManager.Resolve().ExecuteCommand(
- $"kick \"{session.Name}\" \"{CommandParsing.Escape(ReasonLine.Text)}\"");
+ $"kick \"{_selectedSession.Name}\" \"{CommandParsing.Escape(ReasonLine.Text)}\"");
}
}
}
diff --git a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml
index 4ffde6c3c4..9fa6ac12d5 100644
--- a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml
+++ b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml
@@ -1,11 +1,9 @@
-
-
-
-
-
-
+ xmlns="https://spacestation14.io"
+ xmlns:cc="clr-namespace:Content.Client.UserInterface.AdminMenu.CustomControls"
+ Title="{Loc Teleport}" CustomMinimumSize="425 230">
+
+
diff --git a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml.cs b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml.cs
index 51d969c761..7d8e243553 100644
--- a/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml.cs
+++ b/Content.Client/UserInterface/AdminMenu/Tabs/AdminTab/TeleportWindow.xaml.cs
@@ -1,7 +1,6 @@
#nullable enable
-using System.Collections.Generic;
-using System.Linq;
using JetBrains.Annotations;
+using NFluidsynth;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.Player;
@@ -15,35 +14,27 @@ namespace Content.Client.UserInterface.AdminMenu.Tabs.AdminTab
[UsedImplicitly]
public partial class TeleportWindow : SS14Window
{
- private IEnumerable? _data;
+ private IPlayerSession? _selectedSession;
protected override void EnteredTree()
{
- // Fill the Option data
- _data = IoCManager.Resolve().Sessions;
- foreach (var session in _data)
- {
- PlayerOptions.AddItem(GetDisplayName(session));
- }
- PlayerOptions.OnItemSelected += eventArgs => PlayerOptions.SelectId(eventArgs.Id);
SubmitButton.OnPressed += SubmitButtonOnOnPressed;
+ PlayerList.OnSelectionChanged += OnListOnOnSelectionChanged;
}
- private static string GetDisplayName(IPlayerSession session)
+ private void OnListOnOnSelectionChanged(IPlayerSession? obj)
{
- return $"{session.Name} ({session.AttachedEntity?.Name})";
+ _selectedSession = obj;
+ SubmitButton.Disabled = _selectedSession == null;
}
private void SubmitButtonOnOnPressed(BaseButton.ButtonEventArgs obj)
{
- // Find the value
- if (_data == null)
+ if (_selectedSession == null)
return;
- var dataList = _data.ToList();
- var session = dataList[PlayerOptions.SelectedId];
// Execute command
IoCManager.Resolve().ExecuteCommand(
- $"tpto \"{session.Name}\"");
+ $"tpto \"{_selectedSession.Name}\"");
}
}
}