ModManagerWindow.axaml.cs 4.5 KB

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