Search bar

This commit is contained in:
Isaac Marovitz 2023-01-15 19:36:32 -05:00
parent bdc04e6fb4
commit c72e9a5afc
No known key found for this signature in database
GPG key ID: 97250B2B09A132E1
2 changed files with 87 additions and 24 deletions

View file

@ -33,8 +33,11 @@ namespace Ryujinx.Ava.UI.ViewModels
private VirtualFileSystem _virtualFileSystem; private VirtualFileSystem _virtualFileSystem;
private AvaloniaList<DownloadableContentModel> _downloadableContents = new(); private AvaloniaList<DownloadableContentModel> _downloadableContents = new();
private AvaloniaList<DownloadableContentModel> _views = new();
private AvaloniaList<DownloadableContentModel> _selectedDownloadableContents = new(); private AvaloniaList<DownloadableContentModel> _selectedDownloadableContents = new();
private string _search;
private ulong _titleId; private ulong _titleId;
private string _titleName; private string _titleName;
@ -46,6 +49,17 @@ namespace Ryujinx.Ava.UI.ViewModels
_downloadableContents = value; _downloadableContents = value;
OnPropertyChanged(); OnPropertyChanged();
OnPropertyChanged(nameof(UpdateCount)); OnPropertyChanged(nameof(UpdateCount));
Sort();
}
}
public AvaloniaList<DownloadableContentModel> Views
{
get => _views;
set
{
_views = value;
OnPropertyChanged();
} }
} }
@ -59,6 +73,17 @@ namespace Ryujinx.Ava.UI.ViewModels
} }
} }
public string Search
{
get => _search;
set
{
_search = value;
OnPropertyChanged();
Sort();
}
}
public string UpdateCount public string UpdateCount
{ {
get => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count); get => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count);
@ -126,6 +151,28 @@ namespace Ryujinx.Ava.UI.ViewModels
// NOTE: Save the list again to remove leftovers. // NOTE: Save the list again to remove leftovers.
Save(); Save();
Sort();
}
public void Sort()
{
DownloadableContents.AsObservableChangeSet()
.Filter(Filter)
.Bind(out var view).AsObservableList();
_views.Clear();
_views.AddRange(view);
OnPropertyChanged(nameof(Views));
}
private bool Filter(object arg)
{
if (arg is DownloadableContentModel content)
{
return string.IsNullOrWhiteSpace(_search) || content.FileName.ToLower().Contains(_search.ToLower());
}
return false;
} }
private Nca TryOpenNca(IStorage ncaStorage, string containerPath) private Nca TryOpenNca(IStorage ncaStorage, string containerPath)
@ -212,6 +259,7 @@ namespace Ryujinx.Ava.UI.ViewModels
SelectedDownloadableContents.Add(content); SelectedDownloadableContents.Add(content);
OnPropertyChanged(nameof(UpdateCount)); OnPropertyChanged(nameof(UpdateCount));
Sort();
containsDownloadableContent = true; containsDownloadableContent = true;
} }
@ -227,12 +275,14 @@ namespace Ryujinx.Ava.UI.ViewModels
{ {
DownloadableContents.Remove(model); DownloadableContents.Remove(model);
OnPropertyChanged(nameof(UpdateCount)); OnPropertyChanged(nameof(UpdateCount));
Sort();
} }
public void RemoveAll() public void RemoveAll()
{ {
DownloadableContents.Clear(); DownloadableContents.Clear();
OnPropertyChanged(nameof(UpdateCount)); OnPropertyChanged(nameof(UpdateCount));
Sort();
} }
public void EnableAll() public void EnableAll()

View file

@ -23,14 +23,19 @@
<Panel <Panel
Margin="0 0 0 10" Margin="0 0 0 10"
Grid.Row="0"> Grid.Row="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Text="{Binding UpdateCount}" />
<StackPanel <StackPanel
Orientation="Horizontal" Margin="10 0"
HorizontalAlignment="Left"> Grid.Column="1"
<TextBlock Text="{Binding UpdateCount}" /> Orientation="Horizontal">
</StackPanel>
<StackPanel
Orientation="Horizontal"
HorizontalAlignment="Right">
<Button <Button
Name="EnableAllButton" Name="EnableAllButton"
MinWidth="90" MinWidth="90"
@ -46,6 +51,14 @@
<TextBlock Text="{locale:Locale DlcManagerDisableAllButton}" /> <TextBlock Text="{locale:Locale DlcManagerDisableAllButton}" />
</Button> </Button>
</StackPanel> </StackPanel>
<TextBox
Grid.Column="2"
MinHeight="23"
MaxHeight="23"
HorizontalAlignment="Stretch"
Watermark="{locale:Locale Search}"
Text="{Binding Search}" />
</Grid>
</Panel> </Panel>
<Border <Border
Grid.Row="1" Grid.Row="1"
@ -63,7 +76,7 @@
Background="Transparent" Background="Transparent"
SelectionChanged="OnSelectionChanged" SelectionChanged="OnSelectionChanged"
SelectedItems="{Binding SelectedDownloadableContents, Mode=TwoWay}" SelectedItems="{Binding SelectedDownloadableContents, Mode=TwoWay}"
Items="{Binding DownloadableContents}"> Items="{Binding Views}">
<ListBox.DataTemplates> <ListBox.DataTemplates>
<DataTemplate <DataTemplate
DataType="models:DownloadableContentModel"> DataType="models:DownloadableContentModel">