diff options
Diffstat (limited to 'Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs')
| -rw-r--r-- | Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs | 210 |
1 files changed, 50 insertions, 160 deletions
diff --git a/Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs b/Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs index ae489b86..bdf7e94d 100644 --- a/Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs +++ b/Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs @@ -1,49 +1,29 @@ -using Avalonia.Controls; -using Avalonia.Controls.Primitives; -using Avalonia.Data; -using Avalonia.Data.Converters; -using Avalonia.Input; -using Avalonia.Interactivity; using FluentAvalonia.Core; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.UI.Controls; -using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.HLE.FileSystem; -using Ryujinx.Input; -using Ryujinx.Input.Assigner; using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using TimeZone = Ryujinx.Ava.UI.Models.TimeZone; +using System.ComponentModel; namespace Ryujinx.Ava.UI.Windows { public partial class SettingsWindow : StyleableWindow { - private ButtonKeyAssigner _currentAssigner; - internal SettingsViewModel ViewModel { get; set; } public SettingsWindow(VirtualFileSystem virtualFileSystem, ContentManager contentManager) { Title = $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]}"; - ViewModel = new SettingsViewModel(virtualFileSystem, contentManager, this); + ViewModel = new SettingsViewModel(virtualFileSystem, contentManager); DataContext = ViewModel; + ViewModel.CloseWindow += Close; + ViewModel.SaveSettingsEvent += SaveSettings; + InitializeComponent(); Load(); - - FuncMultiValueConverter<string, string> converter = new(parts => string.Format("{0} {1} {2}", parts.ToArray()).Trim()); - MultiBinding tzMultiBinding = new() { Converter = converter }; - tzMultiBinding.Bindings.Add(new Binding("UtcDifference")); - tzMultiBinding.Bindings.Add(new Binding("Location")); - tzMultiBinding.Bindings.Add(new Binding("Abbreviation")); - - TimeZoneBox.ValueMemberBinding = tzMultiBinding; } public SettingsWindow() @@ -55,159 +35,69 @@ namespace Ryujinx.Ava.UI.Windows Load(); } - private void Load() + public void SaveSettings() { - Pages.Children.Clear(); - NavPanel.SelectionChanged += NavPanelOnSelectionChanged; - NavPanel.SelectedItem = NavPanel.MenuItems.ElementAt(0); - } + InputPage.ControllerSettings?.SaveCurrentProfile(); - private void Button_Checked(object sender, RoutedEventArgs e) - { - if (sender is ToggleButton button) + if (Owner is MainWindow window && ViewModel.DirectoryChanged) { - if (_currentAssigner != null && button == _currentAssigner.ToggledButton) - { - return; - } - - if (_currentAssigner == null && (bool)button.IsChecked) - { - _currentAssigner = new ButtonKeyAssigner(button); - - FocusManager.Instance.Focus(this, NavigationMethod.Pointer); - - PointerPressed += MouseClick; - - IKeyboard keyboard = (IKeyboard)ViewModel.AvaloniaKeyboardDriver.GetGamepad(ViewModel.AvaloniaKeyboardDriver.GamepadsIds[0]); - IButtonAssigner assigner = new KeyboardKeyAssigner(keyboard); - - _currentAssigner.GetInputAndAssign(assigner); - } - else - { - if (_currentAssigner != null) - { - ToggleButton oldButton = _currentAssigner.ToggledButton; - - _currentAssigner.Cancel(); - _currentAssigner = null; - - button.IsChecked = false; - } - } + window.ViewModel.LoadApplications(); } } - private void Button_Unchecked(object sender, RoutedEventArgs e) - { - _currentAssigner?.Cancel(); - _currentAssigner = null; - } - - private void MouseClick(object sender, PointerPressedEventArgs e) + private void Load() { - bool shouldUnbind = false; - - if (e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed) - { - shouldUnbind = true; - } - - _currentAssigner?.Cancel(shouldUnbind); - - PointerPressed -= MouseClick; + Pages.Children.Clear(); + NavPanel.SelectionChanged += NavPanelOnSelectionChanged; + NavPanel.SelectedItem = NavPanel.MenuItems.ElementAt(0); } private void NavPanelOnSelectionChanged(object sender, NavigationViewSelectionChangedEventArgs e) { - if (e.SelectedItem is NavigationViewItem navitem) + if (e.SelectedItem is NavigationViewItem navItem && navItem.Tag is not null) { - NavPanel.Content = navitem.Tag.ToString() switch + switch (navItem.Tag.ToString()) { - "UiPage" => UiPage, - "InputPage" => InputPage, - "HotkeysPage" => HotkeysPage, - "SystemPage" => SystemPage, - "CpuPage" => CpuPage, - "GraphicsPage" => GraphicsPage, - "AudioPage" => AudioPage, - "NetworkPage" => NetworkPage, - "LoggingPage" => LoggingPage, - _ => throw new NotImplementedException() - }; - } - } - - private async void AddButton_OnClick(object sender, RoutedEventArgs e) - { - string path = PathBox.Text; - - if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && !ViewModel.GameDirectories.Contains(path)) - { - ViewModel.GameDirectories.Add(path); - ViewModel.DirectoryChanged = true; - } - else - { - path = await new OpenFolderDialog().ShowAsync(this); - - if (!string.IsNullOrWhiteSpace(path)) - { - ViewModel.GameDirectories.Add(path); - ViewModel.DirectoryChanged = true; + case "UiPage": + UiPage.ViewModel = ViewModel; + NavPanel.Content = UiPage; + break; + case "InputPage": + NavPanel.Content = InputPage; + break; + case "HotkeysPage": + NavPanel.Content = HotkeysPage; + break; + case "SystemPage": + SystemPage.ViewModel = ViewModel; + NavPanel.Content = SystemPage; + break; + case "CpuPage": + NavPanel.Content = CpuPage; + break; + case "GraphicsPage": + NavPanel.Content = GraphicsPage; + break; + case "AudioPage": + NavPanel.Content = AudioPage; + break; + case "NetworkPage": + NavPanel.Content = NetworkPage; + break; + case "LoggingPage": + NavPanel.Content = LoggingPage; + break; + default: + throw new NotImplementedException(); } } } - private void RemoveButton_OnClick(object sender, RoutedEventArgs e) + protected override void OnClosing(CancelEventArgs e) { - int oldIndex = GameList.SelectedIndex; - - foreach (string path in new List<string>(GameList.SelectedItems.Cast<string>())) - { - ViewModel.GameDirectories.Remove(path); - ViewModel.DirectoryChanged = true; - } - - if (GameList.ItemCount > 0) - { - GameList.SelectedIndex = oldIndex < GameList.ItemCount ? oldIndex : 0; - } - } - - private void TimeZoneBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) - { - if (e.AddedItems != null && e.AddedItems.Count > 0) - { - if (e.AddedItems[0] is TimeZone timeZone) - { - e.Handled = true; - - ViewModel.ValidateAndSetTimeZone(timeZone.Location); - } - } - } - - private void TimeZoneBox_OnTextChanged(object sender, EventArgs e) - { - if (sender is AutoCompleteBox box) - { - if (box.SelectedItem != null && box.SelectedItem is TimeZone timeZone) - { - ViewModel.ValidateAndSetTimeZone(timeZone.Location); - } - } - } - - protected override void OnClosed(EventArgs e) - { - ControllerSettings.Dispose(); - - _currentAssigner?.Cancel(); - _currentAssigner = null; - - base.OnClosed(e); + HotkeysPage.Dispose(); + InputPage.Dispose(); + base.OnClosing(e); } } }
\ No newline at end of file |
