]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix Admin Object tab sorting and search - Part 2 (#28681)
authorRepo <47093363+Titian3@users.noreply.github.com>
Fri, 28 Jun 2024 03:32:57 +0000 (15:32 +1200)
committerGitHub <noreply@github.com>
Fri, 28 Jun 2024 03:32:57 +0000 (13:32 +1000)
* admin Object tab sorting and searchable

* Fix for showing disconnected players on player admin tab

* Fix namespace and search bar location.

* Change linq to loop.

* No more Linq to sort

* Fix item click vv menu

* Added refresh button and refresh on opening tab.

* Clear spaces.

* Move tab magic numbers to enums

* Get rid of old unused xaml

* Fix code style issues and button event type.

* Merge in baby jail

* More style cleanup and move cast around.

* Make the localization a little more easy to read, same loc var names.

* Missed Loc for label

* Fix class field order

* Over zelous delete.

* Small updates.

* Min syntax issues fix

Content.Client/Administration/UI/AdminMenuWindow.xaml.cs
Content.Client/Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml
Content.Client/Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml.cs
Content.Client/UserInterface/Systems/Admin/AdminUIController.cs
Resources/Locale/en-US/administration/ui/tabs/object-tab.ftl

index f3aa2572f2f99b294e730b0b20aad44e03851b12..d5c43e2a500e7012aab9843e268b40ee73e152e4 100644 (file)
@@ -3,38 +3,57 @@ using Robust.Client.AutoGenerated;
 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,
     }
 }
-
index 821389150d6b7c0a2e32cd3f0a6535c1cb77fd57..f4298bbc00f7bb92a354dde0526569d52d87777b 100644 (file)
@@ -4,18 +4,17 @@
          xmlns:co="clr-namespace:Content.Client.UserInterface.Controls">
     <BoxContainer Orientation="Vertical">
         <BoxContainer Orientation="Horizontal">
-            <Label HorizontalExpand="True" SizeFlagsStretchRatio="0.50"
-                   Text="{Loc object-tab-object-type}" />
-            <LineEdit Name="SearchLineEdit" PlaceHolder="{Loc object-tab-object-search}" HorizontalExpand="True" SizeFlagsStretchRatio="1"/>
-            <OptionButton Name="ObjectTypeOptions" HorizontalExpand="True" SizeFlagsStretchRatio="0.25"/>
+            <Label Text="{Loc object-tab-object-type}" />
+            <OptionButton Name="ObjectTypeOptions" HorizontalAlignment="Left" />
+            <LineEdit Name="SearchLineEdit" PlaceHolder="{Loc object-tab-object-search}" HorizontalExpand="True"
+                      SizeFlagsStretchRatio="1" />
+            <Button Name="RefreshListButton" Text="{Loc object-tab-refresh-button}" ToggleMode="False" />
         </BoxContainer>
-        <BoxContainer Orientation="Horizontal" HorizontalExpand="True">
-        </BoxContainer>
-        <cc:HSeparator/>
+        <cc:HSeparator />
         <BoxContainer Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
-            <ot:ObjectsTabHeader Name="ListHeader"/>
-            <cc:HSeparator/>
-            <co:SearchListContainer Name="SearchList" Access="Public" VerticalExpand="True"/>
+            <ot:ObjectsTabHeader Name="ListHeader" />
+            <cc:HSeparator />
+            <co:SearchListContainer Name="SearchList" Access="Public" VerticalExpand="True" />
         </BoxContainer>
     </BoxContainer>
 </Control>
index 67e0db01eebd17a149c89bce120aa7b4ee46b6d9..78eefa34628311fee39b6426da27bbbffb52aa4e 100644 (file)
@@ -3,6 +3,7 @@ using Content.Client.UserInterface.Controls;
 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;
@@ -15,17 +16,14 @@ public sealed partial class ObjectsTab : Control
     [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()
     {
@@ -38,40 +36,25 @@ public sealed partial class ObjectsTab : Control
             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]);
     }
@@ -101,6 +84,7 @@ public sealed partial class ObjectsTab : Control
                 {
                     entities.Add((metadata.EntityName, _entityManager.GetNetEntity(uid)));
                 }
+
                 break;
             }
             default:
@@ -111,14 +95,18 @@ public sealed partial class ObjectsTab : Control
         {
             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);
@@ -129,10 +117,11 @@ public sealed partial class ObjectsTab : Control
         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);
     }
 
@@ -154,7 +143,7 @@ public sealed partial class ObjectsTab : Control
         {
             ObjectsTabHeader.Header.ObjectName => entity.Name,
             ObjectsTabHeader.Header.EntityID => entity.Entity.ToString(),
-            _ => entity.Name
+            _ => entity.Name,
         };
     }
 
@@ -174,6 +163,17 @@ public sealed partial class ObjectsTab : Control
         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,
@@ -182,4 +182,5 @@ public sealed partial class ObjectsTab : Control
     }
 }
 
-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;
index e12ce0ab011c9b53808a16341b5b2f4df3678453..d36a91c3733283835f1bfe177075c626fe31cb00 100644 (file)
@@ -230,7 +230,7 @@ public sealed class AdminUIController : UIController,
 
         if (function == EngineKeyFunctions.UIClick)
             _conHost.ExecuteCommand($"vv {uid}");
-        else if (function == EngineKeyFunctions.UseSecondary)
+        else if (function == EngineKeyFunctions.UIRightClick)
             _verb.OpenVerbMenu(uid, true);
         else
             return;
index 0899d20c8d2dcd60e8b5b1903d82fee4b563b1ef..da84ea4f163c1b62c1cd39fc83a6841d9f22746f 100644 (file)
@@ -7,3 +7,4 @@ object-tab-object-search = Search...
 object-tab-object-type-grids = Grids
 object-tab-object-type-maps = Maps
 object-tab-object-type-stations = Stations
+object-tab-refresh-button = Refresh