Remove button

This commit is contained in:
Isaac Marovitz 2023-01-15 16:46:01 -05:00
parent 39d8fde391
commit 93a2c2c37e
No known key found for this signature in database
GPG key ID: 97250B2B09A132E1
5 changed files with 33 additions and 43 deletions

View file

@ -583,7 +583,7 @@
"SelectUpdateDialogTitle": "Select update files",
"UserProfileWindowTitle": "User Profiles Manager",
"CheatWindowTitle": "Cheats Manager",
"DlcWindowTitle": "Downloadable Content Manager",
"DlcWindowTitle": "Manage Downloadable Content for {0} ({1})",
"UpdateWindowTitle": "Title Update Manager",
"CheatWindowHeading": "Cheats Available for {0} [{1}]",
"DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})",

View file

@ -1,4 +1,5 @@
using Ryujinx.Ava.UI.ViewModels;
using System.IO;
namespace Ryujinx.Ava.UI.Models
{
@ -21,6 +22,8 @@ namespace Ryujinx.Ava.UI.Models
public string ContainerPath { get; }
public string FullPath { get; }
public string FileName => Path.GetFileName(ContainerPath);
public DownloadableContentModel(string titleId, string containerPath, string fullPath, bool enabled)
{
TitleId = titleId;

View file

@ -32,6 +32,7 @@ namespace Ryujinx.Ava.UI.ViewModels
private VirtualFileSystem _virtualFileSystem;
private AvaloniaList<DownloadableContentModel> _downloadableContents = new();
private AvaloniaList<DownloadableContentModel> _selectedDownloadableContents = new();
private ulong _titleId;
private string _titleName;
@ -46,7 +47,15 @@ namespace Ryujinx.Ava.UI.ViewModels
}
}
public object SelectedDLCs { get; }
public AvaloniaList<DownloadableContentModel> SelectedDownloadableContents
{
get => _selectedDownloadableContents;
set
{
_selectedDownloadableContents = value;
OnPropertyChanged();
}
}
public DownloadableContentManagerViewModel(VirtualFileSystem virtualFileSystem, ulong titleId, string titleName)
{
@ -90,7 +99,7 @@ namespace Ryujinx.Ava.UI.ViewModels
Nca nca = TryOpenNca(ncaFile.Get.AsStorage(), downloadableContentContainer.ContainerPath);
if (nca != null)
{
_downloadableContents.Add(new DownloadableContentModel(nca.Header.TitleId.ToString("X16"),
DownloadableContents.Add(new DownloadableContentModel(nca.Header.TitleId.ToString("X16"),
downloadableContentContainer.ContainerPath,
downloadableContentNca.FullPath,
downloadableContentNca.Enabled));
@ -150,7 +159,7 @@ namespace Ryujinx.Ava.UI.ViewModels
private async Task AddDownloadableContent(string path)
{
if (!File.Exists(path) || _downloadableContents.FirstOrDefault(x => x.ContainerPath == path) != null)
if (!File.Exists(path) || DownloadableContents.FirstOrDefault(x => x.ContainerPath == path) != null)
{
return;
}
@ -181,7 +190,7 @@ namespace Ryujinx.Ava.UI.ViewModels
break;
}
_downloadableContents.Add(new DownloadableContentModel(nca.Header.TitleId.ToString("X16"), path, fileEntry.FullPath, true));
DownloadableContents.Add(new DownloadableContentModel(nca.Header.TitleId.ToString("X16"), path, fileEntry.FullPath, true));
containsDownloadableContent = true;
}
@ -193,43 +202,19 @@ namespace Ryujinx.Ava.UI.ViewModels
}
}
private void RemoveDownloadableContents(bool removeSelectedOnly = false)
public void Remove(DownloadableContentModel model)
{
if (removeSelectedOnly)
{
AvaloniaList<DownloadableContentModel> removedItems = new();
/*foreach (var item in DlcDataGrid.SelectedItems)
{
removedItems.Add(item as DownloadableContentModel);
}
DlcDataGrid.SelectedItems.Clear();*/
foreach (var item in removedItems)
{
_downloadableContents.RemoveAll(_downloadableContents.Where(x => x.TitleId == item.TitleId).ToList());
}
}
else
{
_downloadableContents.Clear();
}
}
public void RemoveSelected()
{
RemoveDownloadableContents(true);
DownloadableContents.Remove(model);
}
public void RemoveAll()
{
RemoveDownloadableContents();
DownloadableContents.Clear();
}
public void EnableAll()
{
foreach(var item in _downloadableContents)
foreach(var item in DownloadableContents)
{
item.Enabled = true;
}
@ -237,7 +222,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public void DisableAll()
{
foreach (var item in _downloadableContents)
foreach (var item in DownloadableContents)
{
item.Enabled = false;
}
@ -249,7 +234,7 @@ namespace Ryujinx.Ava.UI.ViewModels
DownloadableContentContainer container = default;
foreach (DownloadableContentModel downloadableContent in _downloadableContents)
foreach (DownloadableContentModel downloadableContent in DownloadableContents)
{
if (container.ContainerPath != downloadableContent.ContainerPath)
{

View file

@ -32,7 +32,7 @@
VirtualizationMode="None"
SelectionMode="Multiple"
Background="Transparent"
SelectedItems="{Binding SelectedDLCs, Mode=TwoWay}"
SelectedItems="{Binding SelectedDownloadableContents, Mode=TwoWay}"
Items="{Binding DownloadableContents}">
<ListBox.DataTemplates>
<DataTemplate
@ -48,7 +48,7 @@
HorizontalAlignment="Left"
VerticalAlignment="Center"
TextWrapping="Wrap"
Text="{Binding ContainerPath}" />
Text="{Binding FileName}" />
<StackPanel
Grid.Column="1"
Spacing="10"

View file

@ -9,7 +9,7 @@ using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.HLE.FileSystem;
using Ryujinx.Ui.Common.Helper;
using System.Threading.Tasks;
using Button = FluentAvalonia.UI.Controls.Button;
using Button = Avalonia.Controls.Button;
namespace Ryujinx.Ava.UI.Windows
{
@ -29,10 +29,6 @@ namespace Ryujinx.Ava.UI.Windows
DataContext = ViewModel = new DownloadableContentManagerViewModel(virtualFileSystem, titleId, titleName);
InitializeComponent();
// RemoveButton.IsEnabled = false;
// DlcDataGrid.SelectionChanged += DlcDataGrid_SelectionChanged;
}
public static async Task Show(VirtualFileSystem virtualFileSystem, ulong titleId, string titleName)
@ -67,7 +63,13 @@ namespace Ryujinx.Ava.UI.Windows
private void RemoveDLC(object sender, RoutedEventArgs e)
{
ViewModel.RemoveSelected();
if (sender is Button button)
{
if (button.DataContext is DownloadableContentModel model)
{
ViewModel.Remove(model);
}
}
}
private void OpenLocation(object sender, RoutedEventArgs e)