SettingsWindow.axaml.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using FluentAvalonia.Core;
  2. using FluentAvalonia.UI.Controls;
  3. using Ryujinx.Ava.Common.Locale;
  4. using Ryujinx.Ava.UI.ViewModels;
  5. using Ryujinx.HLE.FileSystem;
  6. using System;
  7. using System.ComponentModel;
  8. namespace Ryujinx.Ava.UI.Windows
  9. {
  10. public partial class SettingsWindow : StyleableWindow
  11. {
  12. internal SettingsViewModel ViewModel { get; set; }
  13. public SettingsWindow(VirtualFileSystem virtualFileSystem, ContentManager contentManager)
  14. {
  15. Title = $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]}";
  16. ViewModel = new SettingsViewModel(virtualFileSystem, contentManager);
  17. DataContext = ViewModel;
  18. ViewModel.CloseWindow += Close;
  19. ViewModel.SaveSettingsEvent += SaveSettings;
  20. InitializeComponent();
  21. Load();
  22. }
  23. public SettingsWindow()
  24. {
  25. ViewModel = new SettingsViewModel();
  26. DataContext = ViewModel;
  27. InitializeComponent();
  28. Load();
  29. }
  30. public void SaveSettings()
  31. {
  32. InputPage.ControllerSettings?.SaveCurrentProfile();
  33. if (Owner is MainWindow window && ViewModel.DirectoryChanged)
  34. {
  35. window.ViewModel.LoadApplications();
  36. }
  37. }
  38. private void Load()
  39. {
  40. Pages.Children.Clear();
  41. NavPanel.SelectionChanged += NavPanelOnSelectionChanged;
  42. NavPanel.SelectedItem = NavPanel.MenuItems.ElementAt(0);
  43. }
  44. private void NavPanelOnSelectionChanged(object sender, NavigationViewSelectionChangedEventArgs e)
  45. {
  46. if (e.SelectedItem is NavigationViewItem navItem && navItem.Tag is not null)
  47. {
  48. switch (navItem.Tag.ToString())
  49. {
  50. case "UiPage":
  51. UiPage.ViewModel = ViewModel;
  52. NavPanel.Content = UiPage;
  53. break;
  54. case "InputPage":
  55. NavPanel.Content = InputPage;
  56. break;
  57. case "HotkeysPage":
  58. NavPanel.Content = HotkeysPage;
  59. break;
  60. case "SystemPage":
  61. SystemPage.ViewModel = ViewModel;
  62. NavPanel.Content = SystemPage;
  63. break;
  64. case "CpuPage":
  65. NavPanel.Content = CpuPage;
  66. break;
  67. case "GraphicsPage":
  68. NavPanel.Content = GraphicsPage;
  69. break;
  70. case "AudioPage":
  71. NavPanel.Content = AudioPage;
  72. break;
  73. case "NetworkPage":
  74. NavPanel.Content = NetworkPage;
  75. break;
  76. case "LoggingPage":
  77. NavPanel.Content = LoggingPage;
  78. break;
  79. default:
  80. throw new NotImplementedException();
  81. }
  82. }
  83. }
  84. protected override void OnClosing(CancelEventArgs e)
  85. {
  86. HotkeysPage.Dispose();
  87. InputPage.Dispose();
  88. base.OnClosing(e);
  89. }
  90. }
  91. }