-<DefaultWindow xmlns="https://spacestation14.io"
- Title="{Loc 'ghost-target-window-title'}"
- MinSize="450 450"
- SetSize="450 450">
- <ScrollContainer VerticalExpand="True"
- HorizontalExpand="True"
- HScrollEnabled="False">
- <BoxContainer Name="ButtonContainer"
- Orientation="Vertical"
- VerticalExpand="True"
- SeparationOverride="5">
- <!-- Target buttons get added here by code -->
- </BoxContainer>
- </ScrollContainer>
+<DefaultWindow xmlns="https://spacestation14.io" Title="{Loc 'ghost-target-window-title'}" MinSize="450 450" SetSize="450 450">
+ <BoxContainer Orientation="Vertical" HorizontalExpand="True" SizeFlagsStretchRatio="0.4">
+ <LineEdit Name="SearchBar" PlaceHolder="Search" HorizontalExpand="True" Margin="0 4" />
+ <ScrollContainer VerticalExpand="True" HorizontalExpand="True" HScrollEnabled="False">
+ <BoxContainer Name="ButtonContainer" Orientation="Vertical" VerticalExpand="True" SeparationOverride="5">
+ <!-- Target buttons get added here by code -->
+ </BoxContainer>
+ </ScrollContainer>
+ </BoxContainer>
</DefaultWindow>
public sealed partial class GhostTargetWindow : DefaultWindow
{
private List<(string, NetEntity)> _warps = new();
+ private string _searchText = string.Empty;
public event Action<NetEntity>? WarpClicked;
public GhostTargetWindow()
{
RobustXamlLoader.Load(this);
+ SearchBar.OnTextChanged += OnSearchTextChanged;
}
public void UpdateWarps(IEnumerable<GhostWarp> warps)
};
currentButtonRef.OnPressed += _ => WarpClicked?.Invoke(warpTarget);
+ currentButtonRef.Visible = ButtonIsVisible(currentButtonRef);
ButtonContainer.AddChild(currentButtonRef);
}
}
+
+ private bool ButtonIsVisible(Button button)
+ {
+ return string.IsNullOrEmpty(_searchText) || button.Text == null || button.Text.Contains(_searchText, StringComparison.OrdinalIgnoreCase);
+ }
+
+ private void UpdateVisibleButtons()
+ {
+ foreach (var child in ButtonContainer.Children)
+ {
+ if (child is Button button)
+ button.Visible = ButtonIsVisible(button);
+ }
+ }
+
+ private void OnSearchTextChanged(LineEdit.LineEditEventArgs args)
+ {
+ _searchText = args.Text;
+
+ UpdateVisibleButtons();
+ }
}
}