add search to marking editors (#15526)

This commit is contained in:
DEATHB4DEFEAT
2023-04-18 22:44:37 -07:00
committed by GitHub
parent 3e410bd9e9
commit 078963127b
5 changed files with 58 additions and 24 deletions

View File

@@ -5,23 +5,32 @@
<BoxContainer Orientation="Horizontal" SeparationOverride="5" HorizontalExpand="True"> <BoxContainer Orientation="Horizontal" SeparationOverride="5" HorizontalExpand="True">
<!-- Unused markings --> <!-- Unused markings -->
<BoxContainer Orientation="Vertical" HorizontalExpand="True"> <BoxContainer Orientation="Vertical" HorizontalExpand="True">
<Label Text="{Loc 'markings-unused'}" /> <BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<OptionButton Name="CMarkingCategoryButton" /> <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" /> <ItemList Name="CMarkingsUnused" VerticalExpand="True" MinSize="300 250" />
<Label Name="CMarkingPoints" Text="uwu" /> <Button Name="CMarkingAdd" Text="{Loc 'markings-add'}" StyleClasses="OpenRight" />
<Button Name="CMarkingAdd" Text="{Loc 'markings-add'}" />
</BoxContainer> </BoxContainer>
<!-- Used markings --> <!-- Used markings -->
<BoxContainer Orientation="Vertical" HorizontalExpand="True"> <BoxContainer Orientation="Vertical" HorizontalExpand="True">
<Label Text="{Loc 'markings-used'}" /> <Label Text="{Loc 'markings-used'}" />
<ItemList Name="CMarkingsUsed" VerticalExpand="True" MinSize="300 250" /> <ItemList Name="CMarkingsUsed" VerticalExpand="True" MinSize="300 250" />
<BoxContainer Orientation="Horizontal" SeparationOverride="5">
<Button Name="CMarkingRankUp" Text="{Loc 'markings-rank-up'}" HorizontalExpand="True" /> <BoxContainer Orientation="Horizontal">
<Button Name="CMarkingRankDown" Text="{Loc 'markings-rank-down'}" HorizontalExpand="True" /> <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> </BoxContainer>
<Button Name="CMarkingRemove" Text="{Loc 'markings-remove'}" /> <Button Name="CMarkingRemove" Text="{Loc 'markings-remove'}" StyleClasses="OpenRight" />
</BoxContainer> </BoxContainer>
</BoxContainer> </BoxContainer>
<!-- Colors --> <!-- Colors -->
<BoxContainer Name="CMarkingColors" Orientation="Vertical" Visible="False" /> <BoxContainer Name="CMarkingColors" Orientation="Vertical" Visible="False" />
</BoxContainer> </BoxContainer>

View File

@@ -73,7 +73,7 @@ public sealed partial class MarkingPicker : Control
set set
{ {
_ignoreSpecies = value; _ignoreSpecies = value;
Populate(); Populate(CMarkingSearch.Text);
} }
} }
@@ -92,7 +92,7 @@ public sealed partial class MarkingPicker : Control
CurrentSkinColor = skinColor; CurrentSkinColor = skinColor;
CurrentEyeColor = eyeColor; CurrentEyeColor = eyeColor;
Populate(); Populate(CMarkingSearch.Text);
PopulateUsed(); PopulateUsed();
} }
@@ -109,7 +109,7 @@ public sealed partial class MarkingPicker : Control
CurrentSkinColor = skinColor; CurrentSkinColor = skinColor;
CurrentEyeColor = eyeColor; CurrentEyeColor = eyeColor;
Populate(); Populate(CMarkingSearch.Text);
PopulateUsed(); PopulateUsed();
} }
@@ -136,6 +136,8 @@ public sealed partial class MarkingPicker : Control
CMarkingRankUp.OnPressed += _ => SwapMarkingUp(); CMarkingRankUp.OnPressed += _ => SwapMarkingUp();
CMarkingRankDown.OnPressed += _ => SwapMarkingDown(); CMarkingRankDown.OnPressed += _ => SwapMarkingDown();
CMarkingSearch.OnTextChanged += args => Populate(args.Text);
} }
private void SetupCategoryButtons() private void SetupCategoryButtons()
@@ -174,7 +176,7 @@ public sealed partial class MarkingPicker : Control
return result; return result;
} }
public void Populate() public void Populate(string filter)
{ {
CMarkingsUnused.Clear(); CMarkingsUnused.Clear();
_selectedUnusedMarking = null; _selectedUnusedMarking = null;
@@ -183,8 +185,12 @@ public sealed partial class MarkingPicker : Control
? _markingManager.MarkingsByCategory(_selectedMarkingCategory) ? _markingManager.MarkingsByCategory(_selectedMarkingCategory)
: _markingManager.MarkingsByCategoryAndSpecies(_selectedMarkingCategory, _currentSpecies); : _markingManager.MarkingsByCategoryAndSpecies(_selectedMarkingCategory, _currentSpecies);
var sortedMarkings = markings.OrderBy(p => Loc.GetString(GetMarkingName(p.Value))); var sortedMarkings = markings.Values.Where(m =>
foreach (var (_, marking) in sortedMarkings) 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 _)) 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 = new(markingList, speciesPrototype.MarkingPoints, _markingManager, _prototypeManager);
_currentMarkings.EnsureSpecies(species, null, _markingManager); _currentMarkings.EnsureSpecies(species, null, _markingManager);
Populate(); Populate(CMarkingSearch.Text);
PopulateUsed(); PopulateUsed();
} }
@@ -331,7 +337,7 @@ public sealed partial class MarkingPicker : Control
{ {
CMarkingCategoryButton.SelectId(category.Id); CMarkingCategoryButton.SelectId(category.Id);
_selectedMarkingCategory = _markingCategories[category.Id]; _selectedMarkingCategory = _markingCategories[category.Id];
Populate(); Populate(CMarkingSearch.Text);
PopulateUsed(); PopulateUsed();
UpdatePoints(); UpdatePoints();
} }

View File

@@ -5,15 +5,18 @@
<!-- "Slot" selection --> <!-- "Slot" selection -->
<Label Name="CategoryName" /> <Label Name="CategoryName" />
<BoxContainer Name="SlotSelectorContainer" HorizontalExpand="True"> <BoxContainer Name="SlotSelectorContainer" HorizontalExpand="True">
<OptionButton Name="SlotSelector" HorizontalExpand="True" /> <OptionButton Name="SlotSelector" HorizontalExpand="True" StyleClasses="OpenBoth" />
<Button Name="AddButton" Text="{Loc 'marking-slot-add'}"/> <Button Name="AddButton" Text="{Loc 'marking-slot-add'}" StyleClasses="OpenBoth" />
<Button Name="RemoveButton" Text="{Loc 'marking-slot-remove'}"/> <Button Name="RemoveButton" Text="{Loc 'marking-slot-remove'}" StyleClasses="OpenLeft" />
</BoxContainer> </BoxContainer>
<LineEdit Name="Search" PlaceHolder="{Loc 'markings-search'}" HorizontalExpand="True" />
<!-- Item list --> <!-- Item list -->
<BoxContainer Name="MarkingSelectorContainer" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True"> <BoxContainer Name="MarkingSelectorContainer" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
<ScrollContainer MinHeight="500" VerticalExpand="True" HorizontalExpand="True"> <ScrollContainer MinHeight="500" VerticalExpand="True" HorizontalExpand="True">
<ItemList Name="MarkingList" VerticalExpand="True" /> <ItemList Name="MarkingList" VerticalExpand="True" />
</ScrollContainer> </ScrollContainer>
<!-- Color sliders --> <!-- Color sliders -->
<ScrollContainer MinHeight="200" HorizontalExpand="True"> <ScrollContainer MinHeight="200" HorizontalExpand="True">
<BoxContainer Name="ColorSelectorContainer" HorizontalExpand="True" /> <BoxContainer Name="ColorSelectorContainer" HorizontalExpand="True" />

View File

@@ -10,7 +10,7 @@ namespace Content.Client.Humanoid;
[GenerateTypedNameReferences] [GenerateTypedNameReferences]
public sealed partial class SingleMarkingPicker : BoxContainer public sealed partial class SingleMarkingPicker : BoxContainer
{ {
[Dependency] private MarkingManager _markingManager = default!; [Dependency] private readonly MarkingManager _markingManager = default!;
/// <summary> /// <summary>
/// What happens if a marking is selected. /// What happens if a marking is selected.
@@ -89,7 +89,7 @@ public sealed partial class SingleMarkingPicker : BoxContainer
if (!string.IsNullOrEmpty(_species)) if (!string.IsNullOrEmpty(_species))
{ {
PopulateList(); PopulateList(Search.Text);
} }
} }
} }
@@ -138,6 +138,11 @@ public sealed partial class SingleMarkingPicker : BoxContainer
{ {
OnSlotRemove!(_slot); OnSlotRemove!(_slot);
}; };
Search.OnTextChanged += args =>
{
PopulateList(args.Text);
};
} }
public void UpdateData(List<Marking> markings, string species, int totalPoints) public void UpdateData(List<Marking> markings, string species, int totalPoints)
@@ -154,12 +159,12 @@ public sealed partial class SingleMarkingPicker : BoxContainer
return; return;
} }
PopulateList(); PopulateList(Search.Text);
PopulateColors(); PopulateColors();
PopulateSlotSelector(); PopulateSlotSelector();
} }
public void PopulateList() public void PopulateList(string filter)
{ {
if (string.IsNullOrEmpty(_species)) if (string.IsNullOrEmpty(_species))
{ {
@@ -176,7 +181,11 @@ public sealed partial class SingleMarkingPicker : BoxContainer
MarkingList.Clear(); 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) foreach (var (id, marking) in sortedMarkings)
{ {
var item = MarkingList.AddItem(Loc.GetString($"marking-{id}"), marking.Sprites[0].Frame0()); 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() private void PopulateSlotSelector()
{ {
SlotSelector.Visible = Slot >= 0; SlotSelector.Visible = Slot >= 0;
Search.Visible = Slot >= 0;
AddButton.HorizontalExpand = Slot < 0; AddButton.HorizontalExpand = Slot < 0;
RemoveButton.HorizontalExpand = Slot < 0; RemoveButton.HorizontalExpand = Slot < 0;
AddButton.Disabled = PointsLeft == 0 && _totalPoints > -1 ; 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}");
}
} }

View File

@@ -4,6 +4,7 @@ markings-add = Add Marking
markings-remove = Remove Marking markings-remove = Remove Marking
markings-rank-up = Up markings-rank-up = Up
markings-rank-down = Down markings-rank-down = Down
markings-search = Search
marking-points-remaining = Markings left: {$points} marking-points-remaining = Markings left: {$points}
marking-used = {$marking-name} marking-used = {$marking-name}
marking-used-forced = {$marking-name} (Forced) marking-used-forced = {$marking-name} (Forced)