forked from Mirror/Ryujinx
Ava GUI: SettingsWindow
Refactor (#4177)
* Fix redundancies * Add back elses * Settings Refactor * Fix Disposal functions * Use `ReflectionBinding` instead of redundant funcs * Ac_K suggestions * Update Ryujinx.Ava/UI/ViewModels/SettingsViewModel.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Update locale keys * Update Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Update Ryujinx.Ava/UI/Windows/SettingsWindow.axaml.cs Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com> * Use block-scoped namespaces * Fix typo * Make `TimeZone` internal again Co-authored-by: Ac_K <Acoustik666@gmail.com> Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>
This commit is contained in:
parent
7f27aabbd0
commit
38519f3b9a
21 changed files with 1422 additions and 1097 deletions
|
@ -1,4 +1,3 @@
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Collections;
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
|
@ -8,8 +7,6 @@ using Ryujinx.Audio.Backends.OpenAL;
|
||||||
using Ryujinx.Audio.Backends.SDL2;
|
using Ryujinx.Audio.Backends.SDL2;
|
||||||
using Ryujinx.Audio.Backends.SoundIo;
|
using Ryujinx.Audio.Backends.SoundIo;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ava.Input;
|
|
||||||
using Ryujinx.Ava.UI.Controls;
|
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
|
@ -19,7 +16,6 @@ using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Graphics.Vulkan;
|
using Ryujinx.Graphics.Vulkan;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
|
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
|
||||||
using Ryujinx.Input;
|
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.Ui.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Configuration.System;
|
using Ryujinx.Ui.Common.Configuration.System;
|
||||||
using System;
|
using System;
|
||||||
|
@ -30,11 +26,10 @@ using TimeZone = Ryujinx.Ava.UI.Models.TimeZone;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.ViewModels
|
namespace Ryujinx.Ava.UI.ViewModels
|
||||||
{
|
{
|
||||||
internal class SettingsViewModel : BaseModel
|
public class SettingsViewModel : BaseModel
|
||||||
{
|
{
|
||||||
private readonly VirtualFileSystem _virtualFileSystem;
|
private readonly VirtualFileSystem _virtualFileSystem;
|
||||||
private readonly ContentManager _contentManager;
|
private readonly ContentManager _contentManager;
|
||||||
private readonly StyleableWindow _owner;
|
|
||||||
private TimeZoneContentManager _timeZoneContentManager;
|
private TimeZoneContentManager _timeZoneContentManager;
|
||||||
|
|
||||||
private readonly List<string> _validTzRegions;
|
private readonly List<string> _validTzRegions;
|
||||||
|
@ -44,10 +39,14 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
private int _graphicsBackendMultithreadingIndex;
|
private int _graphicsBackendMultithreadingIndex;
|
||||||
private float _volume;
|
private float _volume;
|
||||||
private bool _isVulkanAvailable = true;
|
private bool _isVulkanAvailable = true;
|
||||||
private bool _directoryChanged = false;
|
private bool _directoryChanged;
|
||||||
private List<string> _gpuIds = new List<string>();
|
private List<string> _gpuIds = new();
|
||||||
private KeyboardHotkeys _keyboardHotkeys;
|
private KeyboardHotkeys _keyboardHotkeys;
|
||||||
private int _graphicsBackendIndex;
|
private int _graphicsBackendIndex;
|
||||||
|
private string _customThemePath;
|
||||||
|
|
||||||
|
public event Action CloseWindow;
|
||||||
|
public event Action SaveSettingsEvent;
|
||||||
|
|
||||||
public int ResolutionScale
|
public int ResolutionScale
|
||||||
{
|
{
|
||||||
|
@ -67,19 +66,16 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
{
|
{
|
||||||
_graphicsBackendMultithreadingIndex = value;
|
_graphicsBackendMultithreadingIndex = value;
|
||||||
|
|
||||||
if (_owner != null)
|
if (_graphicsBackendMultithreadingIndex != (int)ConfigurationState.Instance.Graphics.BackendThreading.Value)
|
||||||
{
|
{
|
||||||
if (_graphicsBackendMultithreadingIndex != (int)ConfigurationState.Instance.Graphics.BackendThreading.Value)
|
Dispatcher.UIThread.Post(async () =>
|
||||||
{
|
{
|
||||||
Dispatcher.UIThread.Post(async () =>
|
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningMessage],
|
||||||
{
|
"",
|
||||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningMessage],
|
"",
|
||||||
"",
|
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
||||||
"",
|
LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningTitle]);
|
||||||
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
});
|
||||||
LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningTitle]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
|
@ -120,12 +116,12 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsMacOS
|
public bool IsMacOS
|
||||||
{
|
{
|
||||||
get => OperatingSystem.IsMacOS();
|
get => OperatingSystem.IsMacOS();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool EnableDiscordIntegration { get; set; }
|
public bool EnableDiscordIntegration { get; set; }
|
||||||
public bool CheckUpdatesOnStart { get; set; }
|
public bool CheckUpdatesOnStart { get; set; }
|
||||||
public bool ShowConfirmExit { get; set; }
|
public bool ShowConfirmExit { get; set; }
|
||||||
|
@ -160,7 +156,20 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
|
|
||||||
public string TimeZone { get; set; }
|
public string TimeZone { get; set; }
|
||||||
public string ShaderDumpPath { get; set; }
|
public string ShaderDumpPath { get; set; }
|
||||||
public string CustomThemePath { get; set; }
|
|
||||||
|
public string CustomThemePath
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _customThemePath;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_customThemePath = value;
|
||||||
|
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int Language { get; set; }
|
public int Language { get; set; }
|
||||||
public int Region { get; set; }
|
public int Region { get; set; }
|
||||||
|
@ -191,7 +200,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
{
|
{
|
||||||
_volume = value;
|
_volume = value;
|
||||||
|
|
||||||
ConfigurationState.Instance.System.AudioVolume.Value = (float)(_volume / 100);
|
ConfigurationState.Instance.System.AudioVolume.Value = _volume / 100;
|
||||||
|
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
|
@ -199,7 +208,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
|
|
||||||
public DateTimeOffset DateOffset { get; set; }
|
public DateTimeOffset DateOffset { get; set; }
|
||||||
public TimeSpan TimeOffset { get; set; }
|
public TimeSpan TimeOffset { get; set; }
|
||||||
public AvaloniaList<TimeZone> TimeZones { get; set; }
|
private AvaloniaList<TimeZone> TimeZones { get; set; }
|
||||||
public AvaloniaList<string> GameDirectories { get; set; }
|
public AvaloniaList<string> GameDirectories { get; set; }
|
||||||
public ObservableCollection<ComboBoxItem> AvailableGpus { get; set; }
|
public ObservableCollection<ComboBoxItem> AvailableGpus { get; set; }
|
||||||
|
|
||||||
|
@ -214,17 +223,13 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IGamepadDriver AvaloniaKeyboardDriver { get; }
|
public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this()
|
||||||
|
|
||||||
public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager, StyleableWindow owner) : this()
|
|
||||||
{
|
{
|
||||||
_virtualFileSystem = virtualFileSystem;
|
_virtualFileSystem = virtualFileSystem;
|
||||||
_contentManager = contentManager;
|
_contentManager = contentManager;
|
||||||
_owner = owner;
|
|
||||||
if (Program.PreviewerDetached)
|
if (Program.PreviewerDetached)
|
||||||
{
|
{
|
||||||
LoadTimeZones();
|
LoadTimeZones();
|
||||||
AvaloniaKeyboardDriver = new AvaloniaKeyboardDriver(owner);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,10 +256,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
IsSDL2Enabled = SDL2HardwareDeviceDriver.IsSupported;
|
IsSDL2Enabled = SDL2HardwareDeviceDriver.IsSupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe void LoadAvailableGpus()
|
private void LoadAvailableGpus()
|
||||||
{
|
{
|
||||||
_gpuIds = new List<string>();
|
_gpuIds = new List<string>();
|
||||||
List<string> names = new List<string>();
|
List<string> names = new();
|
||||||
var devices = VulkanRenderer.GetPhysicalDevices();
|
var devices = VulkanRenderer.GetPhysicalDevices();
|
||||||
|
|
||||||
if (devices.Length == 0)
|
if (devices.Length == 0)
|
||||||
|
@ -272,7 +277,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
AvailableGpus.Clear();
|
AvailableGpus.Clear();
|
||||||
AvailableGpus.AddRange(names.Select(x => new ComboBoxItem() { Content = x }));
|
AvailableGpus.AddRange(names.Select(x => new ComboBoxItem { Content = x }));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadTimeZones()
|
public void LoadTimeZones()
|
||||||
|
@ -302,25 +307,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void BrowseTheme()
|
|
||||||
{
|
|
||||||
var dialog = new OpenFileDialog()
|
|
||||||
{
|
|
||||||
Title = LocaleManager.Instance[LocaleKeys.SettingsSelectThemeFileDialogTitle],
|
|
||||||
AllowMultiple = false
|
|
||||||
};
|
|
||||||
|
|
||||||
dialog.Filters.Add(new FileDialogFilter() { Extensions = { "xaml" }, Name = LocaleManager.Instance[LocaleKeys.SettingsXamlThemeFile] });
|
|
||||||
|
|
||||||
var file = await dialog.ShowAsync(_owner);
|
|
||||||
|
|
||||||
if (file != null && file.Length > 0)
|
|
||||||
{
|
|
||||||
CustomThemePath = file[0];
|
|
||||||
OnPropertyChanged(nameof(CustomThemePath));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LoadCurrentConfiguration()
|
public void LoadCurrentConfiguration()
|
||||||
{
|
{
|
||||||
ConfigurationState config = ConfigurationState.Instance;
|
ConfigurationState config = ConfigurationState.Instance;
|
||||||
|
@ -477,16 +463,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
config.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
config.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
|
|
||||||
MainWindow.UpdateGraphicsConfig();
|
MainWindow.UpdateGraphicsConfig();
|
||||||
|
|
||||||
if (_owner is SettingsWindow owner)
|
SaveSettingsEvent?.Invoke();
|
||||||
{
|
|
||||||
owner.ControllerSettings?.SaveCurrentProfile();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_owner.Owner is MainWindow window && _directoryChanged)
|
|
||||||
{
|
|
||||||
window.ViewModel.LoadApplications();
|
|
||||||
}
|
|
||||||
|
|
||||||
_directoryChanged = false;
|
_directoryChanged = false;
|
||||||
}
|
}
|
||||||
|
@ -504,13 +482,13 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
public void OkButton()
|
public void OkButton()
|
||||||
{
|
{
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
_owner.Close();
|
CloseWindow?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CancelButton()
|
public void CancelButton()
|
||||||
{
|
{
|
||||||
RevertIfNotSaved();
|
RevertIfNotSaved();
|
||||||
_owner.Close();
|
CloseWindow?.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
81
Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml
Normal file
81
Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsAudioView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="AudioPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabAudio}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemAudioBackend}"
|
||||||
|
ToolTip.Tip="{locale:Locale AudioBackendTooltip}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding AudioBackend}"
|
||||||
|
Width="350"
|
||||||
|
HorizontalContentAlignment="Left">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendDummy}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem IsEnabled="{Binding IsOpenAlEnabled}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendOpenAL}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem IsEnabled="{Binding IsSoundIoEnabled}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendSoundIO}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem IsEnabled="{Binding IsSDL2Enabled}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendSDL2}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemAudioVolume}"
|
||||||
|
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
||||||
|
Width="250" />
|
||||||
|
<ui:NumberBox Value="{Binding Volume}"
|
||||||
|
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
||||||
|
Width="350"
|
||||||
|
SmallChange="1"
|
||||||
|
LargeChange="10"
|
||||||
|
SimpleNumberFormat="F0"
|
||||||
|
SpinButtonPlacementMode="Inline"
|
||||||
|
Minimum="0"
|
||||||
|
Maximum="100" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<Slider Value="{Binding Volume}"
|
||||||
|
Margin="250,0,0,0"
|
||||||
|
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
||||||
|
Minimum="0"
|
||||||
|
Maximum="100"
|
||||||
|
SmallChange="5"
|
||||||
|
TickFrequency="5"
|
||||||
|
IsSnapToTickEnabled="True"
|
||||||
|
LargeChange="10"
|
||||||
|
Width="350" />
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
12
Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml.cs
Normal file
12
Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsAudioView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsAudioView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
72
Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml
Normal file
72
Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsCPUView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="CpuPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabCpuCache}" />
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical">
|
||||||
|
<CheckBox IsChecked="{Binding EnablePptc}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemEnablePptc}"
|
||||||
|
ToolTip.Tip="{locale:Locale PptcToggleTooltip}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabCpuMemory}" />
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemMemoryManagerMode}"
|
||||||
|
ToolTip.Tip="{locale:Locale MemoryManagerTooltip}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding MemoryMode}"
|
||||||
|
ToolTip.Tip="{locale:Locale MemoryManagerTooltip}"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
Width="350">
|
||||||
|
<ComboBoxItem
|
||||||
|
ToolTip.Tip="{locale:Locale MemoryManagerSoftwareTooltip}">
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemMemoryManagerModeSoftware}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem
|
||||||
|
ToolTip.Tip="{locale:Locale MemoryManagerHostTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemMemoryManagerModeHost}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem
|
||||||
|
ToolTip.Tip="{locale:Locale MemoryManagerUnsafeTooltip}">
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemMemoryManagerModeHostUnchecked}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
12
Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml.cs
Normal file
12
Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsCPUView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsCPUView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
218
Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml
Normal file
218
Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsGraphicsView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="GraphicsPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsAPI}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Vertical" Spacing="10">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsBackend}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox Width="350"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
||||||
|
SelectedIndex="{Binding GraphicsBackendIndex}">
|
||||||
|
<ComboBoxItem IsVisible="{Binding IsVulkanAvailable}">
|
||||||
|
<TextBlock Text="Vulkan" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem IsEnabled="{Binding IsOpenGLAvailable}">
|
||||||
|
<TextBlock Text="OpenGL" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding IsVulkanSelected}">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsPreferredGpu}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox Width="350"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
||||||
|
SelectedIndex="{Binding PreferredGpuIndex}"
|
||||||
|
Items="{Binding AvailableGpus}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsFeatures}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Vertical" Spacing="10">
|
||||||
|
<StackPanel Orientation="Vertical">
|
||||||
|
<CheckBox IsChecked="{Binding EnableShaderCache}"
|
||||||
|
ToolTip.Tip="{locale:Locale ShaderCacheToggleTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsEnableShaderCache}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableTextureRecompression}"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsEnableTextureRecompressionTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsEnableTextureRecompression}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableMacroHLE}"
|
||||||
|
ToolTip.Tip="{locale:Locale SettingsEnableMacroHLETooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsEnableMacroHLE}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsResolutionScale}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding ResolutionScale}"
|
||||||
|
Width="350"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScaleCustom}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScaleNative}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScale2x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScale3x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScale4x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
<ui:NumberBox
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
ToolTip.Tip="{locale:Locale ResolutionScaleEntryTooltip}"
|
||||||
|
MinWidth="150"
|
||||||
|
SmallChange="0.1"
|
||||||
|
LargeChange="1"
|
||||||
|
SimpleNumberFormat="F2"
|
||||||
|
SpinButtonPlacementMode="Inline"
|
||||||
|
IsVisible="{Binding IsCustomResolutionScaleActive}"
|
||||||
|
Maximum="100"
|
||||||
|
Minimum="0.1"
|
||||||
|
Value="{Binding CustomResolutionScale}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale AnisotropyTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding MaxAnisotropy}"
|
||||||
|
Width="350"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale AnisotropyTooltip}">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsAnisotropicFilteringAuto}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering2x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering4x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering8x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering16x}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale AspectRatioTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsAspectRatio}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding AspectRatio}"
|
||||||
|
Width="350"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale AspectRatioTooltip}">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio4x3}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio16x9}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio16x10}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio21x9}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio32x9}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatioStretch}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale GraphicsBackendThreadingTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsBackendMultithreading}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox Width="350"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale GalThreadingTooltip}"
|
||||||
|
SelectedIndex="{Binding GraphicsBackendMultithreadingIndex}">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale CommonAuto}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale CommonOff}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale CommonOn}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsDeveloperOptions}" />
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale ShaderDumpPathTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGraphicsShaderDumpPath}"
|
||||||
|
Width="250" />
|
||||||
|
<TextBox Text="{Binding ShaderDumpPath}"
|
||||||
|
Width="350"
|
||||||
|
ToolTip.Tip="{locale:Locale ShaderDumpPathTooltip}" />
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
12
Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml.cs
Normal file
12
Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsGraphicsView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsGraphicsView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
104
Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml
Normal file
104
Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsHotkeysView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel"
|
||||||
|
Focusable="True">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<UserControl.Resources>
|
||||||
|
<helpers:KeyValueConverter x:Key="Key" />
|
||||||
|
</UserControl.Resources>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="HotkeysPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel Margin="10" Orientation="Vertical" Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabHotkeysHotkeys}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysToggleVsyncHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.ToggleVsync, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysScreenshotHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.Screenshot, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysShowUiHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.ShowUi, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysPauseHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.Pause, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysToggleMuteHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.ToggleMute, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysResScaleUpHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.ResScaleUp, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysResScaleDownHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.ResScaleDown, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysVolumeUpHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.VolumeUp, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysVolumeDownHotkey}" Width="230" />
|
||||||
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding KeyboardHotkeys.VolumeDown, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
|
TextAlignment="Center" />
|
||||||
|
</ToggleButton>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
81
Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml.cs
Normal file
81
Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml.cs
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Controls.Primitives;
|
||||||
|
using Avalonia.Input;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
using Ryujinx.Ava.Input;
|
||||||
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
|
using Ryujinx.Input;
|
||||||
|
using Ryujinx.Input.Assigner;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsHotkeysView : UserControl
|
||||||
|
{
|
||||||
|
private ButtonKeyAssigner _currentAssigner;
|
||||||
|
private IGamepadDriver AvaloniaKeyboardDriver;
|
||||||
|
|
||||||
|
public SettingsHotkeysView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
AvaloniaKeyboardDriver = new AvaloniaKeyboardDriver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MouseClick(object sender, PointerPressedEventArgs e)
|
||||||
|
{
|
||||||
|
bool shouldUnbind = e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed;
|
||||||
|
|
||||||
|
_currentAssigner?.Cancel(shouldUnbind);
|
||||||
|
|
||||||
|
PointerPressed -= MouseClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Checked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is ToggleButton button)
|
||||||
|
{
|
||||||
|
if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_currentAssigner == null && button.IsChecked != null && (bool)button.IsChecked)
|
||||||
|
{
|
||||||
|
_currentAssigner = new ButtonKeyAssigner(button);
|
||||||
|
|
||||||
|
FocusManager.Instance?.Focus(this, NavigationMethod.Pointer);
|
||||||
|
|
||||||
|
PointerPressed += MouseClick;
|
||||||
|
|
||||||
|
var keyboard = (IKeyboard)AvaloniaKeyboardDriver.GetGamepad(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Unchecked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
_currentAssigner?.Cancel();
|
||||||
|
_currentAssigner = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_currentAssigner?.Cancel();
|
||||||
|
_currentAssigner = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
46
Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml
Normal file
46
Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsInputView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="InputPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel Margin="4" Orientation="Vertical">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<CheckBox Margin="5,0"
|
||||||
|
ToolTip.Tip="{locale:Locale DockModeToggleTooltip}"
|
||||||
|
IsChecked="{Binding EnableDockedMode}">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabInputEnableDockedMode}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox Margin="5,0"
|
||||||
|
ToolTip.Tip="{locale:Locale DirectKeyboardTooltip}"
|
||||||
|
IsChecked="{Binding EnableKeyboard}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabInputDirectKeyboardAccess}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox Margin="5,0"
|
||||||
|
ToolTip.Tip="{locale:Locale DirectMouseTooltip}"
|
||||||
|
IsChecked="{Binding EnableMouse}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabInputDirectMouseAccess}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<window:ControllerSettingsWindow Name="ControllerSettings" Margin="0" MinHeight="600" />
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
17
Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml.cs
Normal file
17
Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsInputView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsInputView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
ControllerSettings.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
118
Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml
Normal file
118
Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsLoggingView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="LoggingPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabLoggingLogging}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Vertical">
|
||||||
|
<CheckBox IsChecked="{Binding EnableFileLog}"
|
||||||
|
ToolTip.Tip="{locale:Locale FileLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableLoggingToFile}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableStub}"
|
||||||
|
ToolTip.Tip="{locale:Locale StubLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableStubLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableInfo}"
|
||||||
|
ToolTip.Tip="{locale:Locale InfoLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableInfoLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableWarn}"
|
||||||
|
ToolTip.Tip="{locale:Locale WarnLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableWarningLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableError}"
|
||||||
|
ToolTip.Tip="{locale:Locale ErrorLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableErrorLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableTrace}"
|
||||||
|
ToolTip.Tip="{locale:Locale TraceLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableTraceLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableGuest}"
|
||||||
|
ToolTip.Tip="{locale:Locale GuestLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableGuestLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabLoggingDeveloperOptions}" />
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<StackPanel Orientation="Vertical">
|
||||||
|
<CheckBox IsChecked="{Binding EnableDebug}"
|
||||||
|
ToolTip.Tip="{locale:Locale DebugLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableDebugLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableFsAccessLog}"
|
||||||
|
ToolTip.Tip="{locale:Locale FileAccessLogTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableFsAccessLogs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" VerticalAlignment="Stretch">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale FSAccessLogModeTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabLoggingFsGlobalAccessLogMode}"
|
||||||
|
Width="285" />
|
||||||
|
<ui:NumberBox
|
||||||
|
Maximum="3"
|
||||||
|
Minimum="0"
|
||||||
|
Width="150"
|
||||||
|
SpinButtonPlacementMode="Inline"
|
||||||
|
SmallChange="1"
|
||||||
|
LargeChange="1"
|
||||||
|
Value="{Binding FsGlobalAccessLogMode}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="0,10,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevel}"
|
||||||
|
ToolTip.Tip="{locale:Locale OpenGlLogLevel}"
|
||||||
|
Width="285" />
|
||||||
|
<ComboBox SelectedIndex="{Binding OpenglDebugLevel}"
|
||||||
|
Width="150"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
ToolTip.Tip="{locale:Locale OpenGlLogLevel}">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelNone}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelError}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelPerformance}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelAll}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
12
Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml.cs
Normal file
12
Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsLoggingView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsLoggingView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml
Normal file
35
Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsNetworkView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="NetworkPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabNetworkConnection}" />
|
||||||
|
<CheckBox Margin="10,0,0,0" IsChecked="{Binding EnableInternetAccess}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemEnableInternetAccess}"
|
||||||
|
ToolTip.Tip="{locale:Locale EnableInternetAccessTooltip}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
12
Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml.cs
Normal file
12
Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsNetworkView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsNetworkView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
195
Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml
Normal file
195
Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsSystemView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="SystemPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabSystemCore}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Vertical">
|
||||||
|
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemRegion}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding Region}"
|
||||||
|
ToolTip.Tip="{locale:Locale RegionTooltip}"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
Width="350">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionJapan}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionUSA}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionEurope}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionAustralia}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionChina}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionKorea}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionTaiwan}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguage}"
|
||||||
|
ToolTip.Tip="{locale:Locale LanguageTooltip}"
|
||||||
|
Width="250" />
|
||||||
|
<ComboBox SelectedIndex="{Binding Language}"
|
||||||
|
ToolTip.Tip="{locale:Locale LanguageTooltip}"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
Width="350">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageJapanese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageAmericanEnglish}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageFrench}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageGerman}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageItalian}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageSpanish}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageChinese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageKorean}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageDutch}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguagePortuguese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageRussian}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageTaiwanese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageBritishEnglish}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageCanadianFrench}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageLatinAmericanSpanish}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageSimplifiedChinese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageTraditionalChinese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemLanguageBrazilianPortuguese}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemTimeZone}"
|
||||||
|
ToolTip.Tip="{locale:Locale TimezoneTooltip}"
|
||||||
|
Width="250" />
|
||||||
|
<AutoCompleteBox
|
||||||
|
Name="TimeZoneBox"
|
||||||
|
Width="350"
|
||||||
|
MaxDropDownHeight="500"
|
||||||
|
FilterMode="Contains"
|
||||||
|
Items="{Binding TimeZones}"
|
||||||
|
SelectionChanged="TimeZoneBox_OnSelectionChanged"
|
||||||
|
Text="{Binding Path=TimeZone, Mode=OneWay}"
|
||||||
|
TextChanged="TimeZoneBox_OnTextChanged"
|
||||||
|
ToolTip.Tip="{locale:Locale TimezoneTooltip}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabSystemSystemTime}"
|
||||||
|
ToolTip.Tip="{locale:Locale TimeTooltip}"
|
||||||
|
Width="250"/>
|
||||||
|
<DatePicker VerticalAlignment="Center" SelectedDate="{Binding DateOffset}"
|
||||||
|
ToolTip.Tip="{locale:Locale TimeTooltip}"
|
||||||
|
Width="350" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Margin="250,0,0,10" Orientation="Horizontal">
|
||||||
|
<TimePicker
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ClockIdentifier="24HourClock"
|
||||||
|
SelectedTime="{Binding TimeOffset}"
|
||||||
|
Width="350"
|
||||||
|
ToolTip.Tip="{locale:Locale TimeTooltip}" />
|
||||||
|
</StackPanel>
|
||||||
|
<CheckBox IsChecked="{Binding EnableVsync}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemEnableVsync}"
|
||||||
|
ToolTip.Tip="{locale:Locale VSyncToggleTooltip}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding EnableFsIntegrityChecks}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemEnableFsIntegrityChecks}"
|
||||||
|
ToolTip.Tip="{locale:Locale FsIntegrityToggleTooltip}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabSystemHacks}" />
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemHacksNote}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical">
|
||||||
|
<CheckBox IsChecked="{Binding ExpandDramSize}"
|
||||||
|
ToolTip.Tip="{locale:Locale DRamTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemExpandDramSize}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding IgnoreMissingServices}"
|
||||||
|
ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabSystemIgnoreMissingServices}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
52
Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs
Normal file
52
Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Data;
|
||||||
|
using Avalonia.Data.Converters;
|
||||||
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using TimeZone = Ryujinx.Ava.UI.Models.TimeZone;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsSystemView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsViewModel ViewModel;
|
||||||
|
|
||||||
|
public SettingsSystemView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 && box.SelectedItem is TimeZone timeZone)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
ViewModel.ValidateAndSetTimeZone(timeZone.Location);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
156
Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml
Normal file
156
Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsUIView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:DataType="viewModels:SettingsViewModel">
|
||||||
|
<Design.DataContext>
|
||||||
|
<viewModels:SettingsViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<ScrollViewer
|
||||||
|
Name="UiPage"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<Border Classes="settings">
|
||||||
|
<StackPanel
|
||||||
|
Margin="10"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGeneralGeneral}" />
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Vertical">
|
||||||
|
<CheckBox IsChecked="{Binding EnableDiscordIntegration}">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
ToolTip.Tip="{locale:Locale ToggleDiscordTooltip}"
|
||||||
|
Text="{locale:Locale SettingsTabGeneralEnableDiscordRichPresence}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding CheckUpdatesOnStart}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGeneralCheckUpdatesOnLaunch}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding ShowConfirmExit}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGeneralShowConfirmExitDialog}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding HideCursorOnIdle}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGeneralHideCursorOnIdle}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGeneralGameDirectories}" />
|
||||||
|
<StackPanel
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="10">
|
||||||
|
<ListBox
|
||||||
|
Name="GameList"
|
||||||
|
MinHeight="230"
|
||||||
|
Items="{Binding GameDirectories}">
|
||||||
|
<ListBox.Styles>
|
||||||
|
<Style Selector="ListBoxItem">
|
||||||
|
<Setter Property="Padding" Value="10" />
|
||||||
|
<Setter Property="Background" Value="{DynamicResource ListBoxBackground}" />
|
||||||
|
</Style>
|
||||||
|
</ListBox.Styles>
|
||||||
|
</ListBox>
|
||||||
|
<Grid HorizontalAlignment="Stretch">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBox
|
||||||
|
Name="PathBox"
|
||||||
|
Margin="0"
|
||||||
|
ToolTip.Tip="{locale:Locale AddGameDirBoxTooltip}"
|
||||||
|
VerticalAlignment="Stretch" />
|
||||||
|
<Button
|
||||||
|
Name="AddButton"
|
||||||
|
Grid.Column="1"
|
||||||
|
MinWidth="90"
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
ToolTip.Tip="{locale:Locale AddGameDirTooltip}"
|
||||||
|
Click="AddButton_OnClick">
|
||||||
|
<TextBlock HorizontalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabGeneralAdd}" />
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
Name="RemoveButton"
|
||||||
|
Grid.Column="2"
|
||||||
|
MinWidth="90"
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
ToolTip.Tip="{locale:Locale RemoveGameDirTooltip}"
|
||||||
|
Click="RemoveButton_OnClick">
|
||||||
|
<TextBlock HorizontalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabGeneralRemove}" />
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<Separator Height="1" />
|
||||||
|
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGeneralTheme}" />
|
||||||
|
<Grid Margin="10,0,0,0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition />
|
||||||
|
<RowDefinition />
|
||||||
|
<RowDefinition />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<CheckBox
|
||||||
|
IsChecked="{Binding EnableCustomTheme}"
|
||||||
|
ToolTip.Tip="{locale:Locale CustomThemeCheckTooltip}">
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGeneralThemeEnableCustomTheme}" />
|
||||||
|
</CheckBox>
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="1"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Margin="0,10,0,0"
|
||||||
|
Text="{locale:Locale SettingsTabGeneralThemeCustomTheme}"
|
||||||
|
ToolTip.Tip="{locale:Locale CustomThemePathTooltip}" />
|
||||||
|
<TextBox
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="0,10,0,0"
|
||||||
|
Text="{Binding CustomThemePath}" />
|
||||||
|
<Button
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="10,10,0,0"
|
||||||
|
Click="BrowseTheme"
|
||||||
|
ToolTip.Tip="{locale:Locale CustomThemeBrowseTooltip}"
|
||||||
|
Content="{locale:Locale ButtonBrowse}" />
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="2"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Margin="0,10,0,0"
|
||||||
|
Text="{locale:Locale SettingsTabGeneralThemeBaseStyle}" />
|
||||||
|
<ComboBox
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="2"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Margin="0,10,0,0"
|
||||||
|
MinWidth="100"
|
||||||
|
SelectedIndex="{Binding BaseStyleIndex}">
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGeneralThemeBaseStyleLight}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
<ComboBoxItem>
|
||||||
|
<TextBlock Text="{locale:Locale SettingsTabGeneralThemeBaseStyleDark}" />
|
||||||
|
</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
82
Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml.cs
Normal file
82
Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml.cs
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
using Ryujinx.Ava.Common.Locale;
|
||||||
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Views.Settings
|
||||||
|
{
|
||||||
|
public partial class SettingsUIView : UserControl
|
||||||
|
{
|
||||||
|
public SettingsViewModel ViewModel;
|
||||||
|
|
||||||
|
public SettingsUIView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
{
|
||||||
|
if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
|
{
|
||||||
|
path = await new OpenFolderDialog().ShowAsync(desktop.MainWindow);
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(path))
|
||||||
|
{
|
||||||
|
ViewModel.GameDirectories.Add(path);
|
||||||
|
ViewModel.DirectoryChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RemoveButton_OnClick(object sender, RoutedEventArgs 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void BrowseTheme(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var dialog = new OpenFileDialog()
|
||||||
|
{
|
||||||
|
Title = LocaleManager.Instance[LocaleKeys.SettingsSelectThemeFileDialogTitle],
|
||||||
|
AllowMultiple = false
|
||||||
|
};
|
||||||
|
|
||||||
|
dialog.Filters.Add(new FileDialogFilter() { Extensions = { "xaml" }, Name = LocaleManager.Instance[LocaleKeys.SettingsXamlThemeFile] });
|
||||||
|
|
||||||
|
if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
|
{
|
||||||
|
var file = await dialog.ShowAsync(desktop.MainWindow);
|
||||||
|
|
||||||
|
if (file != null && file.Length > 0)
|
||||||
|
{
|
||||||
|
ViewModel.CustomThemePath = file[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,13 +6,12 @@
|
||||||
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
|
||||||
xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
|
xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
|
||||||
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
xmlns:settings="clr-namespace:Ryujinx.Ava.UI.Views.Settings"
|
||||||
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
||||||
Width="1100"
|
Width="1100"
|
||||||
Height="768"
|
Height="768"
|
||||||
d:DesignWidth="800"
|
|
||||||
d:DesignHeight="950"
|
|
||||||
MinWidth="800"
|
MinWidth="800"
|
||||||
MinHeight="480"
|
MinHeight="480"
|
||||||
WindowStartupLocation="CenterOwner"
|
WindowStartupLocation="CenterOwner"
|
||||||
|
@ -23,9 +22,6 @@
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<viewModels:SettingsViewModel />
|
<viewModels:SettingsViewModel />
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
<Window.Resources>
|
|
||||||
<helpers:KeyValueConverter x:Key="Key" />
|
|
||||||
</Window.Resources>
|
|
||||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="600">
|
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="600">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
|
@ -38,871 +34,15 @@
|
||||||
IsVisible="False"
|
IsVisible="False"
|
||||||
KeyboardNavigation.IsTabStop="False"/>
|
KeyboardNavigation.IsTabStop="False"/>
|
||||||
<Grid Name="Pages" IsVisible="False" Grid.Row="2">
|
<Grid Name="Pages" IsVisible="False" Grid.Row="2">
|
||||||
<ScrollViewer Name="UiPage"
|
<settings:SettingsUIView Name="UiPage" />
|
||||||
Margin="0,0,2,0"
|
<settings:SettingsInputView Name="InputPage" />
|
||||||
HorizontalAlignment="Stretch"
|
<settings:SettingsHotkeysView Name="HotkeysPage" />
|
||||||
VerticalAlignment="Stretch"
|
<settings:SettingsSystemView Name="SystemPage" />
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
<settings:SettingsCPUView Name="CpuPage" />
|
||||||
VerticalScrollBarVisibility="Auto">
|
<settings:SettingsGraphicsView Name="GraphicsPage" />
|
||||||
<Border Classes="settings">
|
<settings:SettingsAudioView Name="AudioPage" />
|
||||||
<StackPanel
|
<settings:SettingsNetworkView Name="NetworkPage" />
|
||||||
Margin="10,5"
|
<settings:SettingsLoggingView Name="LoggingPage" />
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGeneralGeneral}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding EnableDiscordIntegration}">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale ToggleDiscordTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGeneralEnableDiscordRichPresence}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding CheckUpdatesOnStart}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGeneralCheckUpdatesOnLaunch}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding ShowConfirmExit}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGeneralShowConfirmExitDialog}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding HideCursorOnIdle}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGeneralHideCursorOnIdle}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGeneralGameDirectories}" />
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<ListBox
|
|
||||||
Name="GameList"
|
|
||||||
MinHeight="250"
|
|
||||||
Items="{Binding GameDirectories}" />
|
|
||||||
<Grid HorizontalAlignment="Stretch">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*" />
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<TextBox
|
|
||||||
Name="PathBox"
|
|
||||||
Margin="0"
|
|
||||||
ToolTip.Tip="{locale:Locale AddGameDirBoxTooltip}"
|
|
||||||
VerticalAlignment="Stretch" />
|
|
||||||
<Button
|
|
||||||
Name="AddButton"
|
|
||||||
Grid.Column="1"
|
|
||||||
MinWidth="90"
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
ToolTip.Tip="{locale:Locale AddGameDirTooltip}"
|
|
||||||
Click="AddButton_OnClick">
|
|
||||||
<TextBlock HorizontalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabGeneralAdd}" />
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
Name="RemoveButton"
|
|
||||||
Grid.Column="2"
|
|
||||||
MinWidth="90"
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
ToolTip.Tip="{locale:Locale RemoveGameDirTooltip}"
|
|
||||||
Click="RemoveButton_OnClick">
|
|
||||||
<TextBlock HorizontalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabGeneralRemove}" />
|
|
||||||
</Button>
|
|
||||||
</Grid>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGeneralTheme}" />
|
|
||||||
<Grid Margin="10,0,0,0">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition />
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition />
|
|
||||||
<RowDefinition />
|
|
||||||
<RowDefinition />
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<CheckBox IsChecked="{Binding EnableCustomTheme}"
|
|
||||||
ToolTip.Tip="{locale:Locale CustomThemeCheckTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGeneralThemeEnableCustomTheme}" />
|
|
||||||
</CheckBox>
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Margin="0,10,0,0"
|
|
||||||
Grid.Row="1"
|
|
||||||
Text="{locale:Locale SettingsTabGeneralThemeCustomTheme}"
|
|
||||||
ToolTip.Tip="{locale:Locale CustomThemePathTooltip}" />
|
|
||||||
<TextBox Margin="0,10,0,0"
|
|
||||||
Grid.Row="1"
|
|
||||||
Grid.Column="1"
|
|
||||||
Text="{Binding CustomThemePath}" />
|
|
||||||
<Button Grid.Row="1"
|
|
||||||
Grid.Column="2"
|
|
||||||
Margin="10,10,0,0"
|
|
||||||
Command="{ReflectionBinding BrowseTheme}"
|
|
||||||
ToolTip.Tip="{locale:Locale CustomThemeBrowseTooltip}"
|
|
||||||
Content="{locale:Locale ButtonBrowse}" />
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Margin="0,10,0,0"
|
|
||||||
Grid.Row="2"
|
|
||||||
Text="{locale:Locale SettingsTabGeneralThemeBaseStyle}" />
|
|
||||||
<ComboBox VerticalAlignment="Center"
|
|
||||||
Margin="0,10,0,0"
|
|
||||||
Grid.Column="1"
|
|
||||||
Grid.Row="2"
|
|
||||||
MinWidth="100"
|
|
||||||
SelectedIndex="{Binding BaseStyleIndex}">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGeneralThemeBaseStyleLight}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGeneralThemeBaseStyleDark}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</Grid>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer Name="InputPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
Padding="0,0,2,0"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel Margin="4" Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Margin="5,0"
|
|
||||||
ToolTip.Tip="{locale:Locale DockModeToggleTooltip}"
|
|
||||||
IsChecked="{Binding EnableDockedMode}">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabInputEnableDockedMode}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox Margin="5,0"
|
|
||||||
ToolTip.Tip="{locale:Locale DirectKeyboardTooltip}"
|
|
||||||
IsChecked="{Binding EnableKeyboard}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabInputDirectKeyboardAccess}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox Margin="5,0"
|
|
||||||
ToolTip.Tip="{locale:Locale DirectMouseTooltip}"
|
|
||||||
IsChecked="{Binding EnableMouse}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabInputDirectMouseAccess}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<window:ControllerSettingsWindow Name="ControllerSettings" Margin="0,0,0,0" MinHeight="600" />
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer Name="HotkeysPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel Margin="10,5" Orientation="Vertical" Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabHotkeysHotkeys}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysToggleVsyncHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.ToggleVsync, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysScreenshotHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.Screenshot, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysShowUiHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.ShowUi, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysPauseHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.Pause, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysToggleMuteHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.ToggleMute, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysResScaleUpHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.ResScaleUp, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysResScaleDownHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.ResScaleDown, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysVolumeUpHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.VolumeUp, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysVolumeDownHotkey}" Width="230" />
|
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
|
||||||
<TextBlock
|
|
||||||
Text="{Binding KeyboardHotkeys.VolumeDown, Mode=TwoWay, Converter={StaticResource Key}}"
|
|
||||||
TextAlignment="Center" />
|
|
||||||
</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer Name="SystemPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabSystemCore}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical">
|
|
||||||
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemRegion}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding Region}"
|
|
||||||
ToolTip.Tip="{locale:Locale RegionTooltip}"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
Width="350">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionJapan}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionUSA}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionEurope}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionAustralia}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionChina}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionKorea}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemRegionTaiwan}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguage}"
|
|
||||||
ToolTip.Tip="{locale:Locale LanguageTooltip}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding Language}"
|
|
||||||
ToolTip.Tip="{locale:Locale LanguageTooltip}"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
Width="350">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageJapanese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageAmericanEnglish}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageFrench}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageGerman}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageItalian}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageSpanish}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageChinese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageKorean}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageDutch}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguagePortuguese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageRussian}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemSystemLanguageTaiwanese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageBritishEnglish}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageCanadianFrench}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageLatinAmericanSpanish}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageSimplifiedChinese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageTraditionalChinese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemLanguageBrazilianPortuguese}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemTimeZone}"
|
|
||||||
ToolTip.Tip="{locale:Locale TimezoneTooltip}"
|
|
||||||
Width="250" />
|
|
||||||
<AutoCompleteBox
|
|
||||||
Name="TimeZoneBox"
|
|
||||||
Width="350"
|
|
||||||
MaxDropDownHeight="500"
|
|
||||||
FilterMode="Contains"
|
|
||||||
Items="{Binding TimeZones}"
|
|
||||||
SelectionChanged="TimeZoneBox_OnSelectionChanged"
|
|
||||||
Text="{Binding Path=TimeZone, Mode=OneWay}"
|
|
||||||
TextChanged="TimeZoneBox_OnTextChanged"
|
|
||||||
ValueMemberBinding="{ReflectionBinding TzMultiBinding}"
|
|
||||||
ToolTip.Tip="{locale:Locale TimezoneTooltip}" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="0,0,0,10" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemSystemTime}"
|
|
||||||
ToolTip.Tip="{locale:Locale TimeTooltip}"
|
|
||||||
Width="250"/>
|
|
||||||
<DatePicker VerticalAlignment="Center" SelectedDate="{Binding DateOffset}"
|
|
||||||
ToolTip.Tip="{locale:Locale TimeTooltip}"
|
|
||||||
Width="350" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="250,0,0,10" Orientation="Horizontal">
|
|
||||||
<TimePicker
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
ClockIdentifier="24HourClock"
|
|
||||||
SelectedTime="{Binding TimeOffset}"
|
|
||||||
Width="350"
|
|
||||||
ToolTip.Tip="{locale:Locale TimeTooltip}" />
|
|
||||||
</StackPanel>
|
|
||||||
<CheckBox IsChecked="{Binding EnableVsync}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnableVsync}"
|
|
||||||
ToolTip.Tip="{locale:Locale VSyncToggleTooltip}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableFsIntegrityChecks}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnableFsIntegrityChecks}"
|
|
||||||
ToolTip.Tip="{locale:Locale FsIntegrityToggleTooltip}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabSystemHacks}" />
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemHacksNote}" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding ExpandDramSize}"
|
|
||||||
ToolTip.Tip="{locale:Locale DRamTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemExpandDramSize}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding IgnoreMissingServices}"
|
|
||||||
ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemIgnoreMissingServices}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer
|
|
||||||
Name="CpuPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabCpuCache}" />
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding EnablePptc}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnablePptc}"
|
|
||||||
ToolTip.Tip="{locale:Locale PptcToggleTooltip}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabCpuMemory}" />
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemMemoryManagerMode}"
|
|
||||||
ToolTip.Tip="{locale:Locale MemoryManagerTooltip}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding MemoryMode}"
|
|
||||||
ToolTip.Tip="{locale:Locale MemoryManagerTooltip}"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
Width="350">
|
|
||||||
<ComboBoxItem
|
|
||||||
ToolTip.Tip="{locale:Locale MemoryManagerSoftwareTooltip}">
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemMemoryManagerModeSoftware}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem
|
|
||||||
ToolTip.Tip="{locale:Locale MemoryManagerHostTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemMemoryManagerModeHost}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem
|
|
||||||
ToolTip.Tip="{locale:Locale MemoryManagerUnsafeTooltip}">
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabSystemMemoryManagerModeHostUnchecked}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer
|
|
||||||
Name="GraphicsPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsAPI}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical" Spacing="10">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsBackend}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox Width="350"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
|
||||||
SelectedIndex="{Binding GraphicsBackendIndex}">
|
|
||||||
<ComboBoxItem IsVisible="{Binding IsVulkanAvailable}">
|
|
||||||
<TextBlock Text="Vulkan" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem IsEnabled="{Binding IsOpenGLAvailable}">
|
|
||||||
<TextBlock Text="OpenGL" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" IsVisible="{Binding IsVulkanSelected}">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsPreferredGpu}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox Width="350"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
|
||||||
SelectedIndex="{Binding PreferredGpuIndex}"
|
|
||||||
Items="{Binding AvailableGpus}"/>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsFeatures}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical" Spacing="10">
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding EnableShaderCache}"
|
|
||||||
ToolTip.Tip="{locale:Locale ShaderCacheToggleTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsEnableShaderCache}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableTextureRecompression}"
|
|
||||||
ToolTip.Tip="{locale:Locale SettingsEnableTextureRecompressionTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsEnableTextureRecompression}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableMacroHLE}"
|
|
||||||
ToolTip.Tip="{locale:Locale SettingsEnableMacroHLETooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsEnableMacroHLE}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsResolutionScale}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding ResolutionScale}"
|
|
||||||
Width="350"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScaleCustom}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScaleNative}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScale2x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScale3x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsResolutionScale4x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
<ui:NumberBox
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
ToolTip.Tip="{locale:Locale ResolutionScaleEntryTooltip}"
|
|
||||||
MinWidth="150"
|
|
||||||
SmallChange="0.1"
|
|
||||||
LargeChange="1"
|
|
||||||
SimpleNumberFormat="F2"
|
|
||||||
SpinButtonPlacementMode="Inline"
|
|
||||||
IsVisible="{Binding IsCustomResolutionScaleActive}"
|
|
||||||
Maximum="100"
|
|
||||||
Minimum="0.1"
|
|
||||||
Value="{Binding CustomResolutionScale}" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale AnisotropyTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding MaxAnisotropy}"
|
|
||||||
Width="350"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale AnisotropyTooltip}">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsAnisotropicFilteringAuto}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering2x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering4x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering8x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering16x}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale AspectRatioTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsAspectRatio}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding AspectRatio}"
|
|
||||||
Width="350"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale AspectRatioTooltip}">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio4x3}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio16x9}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio16x10}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio21x9}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatio32x9}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsAspectRatioStretch}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale GraphicsBackendThreadingTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsBackendMultithreading}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox Width="350"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale GalThreadingTooltip}"
|
|
||||||
SelectedIndex="{Binding GraphicsBackendMultithreadingIndex}">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale CommonAuto}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale CommonOff}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale CommonOn}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsDeveloperOptions}" />
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale ShaderDumpPathTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabGraphicsShaderDumpPath}"
|
|
||||||
Width="250" />
|
|
||||||
<TextBox Text="{Binding ShaderDumpPath}"
|
|
||||||
Width="350"
|
|
||||||
ToolTip.Tip="{locale:Locale ShaderDumpPathTooltip}" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer
|
|
||||||
Name="AudioPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabAudio}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemAudioBackend}"
|
|
||||||
ToolTip.Tip="{locale:Locale AudioBackendTooltip}"
|
|
||||||
Width="250" />
|
|
||||||
<ComboBox SelectedIndex="{Binding AudioBackend}"
|
|
||||||
Width="350"
|
|
||||||
HorizontalContentAlignment="Left">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendDummy}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem IsEnabled="{Binding IsOpenAlEnabled}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendOpenAL}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem IsEnabled="{Binding IsSoundIoEnabled}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendSoundIO}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem IsEnabled="{Binding IsSDL2Enabled}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemAudioBackendSDL2}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabSystemAudioVolume}"
|
|
||||||
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
|
||||||
Width="250" />
|
|
||||||
<ui:NumberBox Value="{Binding Volume}"
|
|
||||||
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
|
||||||
Width="350"
|
|
||||||
SmallChange="1"
|
|
||||||
LargeChange="10"
|
|
||||||
SimpleNumberFormat="F0"
|
|
||||||
SpinButtonPlacementMode="Inline"
|
|
||||||
Minimum="0"
|
|
||||||
Maximum="100" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
|
||||||
<Slider Value="{Binding Volume}"
|
|
||||||
Margin="250,0,0,0"
|
|
||||||
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
|
||||||
Minimum="0"
|
|
||||||
Maximum="100"
|
|
||||||
SmallChange="5"
|
|
||||||
TickFrequency="5"
|
|
||||||
IsSnapToTickEnabled="True"
|
|
||||||
LargeChange="10"
|
|
||||||
Width="350" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer
|
|
||||||
Name="NetworkPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabNetworkConnection}" />
|
|
||||||
<CheckBox Margin="10,0,0,0" IsChecked="{Binding EnableInternetAccess}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnableInternetAccess}"
|
|
||||||
ToolTip.Tip="{locale:Locale EnableInternetAccessTooltip}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
<ScrollViewer
|
|
||||||
Name="LoggingPage"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Stretch"
|
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
|
||||||
VerticalScrollBarVisibility="Auto">
|
|
||||||
<Border Classes="settings">
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabLoggingLogging}" />
|
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding EnableFileLog}"
|
|
||||||
ToolTip.Tip="{locale:Locale FileLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableLoggingToFile}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableStub}"
|
|
||||||
ToolTip.Tip="{locale:Locale StubLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableStubLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableInfo}"
|
|
||||||
ToolTip.Tip="{locale:Locale InfoLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableInfoLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableWarn}"
|
|
||||||
ToolTip.Tip="{locale:Locale WarnLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableWarningLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableError}"
|
|
||||||
ToolTip.Tip="{locale:Locale ErrorLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableErrorLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableTrace}"
|
|
||||||
ToolTip.Tip="{locale:Locale TraceLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableTraceLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableGuest}"
|
|
||||||
ToolTip.Tip="{locale:Locale GuestLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableGuestLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<Separator Height="1" />
|
|
||||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabLoggingDeveloperOptions}" />
|
|
||||||
<StackPanel
|
|
||||||
Margin="10,0,0,0"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
Orientation="Vertical"
|
|
||||||
Spacing="10">
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding EnableDebug}"
|
|
||||||
ToolTip.Tip="{locale:Locale DebugLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableDebugLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding EnableFsAccessLog}"
|
|
||||||
ToolTip.Tip="{locale:Locale FileAccessLogTooltip}">
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingEnableFsAccessLogs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" VerticalAlignment="Stretch">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
ToolTip.Tip="{locale:Locale FSAccessLogModeTooltip}"
|
|
||||||
Text="{locale:Locale SettingsTabLoggingFsGlobalAccessLogMode}"
|
|
||||||
Width="285" />
|
|
||||||
<ui:NumberBox
|
|
||||||
Maximum="3"
|
|
||||||
Minimum="0"
|
|
||||||
Width="150"
|
|
||||||
SpinButtonPlacementMode="Inline"
|
|
||||||
SmallChange="1"
|
|
||||||
LargeChange="1"
|
|
||||||
Value="{Binding FsGlobalAccessLogMode}" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal">
|
|
||||||
<TextBlock VerticalAlignment="Center"
|
|
||||||
Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevel}"
|
|
||||||
ToolTip.Tip="{locale:Locale OpenGlLogLevel}"
|
|
||||||
Width="285" />
|
|
||||||
<ComboBox SelectedIndex="{Binding OpenglDebugLevel}"
|
|
||||||
Width="150"
|
|
||||||
HorizontalContentAlignment="Left"
|
|
||||||
ToolTip.Tip="{locale:Locale OpenGlLogLevel}">
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelNone}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelError}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock
|
|
||||||
Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelPerformance}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
<ComboBoxItem>
|
|
||||||
<TextBlock Text="{locale:Locale SettingsTabLoggingGraphicsBackendLogLevelAll}" />
|
|
||||||
</ComboBoxItem>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ScrollViewer>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
<ui:NavigationView Grid.Row="1"
|
<ui:NavigationView Grid.Row="1"
|
||||||
IsSettingsVisible="False"
|
IsSettingsVisible="False"
|
||||||
|
@ -962,7 +102,7 @@
|
||||||
Spacing="10"
|
Spacing="10"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
ReverseOrder="{ReflectionBinding IsMacOS}">
|
ReverseOrder="{Binding IsMacOS}">
|
||||||
<Button
|
<Button
|
||||||
HotKey="Enter"
|
HotKey="Enter"
|
||||||
Classes="accent"
|
Classes="accent"
|
||||||
|
|
|
@ -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.Core;
|
||||||
using FluentAvalonia.UI.Controls;
|
using FluentAvalonia.UI.Controls;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ava.UI.Controls;
|
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.Input;
|
|
||||||
using Ryujinx.Input.Assigner;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.ComponentModel;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using TimeZone = Ryujinx.Ava.UI.Models.TimeZone;
|
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Windows
|
namespace Ryujinx.Ava.UI.Windows
|
||||||
{
|
{
|
||||||
public partial class SettingsWindow : StyleableWindow
|
public partial class SettingsWindow : StyleableWindow
|
||||||
{
|
{
|
||||||
private ButtonKeyAssigner _currentAssigner;
|
|
||||||
|
|
||||||
internal SettingsViewModel ViewModel { get; set; }
|
internal SettingsViewModel ViewModel { get; set; }
|
||||||
|
|
||||||
public SettingsWindow(VirtualFileSystem virtualFileSystem, ContentManager contentManager)
|
public SettingsWindow(VirtualFileSystem virtualFileSystem, ContentManager contentManager)
|
||||||
{
|
{
|
||||||
Title = $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]}";
|
Title = $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]}";
|
||||||
|
|
||||||
ViewModel = new SettingsViewModel(virtualFileSystem, contentManager, this);
|
ViewModel = new SettingsViewModel(virtualFileSystem, contentManager);
|
||||||
DataContext = ViewModel;
|
DataContext = ViewModel;
|
||||||
|
|
||||||
|
ViewModel.CloseWindow += Close;
|
||||||
|
ViewModel.SaveSettingsEvent += SaveSettings;
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Load();
|
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()
|
public SettingsWindow()
|
||||||
|
@ -55,6 +35,16 @@ namespace Ryujinx.Ava.UI.Windows
|
||||||
Load();
|
Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SaveSettings()
|
||||||
|
{
|
||||||
|
InputPage.ControllerSettings?.SaveCurrentProfile();
|
||||||
|
|
||||||
|
if (Owner is MainWindow window && ViewModel.DirectoryChanged)
|
||||||
|
{
|
||||||
|
window.ViewModel.LoadApplications();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Load()
|
private void Load()
|
||||||
{
|
{
|
||||||
Pages.Children.Clear();
|
Pages.Children.Clear();
|
||||||
|
@ -62,152 +52,52 @@ namespace Ryujinx.Ava.UI.Windows
|
||||||
NavPanel.SelectedItem = NavPanel.MenuItems.ElementAt(0);
|
NavPanel.SelectedItem = NavPanel.MenuItems.ElementAt(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Button_Checked(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (sender is ToggleButton button)
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Button_Unchecked(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
_currentAssigner?.Cancel();
|
|
||||||
_currentAssigner = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MouseClick(object sender, PointerPressedEventArgs e)
|
|
||||||
{
|
|
||||||
bool shouldUnbind = false;
|
|
||||||
|
|
||||||
if (e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed)
|
|
||||||
{
|
|
||||||
shouldUnbind = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
_currentAssigner?.Cancel(shouldUnbind);
|
|
||||||
|
|
||||||
PointerPressed -= MouseClick;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void NavPanelOnSelectionChanged(object sender, NavigationViewSelectionChangedEventArgs e)
|
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,
|
case "UiPage":
|
||||||
"InputPage" => InputPage,
|
UiPage.ViewModel = ViewModel;
|
||||||
"HotkeysPage" => HotkeysPage,
|
NavPanel.Content = UiPage;
|
||||||
"SystemPage" => SystemPage,
|
break;
|
||||||
"CpuPage" => CpuPage,
|
case "InputPage":
|
||||||
"GraphicsPage" => GraphicsPage,
|
NavPanel.Content = InputPage;
|
||||||
"AudioPage" => AudioPage,
|
break;
|
||||||
"NetworkPage" => NetworkPage,
|
case "HotkeysPage":
|
||||||
"LoggingPage" => LoggingPage,
|
NavPanel.Content = HotkeysPage;
|
||||||
_ => throw new NotImplementedException()
|
break;
|
||||||
};
|
case "SystemPage":
|
||||||
}
|
SystemPage.ViewModel = ViewModel;
|
||||||
}
|
NavPanel.Content = SystemPage;
|
||||||
|
break;
|
||||||
private async void AddButton_OnClick(object sender, RoutedEventArgs e)
|
case "CpuPage":
|
||||||
{
|
NavPanel.Content = CpuPage;
|
||||||
string path = PathBox.Text;
|
break;
|
||||||
|
case "GraphicsPage":
|
||||||
if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && !ViewModel.GameDirectories.Contains(path))
|
NavPanel.Content = GraphicsPage;
|
||||||
{
|
break;
|
||||||
ViewModel.GameDirectories.Add(path);
|
case "AudioPage":
|
||||||
ViewModel.DirectoryChanged = true;
|
NavPanel.Content = AudioPage;
|
||||||
}
|
break;
|
||||||
else
|
case "NetworkPage":
|
||||||
{
|
NavPanel.Content = NetworkPage;
|
||||||
path = await new OpenFolderDialog().ShowAsync(this);
|
break;
|
||||||
|
case "LoggingPage":
|
||||||
if (!string.IsNullOrWhiteSpace(path))
|
NavPanel.Content = LoggingPage;
|
||||||
{
|
break;
|
||||||
ViewModel.GameDirectories.Add(path);
|
default:
|
||||||
ViewModel.DirectoryChanged = true;
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveButton_OnClick(object sender, RoutedEventArgs e)
|
protected override void OnClosing(CancelEventArgs e)
|
||||||
{
|
{
|
||||||
int oldIndex = GameList.SelectedIndex;
|
HotkeysPage.Dispose();
|
||||||
|
InputPage.Dispose();
|
||||||
foreach (string path in new List<string>(GameList.SelectedItems.Cast<string>()))
|
base.OnClosing(e);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in a new issue