/ src / Ryujinx / UI / Windows / ModManagerWindow.axaml.cs
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  }