]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
add search to marking editors (#15526)
authorDEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
Wed, 19 Apr 2023 05:44:37 +0000 (22:44 -0700)
committerGitHub <noreply@github.com>
Wed, 19 Apr 2023 05:44:37 +0000 (22:44 -0700)
Content.Client/Humanoid/MarkingPicker.xaml
Content.Client/Humanoid/MarkingPicker.xaml.cs
Content.Client/Humanoid/SingleMarkingPicker.xaml
Content.Client/Humanoid/SingleMarkingPicker.xaml.cs
Resources/Locale/en-US/preferences/ui/markings-picker.ftl

index 193a8796cdf8cb399783851807421a073aff193a..1928dd87162ec3d17d75791eb8f9c63dc593c8df 100644 (file)
@@ -5,23 +5,32 @@
         <BoxContainer Orientation="Horizontal" SeparationOverride="5" HorizontalExpand="True">
             <!-- Unused markings -->
             <BoxContainer Orientation="Vertical" HorizontalExpand="True">
-                <Label Text="{Loc 'markings-unused'}" />
-                <OptionButton Name="CMarkingCategoryButton" />
+                <BoxContainer Orientation="Horizontal" HorizontalExpand="True">
+                    <Label Text="{Loc 'markings-unused'}" HorizontalAlignment="Stretch" HorizontalExpand="True" />
+                    <Label Name="CMarkingPoints" Text="uwu" HorizontalAlignment="Right" />
+                </BoxContainer>
+
+                <OptionButton Name="CMarkingCategoryButton" StyleClasses="OpenLeft" />
+                <LineEdit Name="CMarkingSearch" PlaceHolder="{Loc 'markings-search'}" />
+
                 <ItemList Name="CMarkingsUnused" VerticalExpand="True" MinSize="300 250" />
-                <Label Name="CMarkingPoints" Text="uwu" />
-                <Button Name="CMarkingAdd" Text="{Loc 'markings-add'}" />
+                <Button Name="CMarkingAdd" Text="{Loc 'markings-add'}" StyleClasses="OpenRight" />
             </BoxContainer>
+
             <!-- Used markings -->
             <BoxContainer Orientation="Vertical" HorizontalExpand="True">
                 <Label Text="{Loc 'markings-used'}" />
+
                 <ItemList Name="CMarkingsUsed" VerticalExpand="True" MinSize="300 250" />
-                <BoxContainer Orientation="Horizontal" SeparationOverride="5">
-                    <Button Name="CMarkingRankUp" Text="{Loc 'markings-rank-up'}" HorizontalExpand="True" />
-                    <Button Name="CMarkingRankDown" Text="{Loc 'markings-rank-down'}" HorizontalExpand="True" />
+
+                <BoxContainer Orientation="Horizontal">
+                    <Button Name="CMarkingRankUp" Text="{Loc 'markings-rank-up'}" StyleClasses="OpenBoth" HorizontalExpand="True" />
+                    <Button Name="CMarkingRankDown" Text="{Loc 'markings-rank-down'}" StyleClasses="OpenBoth" HorizontalExpand="True" />
                 </BoxContainer>
-                <Button Name="CMarkingRemove" Text="{Loc 'markings-remove'}" />
+                <Button Name="CMarkingRemove" Text="{Loc 'markings-remove'}" StyleClasses="OpenRight" />
             </BoxContainer>
         </BoxContainer>
+
         <!-- Colors -->
         <BoxContainer Name="CMarkingColors" Orientation="Vertical" Visible="False" />
     </BoxContainer>
index 74f02128e5d2d3a523b9d454c165a8c62cd9750d..9df4e28655443c6d458f7b91889d5b45868bf094 100644 (file)
@@ -73,7 +73,7 @@ public sealed partial class MarkingPicker : Control
         set
         {
             _ignoreSpecies = value;
-            Populate();
+            Populate(CMarkingSearch.Text);
         }
     }
 
@@ -92,7 +92,7 @@ public sealed partial class MarkingPicker : Control
         CurrentSkinColor = skinColor;
         CurrentEyeColor = eyeColor;
 
-        Populate();
+        Populate(CMarkingSearch.Text);
         PopulateUsed();
     }
 
@@ -109,7 +109,7 @@ public sealed partial class MarkingPicker : Control
         CurrentSkinColor = skinColor;
         CurrentEyeColor = eyeColor;
 
-        Populate();
+        Populate(CMarkingSearch.Text);
         PopulateUsed();
     }
 
@@ -136,6 +136,8 @@ public sealed partial class MarkingPicker : Control
 
         CMarkingRankUp.OnPressed += _ => SwapMarkingUp();
         CMarkingRankDown.OnPressed += _ => SwapMarkingDown();
+
+        CMarkingSearch.OnTextChanged += args => Populate(args.Text);
     }
 
     private void SetupCategoryButtons()
@@ -174,7 +176,7 @@ public sealed partial class MarkingPicker : Control
         return result;
     }
 
-    public void Populate()
+    public void Populate(string filter)
     {
         CMarkingsUnused.Clear();
         _selectedUnusedMarking = null;
@@ -183,8 +185,12 @@ public sealed partial class MarkingPicker : Control
             ? _markingManager.MarkingsByCategory(_selectedMarkingCategory)
             : _markingManager.MarkingsByCategoryAndSpecies(_selectedMarkingCategory, _currentSpecies);
 
-        var sortedMarkings = markings.OrderBy(p => Loc.GetString(GetMarkingName(p.Value)));
-        foreach (var (_, marking) in sortedMarkings)
+        var sortedMarkings = markings.Values.Where(m =>
+            m.ID.ToLower().Contains(filter.ToLower()) ||
+            GetMarkingName(m).ToLower().Contains(filter.ToLower())
+        ).OrderBy(p => Loc.GetString(GetMarkingName(p)));
+
+        foreach (var marking in sortedMarkings)
         {
             if (_currentMarkings.TryGetMarking(_selectedMarkingCategory, marking.ID, out _))
             {
@@ -314,7 +320,7 @@ public sealed partial class MarkingPicker : Control
         _currentMarkings = new(markingList, speciesPrototype.MarkingPoints, _markingManager, _prototypeManager);
         _currentMarkings.EnsureSpecies(species, null, _markingManager);
 
-        Populate();
+        Populate(CMarkingSearch.Text);
         PopulateUsed();
     }
 
@@ -331,7 +337,7 @@ public sealed partial class MarkingPicker : Control
     {
         CMarkingCategoryButton.SelectId(category.Id);
         _selectedMarkingCategory = _markingCategories[category.Id];
-        Populate();
+        Populate(CMarkingSearch.Text);
         PopulateUsed();
         UpdatePoints();
     }
index 2dfa661f589cbb3569ff587fb0e477b5f80572bb..c816c52e9c2928a2e2d5221cd61d511b763d4f5a 100644 (file)
@@ -5,15 +5,18 @@
     <!-- "Slot" selection -->
     <Label Name="CategoryName" />
     <BoxContainer Name="SlotSelectorContainer" HorizontalExpand="True">
-        <OptionButton Name="SlotSelector" HorizontalExpand="True" />
-        <Button Name="AddButton" Text="{Loc 'marking-slot-add'}"/>
-        <Button Name="RemoveButton" Text="{Loc 'marking-slot-remove'}"/>
+        <OptionButton Name="SlotSelector" HorizontalExpand="True" StyleClasses="OpenBoth" />
+        <Button Name="AddButton" Text="{Loc 'marking-slot-add'}" StyleClasses="OpenBoth" />
+        <Button Name="RemoveButton" Text="{Loc 'marking-slot-remove'}" StyleClasses="OpenLeft" />
     </BoxContainer>
+    <LineEdit Name="Search" PlaceHolder="{Loc 'markings-search'}" HorizontalExpand="True" />
+
     <!-- Item list -->
     <BoxContainer Name="MarkingSelectorContainer" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
         <ScrollContainer MinHeight="500" VerticalExpand="True" HorizontalExpand="True">
             <ItemList Name="MarkingList" VerticalExpand="True" />
         </ScrollContainer>
+
         <!-- Color sliders -->
         <ScrollContainer MinHeight="200" HorizontalExpand="True">
             <BoxContainer Name="ColorSelectorContainer" HorizontalExpand="True" />
index d5603a9b70d61168e399bbe4d851fae55688f756..be3130a58bdbc4c2970cc3dfcb27dcf1c8b225f4 100644 (file)
@@ -10,7 +10,7 @@ namespace Content.Client.Humanoid;
 [GenerateTypedNameReferences]
 public sealed partial class SingleMarkingPicker : BoxContainer
 {
-    [Dependency] private MarkingManager _markingManager = default!;
+    [Dependency] private readonly MarkingManager _markingManager = default!;
 
     /// <summary>
     ///     What happens if a marking is selected.
@@ -89,7 +89,7 @@ public sealed partial class SingleMarkingPicker : BoxContainer
 
             if (!string.IsNullOrEmpty(_species))
             {
-                PopulateList();
+                PopulateList(Search.Text);
             }
         }
     }
@@ -138,6 +138,11 @@ public sealed partial class SingleMarkingPicker : BoxContainer
         {
             OnSlotRemove!(_slot);
         };
+
+        Search.OnTextChanged += args =>
+        {
+            PopulateList(args.Text);
+        };
     }
 
     public void UpdateData(List<Marking> markings, string species, int totalPoints)
@@ -154,12 +159,12 @@ public sealed partial class SingleMarkingPicker : BoxContainer
             return;
         }
 
-        PopulateList();
+        PopulateList(Search.Text);
         PopulateColors();
         PopulateSlotSelector();
     }
 
-    public void PopulateList()
+    public void PopulateList(string filter)
     {
         if (string.IsNullOrEmpty(_species))
         {
@@ -176,7 +181,11 @@ public sealed partial class SingleMarkingPicker : BoxContainer
 
         MarkingList.Clear();
 
-        var sortedMarkings = _markingPrototypeCache.OrderBy(p => Loc.GetString($"marking-{p.Key}"));
+        var sortedMarkings = _markingPrototypeCache.Where(m =>
+            m.Key.ToLower().Contains(filter.ToLower()) ||
+            GetMarkingName(m.Value).ToLower().Contains(filter.ToLower())
+        ).OrderBy(p => Loc.GetString($"marking-{p.Key}"));
+
         foreach (var (id, marking) in sortedMarkings)
         {
             var item = MarkingList.AddItem(Loc.GetString($"marking-{id}"), marking.Sprites[0].Frame0());
@@ -260,6 +269,7 @@ public sealed partial class SingleMarkingPicker : BoxContainer
     private void PopulateSlotSelector()
     {
         SlotSelector.Visible = Slot >= 0;
+        Search.Visible = Slot >= 0;
         AddButton.HorizontalExpand = Slot < 0;
         RemoveButton.HorizontalExpand = Slot < 0;
         AddButton.Disabled = PointsLeft == 0 && _totalPoints > -1 ;
@@ -281,4 +291,9 @@ public sealed partial class SingleMarkingPicker : BoxContainer
             }
         }
     }
+
+    private string GetMarkingName(MarkingPrototype marking)
+    {
+        return Loc.GetString($"marking-{marking.ID}");
+    }
 }
index 53fee9dd7444ecba03567337e472bdcc8fb190f8..ae7f401a4bacff747c8b4c2a82ed83251ddd23c0 100644 (file)
@@ -4,6 +4,7 @@ markings-add = Add Marking
 markings-remove = Remove Marking
 markings-rank-up = Up
 markings-rank-down = Down
+markings-search = Search
 marking-points-remaining = Markings left: {$points}
 marking-used = {$marking-name}
 marking-used-forced = {$marking-name} (Forced)