using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
-namespace Content.Client.Administration.UI
+namespace Content.Client.Administration.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class AdminMenuWindow : DefaultWindow
{
- [GenerateTypedNameReferences]
- public sealed partial class AdminMenuWindow : DefaultWindow
+ public event Action? OnDisposed;
+
+ public AdminMenuWindow()
+ {
+ MinSize = new Vector2(650, 250);
+ Title = Loc.GetString("admin-menu-title");
+ RobustXamlLoader.Load(this);
+ MasterTabContainer.SetTabTitle((int) TabIndex.Admin, Loc.GetString("admin-menu-admin-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.Adminbus, Loc.GetString("admin-menu-adminbus-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.Atmos, Loc.GetString("admin-menu-atmos-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.Round, Loc.GetString("admin-menu-round-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.Server, Loc.GetString("admin-menu-server-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.PanicBunker, Loc.GetString("admin-menu-panic-bunker-tab"));
+ /*
+ * TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
+ */
+ MasterTabContainer.SetTabTitle((int) TabIndex.BabyJail, Loc.GetString("admin-menu-baby-jail-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.Players, Loc.GetString("admin-menu-players-tab"));
+ MasterTabContainer.SetTabTitle((int) TabIndex.Objects, Loc.GetString("admin-menu-objects-tab"));
+ MasterTabContainer.OnTabChanged += OnTabChanged;
+ }
+
+ private void OnTabChanged(int tabIndex)
{
- public event Action? OnDisposed;
+ var tabEnum = (TabIndex)tabIndex;
+ if (tabEnum == TabIndex.Objects)
+ ObjectsTabControl.RefreshObjectList();
+ }
- public AdminMenuWindow()
- {
- MinSize = new Vector2(650, 250);
- Title = Loc.GetString("admin-menu-title");
- RobustXamlLoader.Load(this);
- MasterTabContainer.SetTabTitle(0, Loc.GetString("admin-menu-admin-tab"));
- MasterTabContainer.SetTabTitle(1, Loc.GetString("admin-menu-adminbus-tab"));
- MasterTabContainer.SetTabTitle(2, Loc.GetString("admin-menu-atmos-tab"));
- MasterTabContainer.SetTabTitle(3, Loc.GetString("admin-menu-round-tab"));
- MasterTabContainer.SetTabTitle(4, Loc.GetString("admin-menu-server-tab"));
- MasterTabContainer.SetTabTitle(5, Loc.GetString("admin-menu-panic-bunker-tab"));
- /*
- * TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
- */
- MasterTabContainer.SetTabTitle(6, Loc.GetString("admin-menu-baby-jail-tab"));
- MasterTabContainer.SetTabTitle(7, Loc.GetString("admin-menu-players-tab"));
- MasterTabContainer.SetTabTitle(8, Loc.GetString("admin-menu-objects-tab"));
- }
+ protected override void Dispose(bool disposing)
+ {
+ OnDisposed?.Invoke();
+ base.Dispose(disposing);
+ OnDisposed = null;
+ }
- protected override void Dispose(bool disposing)
- {
- OnDisposed?.Invoke();
- base.Dispose(disposing);
- OnDisposed = null;
- }
+ private enum TabIndex
+ {
+ Admin = 0,
+ Adminbus,
+ Atmos,
+ Round,
+ Server,
+ PanicBunker,
+ BabyJail,
+ Players,
+ Objects,
}
}
-
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Map.Components;
using Robust.Shared.Timing;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IGameTiming _timing = default!;
- private readonly List<ObjectsTabEntry> _objects = new();
- private readonly List<ObjectsTabSelection> _selections = new();
- private bool _ascending = false; // Set to false for descending order by default
- private ObjectsTabHeader.Header _headerClicked = ObjectsTabHeader.Header.ObjectName;
private readonly Color _altColor = Color.FromHex("#292B38");
private readonly Color _defaultColor = Color.FromHex("#2F2F3B");
- public event Action<GUIBoundKeyEventArgs, ListData>? OnEntryKeyBindDown;
+ private bool _ascending;
+ private ObjectsTabHeader.Header _headerClicked = ObjectsTabHeader.Header.ObjectName;
- private readonly TimeSpan _updateFrequency = TimeSpan.FromSeconds(2);
- private TimeSpan _nextUpdate;
+ private readonly List<ObjectsTabSelection> _selections = [];
+ public event Action<GUIBoundKeyEventArgs, ListData>? OnEntryKeyBindDown;
public ObjectsTab()
{
RefreshObjectList(_selections[ev.Id]);
};
- foreach (var type in Enum.GetValues(typeof(ObjectsTabSelection)))
+ foreach (var type in Enum.GetValues<ObjectsTabSelection>())
{
- _selections.Add((ObjectsTabSelection)type!);
- ObjectTypeOptions.AddItem(Loc.GetString($"object-tab-object-type-{((Enum.GetName((ObjectsTabSelection)type))!.ToString().ToLower())}"));
+ _selections.Add(type);
+ ObjectTypeOptions.AddItem(GetLocalizedEnumValue(type));
}
ListHeader.OnHeaderClicked += HeaderClicked;
SearchList.SearchBar = SearchLineEdit;
SearchList.GenerateItem += GenerateButton;
SearchList.DataFilterCondition += DataFilterCondition;
+ SearchList.ItemKeyBindDown += (args, data) => OnEntryKeyBindDown?.Invoke(args, data);
+ RefreshListButton.OnPressed += _ => RefreshObjectList();
- RefreshObjectList();
- // Set initial selection and refresh the list to apply the initial sort order
var defaultSelection = ObjectsTabSelection.Grids;
- ObjectTypeOptions.SelectId((int)defaultSelection); // Set the default selection
- RefreshObjectList(defaultSelection); // Refresh the list with the default selection
-
- // Initialize the next update time
- _nextUpdate = TimeSpan.Zero;
- }
-
- protected override void FrameUpdate(FrameEventArgs args)
- {
- base.FrameUpdate(args);
-
- if (_timing.CurTime < _nextUpdate)
- return;
-
- _nextUpdate = _timing.CurTime + _updateFrequency;
-
- RefreshObjectList();
+ ObjectTypeOptions.SelectId((int) defaultSelection);
+ RefreshObjectList(defaultSelection);
}
- private void RefreshObjectList()
+ public void RefreshObjectList()
{
RefreshObjectList(_selections[ObjectTypeOptions.SelectedId]);
}
{
entities.Add((metadata.EntityName, _entityManager.GetNetEntity(uid)));
}
+
break;
}
default:
{
var valueA = GetComparableValue(a, _headerClicked);
var valueB = GetComparableValue(b, _headerClicked);
- return _ascending ? Comparer<object>.Default.Compare(valueA, valueB) : Comparer<object>.Default.Compare(valueB, valueA);
+ return _ascending
+ ? Comparer<object>.Default.Compare(valueA, valueB)
+ : Comparer<object>.Default.Compare(valueB, valueA);
});
var listData = new List<ObjectsListData>();
- for (int index = 0; index < entities.Count; index++)
+ for (var index = 0; index < entities.Count; index++)
{
var info = entities[index];
- listData.Add(new ObjectsListData(info, $"{info.Name} {info.Entity}", index % 2 == 0 ? _altColor : _defaultColor));
+ listData.Add(new ObjectsListData(info,
+ $"{info.Name} {info.Entity}",
+ index % 2 == 0 ? _altColor : _defaultColor));
}
SearchList.PopulateList(listData);
if (data is not ObjectsListData { Info: var info, BackgroundColor: var backgroundColor })
return;
- var entry = new ObjectsTabEntry(info.Name, info.Entity, new StyleBoxFlat { BackgroundColor = backgroundColor });
+ var entry = new ObjectsTabEntry(info.Name,
+ info.Entity,
+ new StyleBoxFlat { BackgroundColor = backgroundColor });
button.ToolTip = $"{info.Name}, {info.Entity}";
- button.OnKeyBindDown += args => OnEntryKeyBindDown?.Invoke(args, data);
button.AddChild(entry);
}
{
ObjectsTabHeader.Header.ObjectName => entity.Name,
ObjectsTabHeader.Header.EntityID => entity.Entity.ToString(),
- _ => entity.Name
+ _ => entity.Name,
};
}
RefreshObjectList();
}
+ private string GetLocalizedEnumValue(ObjectsTabSelection selection)
+ {
+ return selection switch
+ {
+ ObjectsTabSelection.Grids => Loc.GetString("object-tab-object-type-grids"),
+ ObjectsTabSelection.Maps => Loc.GetString("object-tab-object-type-maps"),
+ ObjectsTabSelection.Stations => Loc.GetString("object-tab-object-type-stations"),
+ _ => throw new ArgumentOutOfRangeException(nameof(selection), selection, null),
+ };
+ }
+
private enum ObjectsTabSelection
{
Grids,
}
}
-public record ObjectsListData((string Name, NetEntity Entity) Info, string FilteringString, Color BackgroundColor) : ListData;
+public record ObjectsListData((string Name, NetEntity Entity) Info, string FilteringString, Color BackgroundColor)
+ : ListData;