ModManagerWindow.axaml.cs
1 using Avalonia.Controls; 2 using Avalonia.Interactivity; 3 using Avalonia.Styling; 4 using FluentAvalonia.UI.Controls; 5 using Ryujinx.Ava.Common.Locale; 6 using Ryujinx.Ava.UI.Helpers; 7 using Ryujinx.Ava.UI.Models; 8 using Ryujinx.Ava.UI.ViewModels; 9 using Ryujinx.UI.Common.Helper; 10 using System.Threading.Tasks; 11 using Button = Avalonia.Controls.Button; 12 13 namespace Ryujinx.Ava.UI.Windows 14 { 15 public partial class ModManagerWindow : UserControl 16 { 17 public ModManagerViewModel ViewModel; 18 19 public ModManagerWindow() 20 { 21 DataContext = this; 22 23 InitializeComponent(); 24 } 25 26 public ModManagerWindow(ulong titleId) 27 { 28 DataContext = ViewModel = new ModManagerViewModel(titleId); 29 30 InitializeComponent(); 31 } 32 33 public static async Task Show(ulong titleId, string titleName) 34 { 35 ContentDialog contentDialog = new() 36 { 37 PrimaryButtonText = "", 38 SecondaryButtonText = "", 39 CloseButtonText = "", 40 Content = new ModManagerWindow(titleId), 41 Title = string.Format(LocaleManager.Instance[LocaleKeys.ModWindowTitle], titleName, titleId.ToString("X16")), 42 }; 43 44 Style bottomBorder = new(x => x.OfType<Grid>().Name("DialogSpace").Child().OfType<Border>()); 45 bottomBorder.Setters.Add(new Setter(IsVisibleProperty, false)); 46 47 contentDialog.Styles.Add(bottomBorder); 48 49 await contentDialog.ShowAsync(); 50 } 51 52 private void SaveAndClose(object sender, RoutedEventArgs e) 53 { 54 ViewModel.Save(); 55 ((ContentDialog)Parent).Hide(); 56 } 57 58 private void Close(object sender, RoutedEventArgs e) 59 { 60 ((ContentDialog)Parent).Hide(); 61 } 62 63 private async void DeleteMod(object sender, RoutedEventArgs e) 64 { 65 if (sender is Button button) 66 { 67 if (button.DataContext is ModModel model) 68 { 69 var result = await ContentDialogHelper.CreateConfirmationDialog( 70 LocaleManager.Instance[LocaleKeys.DialogWarning], 71 LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogModManagerDeletionWarningMessage, model.Name), 72 LocaleManager.Instance[LocaleKeys.InputDialogYes], 73 LocaleManager.Instance[LocaleKeys.InputDialogNo], 74 LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); 75 76 if (result == UserResult.Yes) 77 { 78 ViewModel.Delete(model); 79 } 80 } 81 } 82 } 83 84 private async void DeleteAll(object sender, RoutedEventArgs e) 85 { 86 var result = await ContentDialogHelper.CreateConfirmationDialog( 87 LocaleManager.Instance[LocaleKeys.DialogWarning], 88 LocaleManager.Instance[LocaleKeys.DialogModManagerDeletionAllWarningMessage], 89 LocaleManager.Instance[LocaleKeys.InputDialogYes], 90 LocaleManager.Instance[LocaleKeys.InputDialogNo], 91 LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); 92 93 if (result == UserResult.Yes) 94 { 95 ViewModel.DeleteAll(); 96 } 97 } 98 99 private void OpenLocation(object sender, RoutedEventArgs e) 100 { 101 if (sender is Button button) 102 { 103 if (button.DataContext is ModModel model) 104 { 105 OpenHelper.OpenFolder(model.Path); 106 } 107 } 108 } 109 110 private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 111 { 112 foreach (var content in e.AddedItems) 113 { 114 if (content is ModModel model) 115 { 116 var index = ViewModel.Mods.IndexOf(model); 117 118 if (index != -1) 119 { 120 ViewModel.Mods[index].Enabled = true; 121 } 122 } 123 } 124 125 foreach (var content in e.RemovedItems) 126 { 127 if (content is ModModel model) 128 { 129 var index = ViewModel.Mods.IndexOf(model); 130 131 if (index != -1) 132 { 133 ViewModel.Mods[index].Enabled = false; 134 } 135 } 136 } 137 } 138 } 139 }