aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Ava/UI/Views
diff options
context:
space:
mode:
authorIsaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>2023-01-06 18:35:21 -0500
committerGitHub <noreply@github.com>2023-01-07 00:35:21 +0100
commit38519f3b9ade223983f7529f9b4f4b857c60f42b (patch)
treea041ee4171f61417b75dd6a7a204d6d150f60ecb /Ryujinx.Ava/UI/Views
parent7f27aabbd0501b32e4918384c0a50fd0b7f357fe (diff)
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>
Diffstat (limited to 'Ryujinx.Ava/UI/Views')
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml81
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml.cs12
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml72
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml.cs12
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml218
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml.cs12
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml104
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml.cs81
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml46
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml.cs17
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml118
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml.cs12
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml35
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml.cs12
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml195
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs52
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml156
-rw-r--r--Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml.cs82
18 files changed, 1317 insertions, 0 deletions
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml
new file mode 100644
index 00000000..35283353
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml.cs
new file mode 100644
index 00000000..026c7fdf
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsAudioView.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia.Controls;
+
+namespace Ryujinx.Ava.UI.Views.Settings
+{
+ public partial class SettingsAudioView : UserControl
+ {
+ public SettingsAudioView()
+ {
+ InitializeComponent();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml
new file mode 100644
index 00000000..a0cf3452
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml.cs
new file mode 100644
index 00000000..5c5b6079
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsCPUView.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia.Controls;
+
+namespace Ryujinx.Ava.UI.Views.Settings
+{
+ public partial class SettingsCPUView : UserControl
+ {
+ public SettingsCPUView()
+ {
+ InitializeComponent();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml
new file mode 100644
index 00000000..1f65155a
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml.cs
new file mode 100644
index 00000000..8fe08552
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsGraphicsView.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia.Controls;
+
+namespace Ryujinx.Ava.UI.Views.Settings
+{
+ public partial class SettingsGraphicsView : UserControl
+ {
+ public SettingsGraphicsView()
+ {
+ InitializeComponent();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml
new file mode 100644
index 00000000..361125bf
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml.cs
new file mode 100644
index 00000000..702f73e8
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsHotkeysView.axaml.cs
@@ -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;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml
new file mode 100644
index 00000000..1c774bda
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml.cs
new file mode 100644
index 00000000..0c2105ec
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsInputView.axaml.cs
@@ -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();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml
new file mode 100644
index 00000000..2163dcda
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml.cs
new file mode 100644
index 00000000..2ec476ac
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsLoggingView.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia.Controls;
+
+namespace Ryujinx.Ava.UI.Views.Settings
+{
+ public partial class SettingsLoggingView : UserControl
+ {
+ public SettingsLoggingView()
+ {
+ InitializeComponent();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml
new file mode 100644
index 00000000..8efd367d
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml.cs
new file mode 100644
index 00000000..d7407b9d
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsNetworkView.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia.Controls;
+
+namespace Ryujinx.Ava.UI.Views.Settings
+{
+ public partial class SettingsNetworkView : UserControl
+ {
+ public SettingsNetworkView()
+ {
+ InitializeComponent();
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml
new file mode 100644
index 00000000..ddcca39c
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs
new file mode 100644
index 00000000..d2ea59de
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsSystemView.axaml.cs
@@ -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);
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml b/Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml
new file mode 100644
index 00000000..61b6c433
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml
@@ -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> \ No newline at end of file
diff --git a/Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml.cs b/Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml.cs
new file mode 100644
index 00000000..8e6da7c5
--- /dev/null
+++ b/Ryujinx.Ava/UI/Views/Settings/SettingsUIView.axaml.cs
@@ -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];
+ }
+ }
+ }
+ }
+} \ No newline at end of file