<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>
set
{
_ignoreSpecies = value;
- Populate();
+ Populate(CMarkingSearch.Text);
}
}
CurrentSkinColor = skinColor;
CurrentEyeColor = eyeColor;
- Populate();
+ Populate(CMarkingSearch.Text);
PopulateUsed();
}
CurrentSkinColor = skinColor;
CurrentEyeColor = eyeColor;
- Populate();
+ Populate(CMarkingSearch.Text);
PopulateUsed();
}
CMarkingRankUp.OnPressed += _ => SwapMarkingUp();
CMarkingRankDown.OnPressed += _ => SwapMarkingDown();
+
+ CMarkingSearch.OnTextChanged += args => Populate(args.Text);
}
private void SetupCategoryButtons()
return result;
}
- public void Populate()
+ public void Populate(string filter)
{
CMarkingsUnused.Clear();
_selectedUnusedMarking = null;
? _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 _))
{
_currentMarkings = new(markingList, speciesPrototype.MarkingPoints, _markingManager, _prototypeManager);
_currentMarkings.EnsureSpecies(species, null, _markingManager);
- Populate();
+ Populate(CMarkingSearch.Text);
PopulateUsed();
}
{
CMarkingCategoryButton.SelectId(category.Id);
_selectedMarkingCategory = _markingCategories[category.Id];
- Populate();
+ Populate(CMarkingSearch.Text);
PopulateUsed();
UpdatePoints();
}
<!-- "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" />
[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.
if (!string.IsNullOrEmpty(_species))
{
- PopulateList();
+ PopulateList(Search.Text);
}
}
}
{
OnSlotRemove!(_slot);
};
+
+ Search.OnTextChanged += args =>
+ {
+ PopulateList(args.Text);
+ };
}
public void UpdateData(List<Marking> markings, string species, int totalPoints)
return;
}
- PopulateList();
+ PopulateList(Search.Text);
PopulateColors();
PopulateSlotSelector();
}
- public void PopulateList()
+ public void PopulateList(string filter)
{
if (string.IsNullOrEmpty(_species))
{
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());
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 ;
}
}
}
+
+ private string GetMarkingName(MarkingPrototype marking)
+ {
+ return Loc.GetString($"marking-{marking.ID}");
+ }
}
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)