Jelajahi Sumber

Ava GUI: Restructure `Ryujinx.Ava` (#4165)

* Restructure `Ryujinx.Ava`

* Stylistic consistency

* Update Ryujinx.Ava/UI/Controls/UserEditor.axaml.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Controls/UserEditor.axaml.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Controls/UserSelector.axaml.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Controls/SaveManager.axaml.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Controls/SaveManager.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>

* Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.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>

* Update Ryujinx.Ava/UI/ViewModels/UserProfileViewModel.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/ViewModels/UserProfileViewModel.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Update Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>

* Fix redundancies

* Remove redunancies

* Add back elses

Co-authored-by: TSRBerry <20988865+TSRBerry@users.noreply.github.com>
Isaac Marovitz 3 tahun lalu
induk
melakukan
76671d63d4
100 mengubah file dengan 594 tambahan dan 286 penghapusan
  1. 1 1
      Ryujinx.Ava/App.axaml
  2. 3 2
      Ryujinx.Ava/App.axaml.cs
  3. 4 3
      Ryujinx.Ava/AppHost.cs
  4. 3 2
      Ryujinx.Ava/Common/ApplicationHelper.cs
  5. 1 1
      Ryujinx.Ava/Common/Locale/LocaleManager.cs
  6. 1 1
      Ryujinx.Ava/Helper/MetalHelper.cs
  7. 3 2
      Ryujinx.Ava/Modules/Updater/Updater.cs
  8. 1 1
      Ryujinx.Ava/Program.cs
  9. 4 3
      Ryujinx.Ava/UI/Applet/AvaHostUiHandler.cs
  10. 4 3
      Ryujinx.Ava/UI/Applet/AvaloniaDynamicTextInputHandler.cs
  11. 2 2
      Ryujinx.Ava/UI/Applet/AvaloniaHostUiTheme.cs
  12. 1 2
      Ryujinx.Ava/UI/Applet/ErrorAppletWindow.axaml
  13. 2 2
      Ryujinx.Ava/UI/Applet/ErrorAppletWindow.axaml.cs
  14. 1 2
      Ryujinx.Ava/UI/Applet/SwkbdAppletDialog.axaml
  15. 3 2
      Ryujinx.Ava/UI/Applet/SwkbdAppletDialog.axaml.cs
  16. 3 3
      Ryujinx.Ava/UI/Controls/GameGridView.axaml
  17. 3 2
      Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs
  18. 3 4
      Ryujinx.Ava/UI/Controls/GameListView.axaml
  19. 3 2
      Ryujinx.Ava/UI/Controls/GameListView.axaml.cs
  20. 1 1
      Ryujinx.Ava/UI/Controls/InputDialog.axaml
  21. 3 2
      Ryujinx.Ava/UI/Controls/InputDialog.axaml.cs
  22. 16 0
      Ryujinx.Ava/UI/Controls/NavigationDialogHost.axaml
  23. 2 2
      Ryujinx.Ava/UI/Controls/NavigationDialogHost.axaml.cs
  24. 57 0
      Ryujinx.Ava/UI/Controls/ProfileImageSelectionDialog.axaml
  25. 3 3
      Ryujinx.Ava/UI/Controls/ProfileImageSelectionDialog.axaml.cs
  26. 11 0
      Ryujinx.Ava/UI/Controls/RendererHost.axaml
  27. 2 1
      Ryujinx.Ava/UI/Controls/RendererHost.axaml.cs
  28. 175 0
      Ryujinx.Ava/UI/Controls/SaveManager.axaml
  29. 3 3
      Ryujinx.Ava/UI/Controls/SaveManager.axaml.cs
  30. 1 2
      Ryujinx.Ava/UI/Controls/UpdateWaitWindow.axaml
  31. 2 2
      Ryujinx.Ava/UI/Controls/UpdateWaitWindow.axaml.cs
  32. 10 13
      Ryujinx.Ava/UI/Controls/UserEditor.axaml
  33. 4 3
      Ryujinx.Ava/UI/Controls/UserEditor.axaml.cs
  34. 17 16
      Ryujinx.Ava/UI/Controls/UserRecoverer.axaml
  35. 3 3
      Ryujinx.Ava/UI/Controls/UserRecoverer.axaml.cs
  36. 10 11
      Ryujinx.Ava/UI/Controls/UserSelector.axaml
  37. 3 3
      Ryujinx.Ava/UI/Controls/UserSelector.axaml.cs
  38. 1 1
      Ryujinx.Ava/UI/Helpers/ApplicationOpenedEventArgs.cs
  39. 1 1
      Ryujinx.Ava/UI/Helpers/AvaloniaGlxContext.cs
  40. 1 1
      Ryujinx.Ava/UI/Helpers/AvaloniaWglContext.cs
  41. 1 1
      Ryujinx.Ava/UI/Helpers/BitmapArrayValueConverter.cs
  42. 1 1
      Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs
  43. 3 4
      Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs
  44. 4 4
      Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs
  45. 9 0
      Ryujinx.Ava/UI/Helpers/Glyph.cs
  46. 1 1
      Ryujinx.Ava/UI/Helpers/GlyphValueConverter.cs
  47. 1 1
      Ryujinx.Ava/UI/Helpers/HotKeyControl.cs
  48. 1 1
      Ryujinx.Ava/UI/Helpers/IGlContextExtension.cs
  49. 1 1
      Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs
  50. 1 1
      Ryujinx.Ava/UI/Helpers/MiniCommand.cs
  51. 1 1
      Ryujinx.Ava/UI/Helpers/OffscreenTextBox.cs
  52. 1 4
      Ryujinx.Ava/UI/Helpers/OpenGLEmbeddedWindow.cs
  53. 1 1
      Ryujinx.Ava/UI/Helpers/OpenToolkitBindingsContext.cs
  54. 1 1
      Ryujinx.Ava/UI/Helpers/SPBOpenGLContext.cs
  55. 2 2
      Ryujinx.Ava/UI/Helpers/UserErrorDialog.cs
  56. 1 1
      Ryujinx.Ava/UI/Helpers/UserResult.cs
  57. 1 2
      Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs
  58. 1 1
      Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs
  59. 1 1
      Ryujinx.Ava/UI/Models/Amiibo.cs
  60. 2 2
      Ryujinx.Ava/UI/Models/CheatModel.cs
  61. 1 1
      Ryujinx.Ava/UI/Models/CheatsList.cs
  62. 1 1
      Ryujinx.Ava/UI/Models/ControllerModel.cs
  63. 1 1
      Ryujinx.Ava/UI/Models/DeviceType.cs
  64. 2 2
      Ryujinx.Ava/UI/Models/DownloadableContentModel.cs
  65. 1 1
      Ryujinx.Ava/UI/Models/Generic/LastPlayedSortComparer.cs
  66. 2 2
      Ryujinx.Ava/UI/Models/InputConfiguration.cs
  67. 1 1
      Ryujinx.Ava/UI/Models/PlayerModel.cs
  68. 1 1
      Ryujinx.Ava/UI/Models/ProfileImageModel.cs
  69. 5 4
      Ryujinx.Ava/UI/Models/SaveModel.cs
  70. 1 1
      Ryujinx.Ava/UI/Models/StatusUpdatedEventArgs.cs
  71. 2 2
      Ryujinx.Ava/UI/Models/TempProfile.cs
  72. 1 1
      Ryujinx.Ava/UI/Models/TimeZone.cs
  73. 1 1
      Ryujinx.Ava/UI/Models/TitleUpdateModel.cs
  74. 3 3
      Ryujinx.Ava/UI/Models/UserProfile.cs
  75. 5 4
      Ryujinx.Ava/UI/ViewModels/AmiiboWindowViewModel.cs
  76. 2 2
      Ryujinx.Ava/UI/ViewModels/AvatarProfileViewModel.cs
  77. 1 1
      Ryujinx.Ava/UI/ViewModels/BaseModel.cs
  78. 5 4
      Ryujinx.Ava/UI/ViewModels/ControllerSettingsViewModel.cs
  79. 4 3
      Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs
  80. 6 10
      Ryujinx.Ava/UI/ViewModels/SettingsViewModel.cs
  81. 9 7
      Ryujinx.Ava/UI/ViewModels/UserProfileViewModel.cs
  82. 2 2
      Ryujinx.Ava/UI/Windows/AboutWindow.axaml
  83. 1 1
      Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs
  84. 20 15
      Ryujinx.Ava/UI/Windows/AmiiboWindow.axaml
  85. 3 3
      Ryujinx.Ava/UI/Windows/AmiiboWindow.axaml.cs
  86. 19 18
      Ryujinx.Ava/UI/Windows/AvatarWindow.axaml
  87. 4 4
      Ryujinx.Ava/UI/Windows/AvatarWindow.axaml.cs
  88. 3 3
      Ryujinx.Ava/UI/Windows/CheatWindow.axaml
  89. 2 2
      Ryujinx.Ava/UI/Windows/CheatWindow.axaml.cs
  90. 29 0
      Ryujinx.Ava/UI/Windows/ContentDialogOverlayWindow.axaml
  91. 1 1
      Ryujinx.Ava/UI/Windows/ContentDialogOverlayWindow.axaml.cs
  92. 4 4
      Ryujinx.Ava/UI/Windows/ControllerSettingsWindow.axaml
  93. 5 4
      Ryujinx.Ava/UI/Windows/ControllerSettingsWindow.axaml.cs
  94. 2 2
      Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml
  95. 4 3
      Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml.cs
  96. 1 1
      Ryujinx.Ava/UI/Windows/IconColorPicker.cs
  97. 13 13
      Ryujinx.Ava/UI/Windows/MainWindow.axaml
  98. 6 5
      Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs
  99. 10 10
      Ryujinx.Ava/UI/Windows/MotionSettingsWindow.axaml
  100. 3 3
      Ryujinx.Ava/UI/Windows/MotionSettingsWindow.axaml.cs

+ 1 - 1
Ryujinx.Ava/App.axaml

@@ -4,6 +4,6 @@
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:sty="using:FluentAvalonia.Styling">
     <Application.Styles>
-        <sty:FluentAvaloniaTheme UseSystemThemeOnWindows="False" />
+        <sty:FluentAvaloniaTheme PreferSystemTheme="False" />
     </Application.Styles>
 </Application>

+ 3 - 2
Ryujinx.Ava/App.axaml.cs

@@ -5,8 +5,9 @@ using Avalonia.Styling;
 using Avalonia.Threading;
 using FluentAvalonia.Styling;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Logging;
 using Ryujinx.Ui.Common.Configuration;

+ 4 - 3
Ryujinx.Ava/AppHost.cs

@@ -11,9 +11,10 @@ using Ryujinx.Audio.Integration;
 using Ryujinx.Ava.Common;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.Input;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;

+ 3 - 2
Ryujinx.Ava/Common/ApplicationHelper.cs

@@ -12,8 +12,9 @@ using LibHac.Tools.Fs;
 using LibHac.Tools.FsSystem;
 using LibHac.Tools.FsSystem.NcaUtils;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common.Logging;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.HLE.HOS;

+ 1 - 1
Ryujinx.Ava/Common/Locale/LocaleManager.cs

@@ -1,4 +1,4 @@
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Common;
 using Ryujinx.Common.Utilities;
 using Ryujinx.Ui.Common.Configuration;

+ 1 - 1
Ryujinx.Ava/Helper/MetalHelper.cs

@@ -3,7 +3,7 @@ using System.Runtime.Versioning;
 using System.Runtime.InteropServices;
 using Avalonia;
 
-namespace Ryujinx.Ava.Ui.Helper
+namespace Ryujinx.Ava.UI.Helper
 {
     public delegate void UpdateBoundsCallbackDelegate(Rect rect);
 

+ 3 - 2
Ryujinx.Ava/Modules/Updater/Updater.cs

@@ -7,8 +7,9 @@ using ICSharpCode.SharpZipLib.Zip;
 using Newtonsoft.Json.Linq;
 using Ryujinx.Ava;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Logging;
 using Ryujinx.Ui.Common.Helper;

+ 1 - 1
Ryujinx.Ava/Program.cs

@@ -1,7 +1,7 @@
 using ARMeilleure.Translation.PTC;
 using Avalonia;
 using Avalonia.Threading;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.GraphicsDriver;

+ 4 - 3
Ryujinx.Ava/Ui/Applet/AvaHostUiHandler.cs → Ryujinx.Ava/UI/Applet/AvaHostUiHandler.cs

@@ -2,8 +2,9 @@ using Avalonia.Controls;
 using Avalonia.Threading;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.HLE;
 using Ryujinx.HLE.HOS.Applets;
 using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
@@ -11,7 +12,7 @@ using Ryujinx.HLE.Ui;
 using System;
 using System.Threading;
 
-namespace Ryujinx.Ava.Ui.Applet
+namespace Ryujinx.Ava.UI.Applet
 {
     internal class AvaHostUiHandler : IHostUiHandler
     {

+ 4 - 3
Ryujinx.Ava/Ui/Applet/AvaloniaDynamicTextInputHandler.cs → Ryujinx.Ava/UI/Applet/AvaloniaDynamicTextInputHandler.cs

@@ -3,15 +3,16 @@ using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Threading;
 using Ryujinx.Ava.Input;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.HLE.Ui;
 using System;
 using System.Threading;
 
 using HidKey = Ryujinx.Common.Configuration.Hid.Key;
 
-namespace Ryujinx.Ava.Ui.Applet
+namespace Ryujinx.Ava.UI.Applet
 {
     class AvaloniaDynamicTextInputHandler : IDynamicTextInputHandler
     {

+ 2 - 2
Ryujinx.Ava/Ui/Applet/AvaloniaHostUiTheme.cs → Ryujinx.Ava/UI/Applet/AvaloniaHostUiTheme.cs

@@ -1,9 +1,9 @@
 using Avalonia.Media;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.HLE.Ui;
 using System;
 
-namespace Ryujinx.Ava.Ui.Applet
+namespace Ryujinx.Ava.UI.Applet
 {
     class AvaloniaHostUiTheme : IHostUiTheme
     {

+ 1 - 2
Ryujinx.Ava/Ui/Applet/ErrorAppletWindow.axaml → Ryujinx.Ava/UI/Applet/ErrorAppletWindow.axaml

@@ -1,11 +1,10 @@
 <Window
-    x:Class="Ryujinx.Ava.Ui.Applet.ErrorAppletWindow"
+    x:Class="Ryujinx.Ava.UI.Applet.ErrorAppletWindow"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
     Title="{locale:Locale ErrorWindowTitle}"
     Width="450"
     Height="340"

+ 2 - 2
Ryujinx.Ava/Ui/Applet/ErrorAppletWindow.axaml.cs → Ryujinx.Ava/UI/Applet/ErrorAppletWindow.axaml.cs

@@ -3,10 +3,10 @@ using Avalonia.Controls;
 using Avalonia.Interactivity;
 using Avalonia.Threading;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Windows;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Applet
+namespace Ryujinx.Ava.UI.Applet
 {
     internal partial class ErrorAppletWindow : StyleableWindow
     {

+ 1 - 2
Ryujinx.Ava/Ui/Applet/SwkbdAppletDialog.axaml → Ryujinx.Ava/UI/Applet/SwkbdAppletDialog.axaml

@@ -1,10 +1,9 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Controls.SwkbdAppletDialog"
+    x:Class="Ryujinx.Ava.UI.Controls.SwkbdAppletDialog"
     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:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
     Width="400"
     mc:Ignorable="d"
     Focusable="True">

+ 3 - 2
Ryujinx.Ava/Ui/Applet/SwkbdAppletDialog.axaml.cs → Ryujinx.Ava/UI/Applet/SwkbdAppletDialog.axaml.cs

@@ -6,12 +6,13 @@ using Avalonia.Media;
 using FluentAvalonia.Core;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.HLE.HOS.Applets;
 using System;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     internal partial class SwkbdAppletDialog : UserControl
     {

+ 3 - 3
Ryujinx.Ava/Ui/Controls/GameGridView.axaml → Ryujinx.Ava/UI/Controls/GameGridView.axaml

@@ -1,19 +1,19 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Controls.GameGridView"
+    x:Class="Ryujinx.Ava.UI.Controls.GameGridView"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:flex="clr-namespace:Avalonia.Flexbox;assembly=Avalonia.Flexbox"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     d:DesignHeight="450"
     d:DesignWidth="800"
     mc:Ignorable="d"
     Focusable="True">
     <UserControl.Resources>
-        <controls:BitmapArrayValueConverter x:Key="ByteImage" />
+        <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
         <MenuFlyout x:Key="GameContextMenu" Opened="MenuBase_OnMenuOpened">
             <MenuItem
                 Command="{Binding ToggleFavorite}"

+ 3 - 2
Ryujinx.Ava/Ui/Controls/GameGridView.axaml.cs → Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs

@@ -4,11 +4,12 @@ using Avalonia.Input;
 using Avalonia.Interactivity;
 using Avalonia.Markup.Xaml;
 using LibHac.Common;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Ui.App.Common;
 using System;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class GameGridView : UserControl
     {

+ 3 - 4
Ryujinx.Ava/Ui/Controls/GameListView.axaml → Ryujinx.Ava/UI/Controls/GameListView.axaml

@@ -1,19 +1,18 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Controls.GameListView"
+    x:Class="Ryujinx.Ava.UI.Controls.GameListView"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:flex="clr-namespace:Avalonia.Flexbox;assembly=Avalonia.Flexbox"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     d:DesignHeight="450"
     d:DesignWidth="800"
     mc:Ignorable="d"
     Focusable="True">
     <UserControl.Resources>
-        <controls:BitmapArrayValueConverter x:Key="ByteImage" />
+        <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
         <MenuFlyout x:Key="GameContextMenu" Opened="MenuBase_OnMenuOpened">
             <MenuItem
                 Command="{Binding ToggleFavorite}"

+ 3 - 2
Ryujinx.Ava/Ui/Controls/GameListView.axaml.cs → Ryujinx.Ava/UI/Controls/GameListView.axaml.cs

@@ -4,11 +4,12 @@ using Avalonia.Input;
 using Avalonia.Interactivity;
 using Avalonia.Markup.Xaml;
 using LibHac.Common;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Ui.App.Common;
 using System;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class GameListView : UserControl
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/InputDialog.axaml → Ryujinx.Ava/UI/Controls/InputDialog.axaml

@@ -1,5 +1,5 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Controls.InputDialog"
+    x:Class="Ryujinx.Ava.UI.Controls.InputDialog"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

+ 3 - 2
Ryujinx.Ava/Ui/Controls/InputDialog.axaml.cs → Ryujinx.Ava/UI/Controls/InputDialog.axaml.cs

@@ -1,10 +1,11 @@
 using Avalonia.Controls;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class InputDialog : UserControl
     {

+ 16 - 0
Ryujinx.Ava/UI/Controls/NavigationDialogHost.axaml

@@ -0,0 +1,16 @@
+<UserControl 
+    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"
+    mc:Ignorable="d" 
+    d:DesignWidth="800" 
+    d:DesignHeight="450"
+    x:Class="Ryujinx.Ava.UI.Controls.NavigationDialogHost"
+    Focusable="True">
+    <ui:Frame 
+        HorizontalAlignment="Stretch"
+        VerticalAlignment="Stretch"
+        x:Name="ContentFrame" />
+</UserControl>

+ 2 - 2
Ryujinx.Ava/Ui/Controls/NavigationDialogHost.axaml.cs → Ryujinx.Ava/UI/Controls/NavigationDialogHost.axaml.cs

@@ -3,13 +3,13 @@ using Avalonia.Controls;
 using FluentAvalonia.UI.Controls;
 using LibHac;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.HLE.HOS.Services.Account.Acc;
 using System;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class NavigationDialogHost : UserControl
     {

+ 57 - 0
Ryujinx.Ava/UI/Controls/ProfileImageSelectionDialog.axaml

@@ -0,0 +1,57 @@
+<UserControl 
+    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"
+    mc:Ignorable="d"
+    x:Class="Ryujinx.Ava.UI.Controls.ProfileImageSelectionDialog"
+    Focusable="True">
+    <Grid 
+        HorizontalAlignment="Stretch" 
+        VerticalAlignment="Center" 
+        Margin="5,10,5, 5">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto" />
+            <RowDefinition Height="Auto" />
+            <RowDefinition Height="70" />
+            <RowDefinition Height="Auto" />
+            <RowDefinition Height="Auto" />
+        </Grid.RowDefinitions>
+        <TextBlock 
+            FontWeight="Bold" 
+            FontSize="18" 
+            HorizontalAlignment="Center"
+            Grid.Row="1"
+            Text="{locale:Locale ProfileImageSelectionHeader}" />
+        <TextBlock 
+            FontWeight="Bold" 
+            Grid.Row="2" 
+            Margin="10" 
+            MaxWidth="400" 
+            TextWrapping="Wrap"
+            HorizontalAlignment="Center" 
+            TextAlignment="Center" 
+            Text="{locale:Locale ProfileImageSelectionNote}" />
+        <StackPanel 
+            Margin="5,0" 
+            Spacing="10" 
+            Grid.Row="4" 
+            HorizontalAlignment="Center"
+            Orientation="Horizontal">
+            <Button 
+                Name="Import"
+                Click="Import_OnClick"
+                Width="200">
+                <TextBlock Text="{locale:Locale ProfileImageSelectionImportImage}" />
+            </Button>
+            <Button 
+                Name="SelectFirmwareImage" 
+                IsEnabled="{Binding FirmwareFound}" 
+                Click="SelectFirmwareImage_OnClick"
+                Width="200">
+                <TextBlock Text="{locale:Locale ProfileImageSelectionSelectAvatar}" />
+            </Button>
+        </StackPanel>
+    </Grid>
+</UserControl>

+ 3 - 3
Ryujinx.Ava/Ui/Controls/ProfileImageSelectionDialog.axaml.cs → Ryujinx.Ava/UI/Controls/ProfileImageSelectionDialog.axaml.cs

@@ -4,15 +4,15 @@ using Avalonia.VisualTree;
 using FluentAvalonia.UI.Controls;
 using FluentAvalonia.UI.Navigation;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.HLE.FileSystem;
 using SixLabors.ImageSharp;
 using SixLabors.ImageSharp.Processing;
 using System.IO;
 using Image = SixLabors.ImageSharp.Image;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class ProfileImageSelectionDialog : UserControl
     {

+ 11 - 0
Ryujinx.Ava/UI/Controls/RendererHost.axaml

@@ -0,0 +1,11 @@
+<UserControl 
+    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"
+    mc:Ignorable="d" 
+    d:DesignWidth="800" 
+    d:DesignHeight="450"
+    x:Class="Ryujinx.Ava.UI.Controls.RendererHost"
+    Focusable="True">
+</UserControl>

+ 2 - 1
Ryujinx.Ava/Ui/Controls/RendererHost.axaml.cs → Ryujinx.Ava/UI/Controls/RendererHost.axaml.cs

@@ -1,13 +1,14 @@
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Markup.Xaml;
+using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Common.Configuration;
 using Silk.NET.Vulkan;
 using SPB.Graphics.OpenGL;
 using SPB.Windowing;
 using System;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class RendererHost : UserControl, IDisposable
     {

+ 175 - 0
Ryujinx.Ava/UI/Controls/SaveManager.axaml

@@ -0,0 +1,175 @@
+<UserControl 
+    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:models="clr-namespace:Ryujinx.Ava.UI.Models"
+    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
+    mc:Ignorable="d" 
+    d:DesignWidth="800" 
+    d:DesignHeight="450"
+    Height="400"
+    Width="550"
+    x:Class="Ryujinx.Ava.UI.Controls.SaveManager"
+    Focusable="True">
+    <UserControl.Resources>
+        <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
+    </UserControl.Resources>
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto" />
+            <RowDefinition />
+        </Grid.RowDefinitions>
+        <Grid 
+            Grid.Row="0" 
+            HorizontalAlignment="Stretch">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="Auto" />
+                <ColumnDefinition />
+            </Grid.ColumnDefinitions>
+            <StackPanel 
+                Spacing="10" 
+                Orientation="Horizontal" 
+                HorizontalAlignment="Left" 
+                VerticalAlignment="Center">
+                <Label
+                    Content="{locale:Locale CommonSort}" 
+                    VerticalAlignment="Center" />
+                <ComboBox SelectedIndex="{Binding SortIndex}" Width="100">
+                    <ComboBoxItem>
+                        <Label 
+                            VerticalAlignment="Center" 
+                            HorizontalContentAlignment="Left"
+                            Content="{locale:Locale Name}" />
+                    </ComboBoxItem>
+                    <ComboBoxItem>
+                        <Label 
+                            VerticalAlignment="Center" 
+                            HorizontalContentAlignment="Left"
+                            Content="{locale:Locale Size}" />
+                    </ComboBoxItem>
+                </ComboBox>
+                <ComboBox SelectedIndex="{Binding OrderIndex}" Width="150">
+                    <ComboBoxItem>
+                        <Label 
+                            VerticalAlignment="Center" 
+                            HorizontalContentAlignment="Left"
+                            Content="{locale:Locale OrderAscending}" />
+                    </ComboBoxItem>
+                    <ComboBoxItem>
+                        <Label 
+                            VerticalAlignment="Center" 
+                            HorizontalContentAlignment="Left"
+                            Content="{locale:Locale Descending}" />
+                    </ComboBoxItem>
+                </ComboBox>
+            </StackPanel>
+            <Grid 
+                Grid.Column="1" 
+                HorizontalAlignment="Stretch" 
+                Margin="10,0, 0, 0">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="Auto"/>
+                    <ColumnDefinition/>
+                </Grid.ColumnDefinitions>
+                <Label 
+                    Content="{locale:Locale Search}"
+                    VerticalAlignment="Center"/>
+                <TextBox 
+                    Margin="5,0,0,0" 
+                    Grid.Column="1" 
+                    HorizontalAlignment="Stretch" 
+                    Text="{Binding Search}"/>
+            </Grid>
+        </Grid>
+        <Border 
+            Grid.Row="1" 
+            Margin="0,5" 
+            BorderThickness="1" 
+            HorizontalAlignment="Stretch" 
+            VerticalAlignment="Stretch">
+            <ListBox 
+                Name="SaveList" 
+                Items="{Binding View}" 
+                HorizontalAlignment="Stretch" 
+                VerticalAlignment="Stretch">
+                <ListBox.ItemTemplate>
+                    <DataTemplate x:DataType="models:SaveModel">
+                        <Grid HorizontalAlignment="Stretch" Margin="0,5">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition />
+                                <ColumnDefinition Width="Auto" />
+                            </Grid.ColumnDefinitions>
+                            <StackPanel Grid.Column="0" Orientation="Horizontal">
+                                <Border 
+                                    Height="42" 
+                                    Margin="2" 
+                                    Width="42" 
+                                    Padding="10"
+                                    IsVisible="{Binding !InGameList}">
+                                    <ui:SymbolIcon 
+                                        Symbol="Help" 
+                                        FontSize="30" 
+                                        HorizontalAlignment="Center"
+                                        VerticalAlignment="Center" />
+                                </Border>
+                                <Image 
+                                    IsVisible="{Binding InGameList}"
+                                    Margin="2"
+                                    Width="42"
+                                    Height="42"
+                                    Source="{Binding Icon, 
+                                    Converter={StaticResource ByteImage}}" />
+                                <TextBlock 
+                                    MaxLines="3" 
+                                    Width="320"
+                                    Margin="5" 
+                                    TextWrapping="Wrap"
+                                    Text="{Binding  Title}" VerticalAlignment="Center" />
+                            </StackPanel>
+                            <StackPanel 
+                                Grid.Column="1" 
+                                Spacing="10" 
+                                HorizontalAlignment="Right"
+                                Orientation="Horizontal">
+                                <Label 
+                                    Content="{Binding SizeString}" 
+                                    IsVisible="{Binding SizeAvailable}"
+                                    VerticalAlignment="Center" 
+                                    HorizontalAlignment="Right" />
+                                <Button 
+                                    VerticalAlignment="Center" 
+                                    HorizontalAlignment="Right" 
+                                    Padding="10"
+                                    MinWidth="0" 
+                                    MinHeight="0" 
+                                    Name="OpenLocation" 
+                                    Command="{Binding OpenLocation}">
+                                    <ui:SymbolIcon 
+                                        Symbol="OpenFolder" 
+                                        HorizontalAlignment="Center"
+                                        VerticalAlignment="Center" />
+                                </Button>
+                                <Button 
+                                    VerticalAlignment="Center" 
+                                    HorizontalAlignment="Right" 
+                                    Padding="10"
+                                    MinWidth="0" 
+                                    MinHeight="0" 
+                                    Name="Delete" 
+                                    Command="{Binding Delete}">
+                                    <ui:SymbolIcon 
+                                        Symbol="Delete" 
+                                        HorizontalAlignment="Center"
+                                        VerticalAlignment="Center" />
+                                </Button>
+                            </StackPanel>
+                        </Grid>
+                    </DataTemplate>
+                </ListBox.ItemTemplate>
+            </ListBox>
+        </Border>
+    </Grid>
+</UserControl>

+ 3 - 3
Ryujinx.Ava/Ui/Controls/SaveManager.axaml.cs → Ryujinx.Ava/UI/Controls/SaveManager.axaml.cs

@@ -7,16 +7,16 @@ using LibHac.Fs;
 using LibHac.Fs.Shim;
 using Ryujinx.Ava.Common;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
+using Ryujinx.Ava.UI.Models;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.Ui.App.Common;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Threading.Tasks;
-using UserProfile = Ryujinx.Ava.Ui.Models.UserProfile;
+using UserProfile = Ryujinx.Ava.UI.Models.UserProfile;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class SaveManager : UserControl
     {

+ 1 - 2
Ryujinx.Ava/Ui/Controls/UpdateWaitWindow.axaml → Ryujinx.Ava/UI/Controls/UpdateWaitWindow.axaml

@@ -1,10 +1,9 @@
 <Window
-    x:Class="Ryujinx.Ava.Ui.Controls.UpdateWaitWindow"
+    x:Class="Ryujinx.Ava.UI.Controls.UpdateWaitWindow"
     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:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
     Title="Ryujinx - Waiting"
     SizeToContent="WidthAndHeight"
     WindowStartupLocation="CenterOwner"

+ 2 - 2
Ryujinx.Ava/Ui/Controls/UpdateWaitWindow.axaml.cs → Ryujinx.Ava/UI/Controls/UpdateWaitWindow.axaml.cs

@@ -1,7 +1,7 @@
 using Avalonia.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Windows;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class UpdateWaitWindow : StyleableWindow
     {

+ 10 - 13
Ryujinx.Ava/Ui/Controls/UserEditor.axaml → Ryujinx.Ava/UI/Controls/UserEditor.axaml

@@ -1,21 +1,18 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Controls.UserEditor"
+    x:Class="Ryujinx.Ava.UI.Controls.UserEditor"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
+    xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:models="clr-namespace:Ryujinx.Ava.Ui.Models"
-    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-    xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     Margin="0"
     MinWidth="500"
     Padding="0"
     mc:Ignorable="d"
     Focusable="True">
     <UserControl.Resources>
-        <controls:BitmapArrayValueConverter x:Key="ByteImage" />
+        <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
     </UserControl.Resources>
     <Grid Margin="0">
         <Grid.ColumnDefinitions>
@@ -43,13 +40,13 @@
                 Margin="5"
                 HorizontalAlignment="Stretch"
                 Click="ChangePictureButton_Click"
-                Content="{Locale:Locale UserProfilesChangeProfileImage}" />
+                Content="{locale:Locale UserProfilesChangeProfileImage}" />
             <Button
                 Name="AddPictureButton"
                 Margin="5"
                 HorizontalAlignment="Stretch"
                 Click="ChangePictureButton_Click"
-                Content="{Locale:Locale UserProfilesSetProfileImage}" />
+                Content="{locale:Locale UserProfilesSetProfileImage}" />
         </StackPanel>
         <StackPanel
             Grid.Row="0"
@@ -58,14 +55,14 @@
             HorizontalAlignment="Stretch"
             Orientation="Vertical"
             Spacing="10">
-            <TextBlock Text="{Locale:Locale UserProfilesName}" />
+            <TextBlock Text="{locale:Locale UserProfilesName}" />
             <TextBox
                 Name="NameBox"
                 Width="300"
                 HorizontalAlignment="Stretch"
                 MaxLength="{Binding MaxProfileNameLength}"
                 Text="{Binding Name}" />
-            <TextBlock Name="IdText" Text="{Locale:Locale UserProfilesUserId}" />
+            <TextBlock Name="IdText" Text="{locale:Locale UserProfilesUserId}" />
             <TextBlock Name="IdLabel" Text="{Binding UserId}" />
         </StackPanel>
         <StackPanel
@@ -78,12 +75,12 @@
             <Button
                 Name="SaveButton"
                 Click="SaveButton_Click"
-                Content="{Locale:Locale Save}" />
+                Content="{locale:Locale Save}" />
             <Button
                 Name="CloseButton"
                 HorizontalAlignment="Right"
                 Click="CloseButton_Click"
-                Content="{Locale:Locale Discard}" />
+                Content="{locale:Locale Discard}" />
         </StackPanel>
     </Grid>
 </UserControl>

+ 4 - 3
Ryujinx.Ava/Ui/Controls/UserEditor.axaml.cs → Ryujinx.Ava/UI/Controls/UserEditor.axaml.cs

@@ -4,10 +4,11 @@ using Avalonia.Interactivity;
 using FluentAvalonia.UI.Controls;
 using FluentAvalonia.UI.Navigation;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
-using UserProfile = Ryujinx.Ava.Ui.Models.UserProfile;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
+using UserProfile = Ryujinx.Ava.UI.Models.UserProfile;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class UserEditor : UserControl
     {

+ 17 - 16
Ryujinx.Ava/Ui/Controls/UserRecoverer.axaml → Ryujinx.Ava/UI/Controls/UserRecoverer.axaml

@@ -1,17 +1,18 @@
-<UserControl 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"
-             mc:Ignorable="d"
-             d:DesignWidth="800"
-             d:DesignHeight="450"
-             MinWidth="500"
-             MinHeight="400"
-             xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-             xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-             xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-             x:Class="Ryujinx.Ava.Ui.Controls.UserRecoverer"
-             Focusable="True">
+<UserControl 
+    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:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
+    mc:Ignorable="d"
+    d:DesignWidth="800"
+    d:DesignHeight="450"
+    MinWidth="500"
+    MinHeight="400"
+    x:Class="Ryujinx.Ava.UI.Controls.UserRecoverer"
+    Focusable="True">
     <Design.DataContext>
         <viewModels:UserProfileViewModel />
     </Design.DataContext>
@@ -32,7 +33,7 @@
             <ui:SymbolIcon Symbol="Back"/>
         </Button>
         <TextBlock Grid.Row="1"
-                   Text="{Locale:Locale UserProfilesRecoverHeading}"/>
+                   Text="{locale:Locale UserProfilesRecoverHeading}"/>
         <ListBox
             Margin="5"
             Grid.Row="2"
@@ -61,7 +62,7 @@
                                     HorizontalAlignment="Right"
                                     Command="{Binding Recover}"
                                     CommandParameter="{Binding}"
-                                    Content="{Locale:Locale Recover}"/>
+                                    Content="{locale:Locale Recover}"/>
                         </Grid>
                     </Border>
                 </DataTemplate>

+ 3 - 3
Ryujinx.Ava/Ui/Controls/UserRecoverer.axaml.cs → Ryujinx.Ava/UI/Controls/UserRecoverer.axaml.cs

@@ -4,10 +4,10 @@ using Avalonia.Interactivity;
 using Avalonia.Markup.Xaml;
 using FluentAvalonia.UI.Controls;
 using FluentAvalonia.UI.Navigation;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.ViewModels;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class UserRecoverer : UserControl
     {

+ 10 - 11
Ryujinx.Ava/Ui/Controls/UserSelector.axaml → Ryujinx.Ava/UI/Controls/UserSelector.axaml

@@ -1,21 +1,20 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Controls.UserSelector"
+    x:Class="Ryujinx.Ava.UI.Controls.UserSelector"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
+    xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:flex="clr-namespace:Avalonia.Flexbox;assembly=Avalonia.Flexbox"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-    xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     d:DesignHeight="450"
     MinWidth="500"
     d:DesignWidth="800"
     mc:Ignorable="d"
     Focusable="True">
     <UserControl.Resources>
-        <controls:BitmapArrayValueConverter x:Key="ByteImage" />
+        <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
     </UserControl.Resources>
     <Design.DataContext>
         <viewModels:UserProfileViewModel />
@@ -109,21 +108,21 @@
                 Grid.Column="0"
                 Margin="2"
                 Command="{Binding AddUser}" 
-                Content="{Locale:Locale UserProfilesAddNewProfile}" />
+                Content="{locale:Locale UserProfilesAddNewProfile}" />
             <Button
                 HorizontalAlignment="Stretch"
                 Grid.Row="0"
                 Margin="2"
                 Grid.Column="1"
                 Command="{Binding EditUser}"
-                Content="{Locale:Locale UserProfilesEditProfile}"
+                Content="{locale:Locale UserProfilesEditProfile}"
                 IsEnabled="{Binding IsSelectedProfiledEditable}" />
             <Button 
                 HorizontalAlignment="Stretch"
                 Grid.Row="1"
                 Grid.Column="0"
                 Margin="2"
-                Content="{Locale:Locale UserProfilesManageSaves}" 
+                Content="{locale:Locale UserProfilesManageSaves}" 
                 Command="{Binding ManageSaves}" />
             <Button
                 HorizontalAlignment="Stretch"
@@ -131,7 +130,7 @@
                 Grid.Column="1"
                 Margin="2"
                 Command="{Binding DeleteUser}"
-                Content="{Locale:Locale UserProfilesDeleteSelectedProfile}"
+                Content="{locale:Locale UserProfilesDeleteSelectedProfile}"
                 IsEnabled="{Binding IsSelectedProfileDeletable}" />
             <Button
                 HorizontalAlignment="Stretch"
@@ -140,7 +139,7 @@
                 Grid.Column="0"
                 Margin="2"
                 Command="{Binding RecoverLostAccounts}"
-                Content="{Locale:Locale UserProfilesRecoverLostAccounts}" />
+                Content="{locale:Locale UserProfilesRecoverLostAccounts}" />
         </Grid>
     </Grid>
 </UserControl>

+ 3 - 3
Ryujinx.Ava/Ui/Controls/UserSelector.axaml.cs → Ryujinx.Ava/UI/Controls/UserSelector.axaml.cs

@@ -2,10 +2,10 @@ using Avalonia.Controls;
 using Avalonia.Interactivity;
 using FluentAvalonia.UI.Controls;
 using FluentAvalonia.UI.Navigation;
-using Ryujinx.Ava.Ui.ViewModels;
-using UserProfile = Ryujinx.Ava.Ui.Models.UserProfile;
+using Ryujinx.Ava.UI.ViewModels;
+using UserProfile = Ryujinx.Ava.UI.Models.UserProfile;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Controls
 {
     public partial class UserSelector : UserControl
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/ApplicationOpenedEventArgs.cs → Ryujinx.Ava/UI/Helpers/ApplicationOpenedEventArgs.cs

@@ -1,7 +1,7 @@
 using Avalonia.Interactivity;
 using Ryujinx.Ui.App.Common;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class ApplicationOpenedEventArgs : RoutedEventArgs
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/AvaloniaGlxContext.cs → Ryujinx.Ava/UI/Helpers/AvaloniaGlxContext.cs

@@ -2,7 +2,7 @@
 using System;
 using System.Runtime.Versioning;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     [SupportedOSPlatform("linux")]
     internal class AvaloniaGlxContext : SPB.Platform.GLX.GLXOpenGLContext

+ 1 - 1
Ryujinx.Ava/Ui/Controls/AvaloniaWglContext.cs → Ryujinx.Ava/UI/Helpers/AvaloniaWglContext.cs

@@ -2,7 +2,7 @@
 using System;
 using System.Runtime.Versioning;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     [SupportedOSPlatform("windows")]
     internal class AvaloniaWglContext : SPB.Platform.WGL.WGLOpenGLContext

+ 1 - 1
Ryujinx.Ava/Ui/Controls/BitmapArrayValueConverter.cs → Ryujinx.Ava/UI/Helpers/BitmapArrayValueConverter.cs

@@ -5,7 +5,7 @@ using System;
 using System.Globalization;
 using System.IO;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     internal class BitmapArrayValueConverter : IValueConverter
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/ButtonKeyAssigner.cs → Ryujinx.Ava/UI/Helpers/ButtonKeyAssigner.cs

@@ -8,7 +8,7 @@ using System;
 using System.Linq;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     internal class ButtonKeyAssigner
     {

+ 3 - 4
Ryujinx.Ava/Ui/Controls/ContentDialogHelper.cs → Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs

@@ -1,20 +1,19 @@
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls.ApplicationLifetimes;
-using Avalonia.Controls.Primitives;
 using Avalonia.Media;
 using Avalonia.Threading;
 using FluentAvalonia.Core;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common.Logging;
 using System;
 using System.Threading;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public static class ContentDialogHelper
     {

+ 4 - 4
Ryujinx.Ava/Ui/Controls/EmbeddedWindow.cs → Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs

@@ -2,7 +2,7 @@ using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Platform;
-using Ryujinx.Ava.Ui.Helper;
+using Ryujinx.Ava.UI.Helper;
 using SPB.Graphics;
 using SPB.Platform;
 using SPB.Platform.GLX;
@@ -10,9 +10,9 @@ using System;
 using System.Runtime.InteropServices;
 using System.Runtime.Versioning;
 using System.Threading.Tasks;
-using static Ryujinx.Ava.Ui.Controls.Win32NativeInterop;
+using static Ryujinx.Ava.UI.Helpers.Win32NativeInterop;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class EmbeddedWindow : NativeControlHost
     {
@@ -199,7 +199,7 @@ namespace Ryujinx.Ava.Ui.Controls
                         KeyModifiers.None));
                     break;
             }
-            return DefWindowProc(hWnd, msg, (IntPtr)wParam, (IntPtr)lParam);
+            return DefWindowProc(hWnd, msg, wParam, lParam);
         }
 
         [SupportedOSPlatform("macos")]

+ 9 - 0
Ryujinx.Ava/UI/Helpers/Glyph.cs

@@ -0,0 +1,9 @@
+namespace Ryujinx.Ava.UI.Helpers
+{
+    public enum Glyph
+    {
+        List,
+        Grid,
+        Chip
+    }
+}

+ 1 - 1
Ryujinx.Ava/Ui/Controls/GlyphValueConverter.cs → Ryujinx.Ava/UI/Helpers/GlyphValueConverter.cs

@@ -4,7 +4,7 @@ using FluentAvalonia.UI.Controls;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class GlyphValueConverter : MarkupExtension
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/HotKeyControl.cs → Ryujinx.Ava/UI/Helpers/HotKeyControl.cs

@@ -4,7 +4,7 @@ using Avalonia.Input;
 using System;
 using System.Windows.Input;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class HotKeyControl : ContentControl, ICommandSource
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/IGlContextExtension.cs → Ryujinx.Ava/UI/Helpers/IGlContextExtension.cs

@@ -2,7 +2,7 @@ using Avalonia.OpenGL;
 using SPB.Graphics.OpenGL;
 using System;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     internal static class IGlContextExtension
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/KeyValueConverter.cs → Ryujinx.Ava/UI/Helpers/KeyValueConverter.cs

@@ -4,7 +4,7 @@ using Ryujinx.Common.Configuration.Hid.Controller;
 using System;
 using System.Globalization;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     internal class KeyValueConverter : IValueConverter
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/MiniCommand.cs → Ryujinx.Ava/UI/Helpers/MiniCommand.cs

@@ -2,7 +2,7 @@
 using System.Threading.Tasks;
 using System.Windows.Input;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Helpers
 {
     public sealed class MiniCommand<T> : MiniCommand, ICommand
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/OffscreenTextBox.cs → Ryujinx.Ava/UI/Helpers/OffscreenTextBox.cs

@@ -2,7 +2,7 @@ using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Interactivity;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class OffscreenTextBox : TextBox
     {

+ 1 - 4
Ryujinx.Ava/Ui/Controls/OpenGLEmbeddedWindow.cs → Ryujinx.Ava/UI/Helpers/OpenGLEmbeddedWindow.cs

@@ -1,16 +1,13 @@
-using Avalonia;
-using Avalonia.OpenGL;
 using OpenTK.Graphics.OpenGL;
 using Ryujinx.Common.Configuration;
 using SPB.Graphics;
 using SPB.Graphics.OpenGL;
 using SPB.Platform;
-using SPB.Platform.GLX;
 using SPB.Platform.WGL;
 using SPB.Windowing;
 using System;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class OpenGLEmbeddedWindow : EmbeddedWindow
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/OpenToolkitBindingsContext.cs → Ryujinx.Ava/UI/Helpers/OpenToolkitBindingsContext.cs

@@ -1,7 +1,7 @@
 using OpenTK;
 using System;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     internal class OpenToolkitBindingsContext : IBindingsContext
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/SPBOpenGLContext.cs → Ryujinx.Ava/UI/Helpers/SPBOpenGLContext.cs

@@ -5,7 +5,7 @@ using SPB.Graphics.OpenGL;
 using SPB.Platform;
 using SPB.Windowing;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     class SPBOpenGLContext : IOpenGLContext
     {

+ 2 - 2
Ryujinx.Ava/Ui/Controls/UserErrorDialog.cs → Ryujinx.Ava/UI/Helpers/UserErrorDialog.cs

@@ -1,10 +1,10 @@
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Ui.Common;
 using Ryujinx.Ui.Common.Helper;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     internal class UserErrorDialog
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/UserResult.cs → Ryujinx.Ava/UI/Helpers/UserResult.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     public enum UserResult
     {

+ 1 - 2
Ryujinx.Ava/Ui/Controls/VulkanEmbeddedWindow.cs → Ryujinx.Ava/UI/Helpers/VulkanEmbeddedWindow.cs

@@ -1,5 +1,4 @@
 using Avalonia.Platform;
-using Ryujinx.Ava.Ui.Controls;
 using Silk.NET.Vulkan;
 using SPB.Graphics.Vulkan;
 using SPB.Platform.GLX;
@@ -10,7 +9,7 @@ using SPB.Windowing;
 using System;
 using System.Runtime.Versioning;
 
-namespace Ryujinx.Ava.Ui
+namespace Ryujinx.Ava.UI.Helpers
 {
     public class VulkanEmbeddedWindow : EmbeddedWindow
     {

+ 1 - 1
Ryujinx.Ava/Ui/Controls/Win32NativeInterop.cs → Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs

@@ -2,7 +2,7 @@
 using System.Runtime.InteropServices;
 using System.Runtime.Versioning;
 
-namespace Ryujinx.Ava.Ui.Controls
+namespace Ryujinx.Ava.UI.Helpers
 {
     [SupportedOSPlatform("windows")]
     internal partial class Win32NativeInterop

+ 1 - 1
Ryujinx.Ava/Ui/Models/Amiibo.cs → Ryujinx.Ava/UI/Models/Amiibo.cs

@@ -2,7 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class Amiibo
     {

+ 2 - 2
Ryujinx.Ava/Ui/Models/CheatModel.cs → Ryujinx.Ava/UI/Models/CheatModel.cs

@@ -1,7 +1,7 @@
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.ViewModels;
 using System;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class CheatModel : BaseModel
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/CheatsList.cs → Ryujinx.Ava/UI/Models/CheatsList.cs

@@ -3,7 +3,7 @@ using System.Collections.Specialized;
 using System.ComponentModel;
 using System.Linq;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class CheatsList : ObservableCollection<CheatModel>
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/ControllerModel.cs → Ryujinx.Ava/UI/Models/ControllerModel.cs

@@ -1,6 +1,6 @@
 using Ryujinx.Common.Configuration.Hid;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     internal record ControllerModel(ControllerType Type, string Name);
 }

+ 1 - 1
Ryujinx.Ava/Ui/Models/DeviceType.cs → Ryujinx.Ava/UI/Models/DeviceType.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public enum DeviceType
     {

+ 2 - 2
Ryujinx.Ava/Ui/Models/DownloadableContentModel.cs → Ryujinx.Ava/UI/Models/DownloadableContentModel.cs

@@ -1,6 +1,6 @@
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.ViewModels;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class DownloadableContentModel : BaseModel
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/Generic/LastPlayedSortComparer.cs → Ryujinx.Ava/UI/Models/Generic/LastPlayedSortComparer.cs

@@ -3,7 +3,7 @@ using Ryujinx.Ui.App.Common;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.Ava.Ui.Models.Generic
+namespace Ryujinx.Ava.UI.Models.Generic
 {
     internal class LastPlayedSortComparer : IComparer<ApplicationData>
     {

+ 2 - 2
Ryujinx.Ava/Ui/Models/InputConfiguration.cs → Ryujinx.Ava/UI/Models/InputConfiguration.cs

@@ -1,11 +1,11 @@
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Common.Configuration.Hid;
 using Ryujinx.Common.Configuration.Hid.Controller;
 using Ryujinx.Common.Configuration.Hid.Controller.Motion;
 using Ryujinx.Common.Configuration.Hid.Keyboard;
 using System;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     internal class InputConfiguration<Key, Stick> : BaseModel
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/PlayerModel.cs → Ryujinx.Ava/UI/Models/PlayerModel.cs

@@ -1,6 +1,6 @@
 using Ryujinx.Common.Configuration.Hid;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public record PlayerModel(PlayerIndex Id, string Name);
 }

+ 1 - 1
Ryujinx.Ava/Ui/Models/ProfileImageModel.cs → Ryujinx.Ava/UI/Models/ProfileImageModel.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class ProfileImageModel
     {

+ 5 - 4
Ryujinx.Ava/Ui/Models/SaveModel.cs → Ryujinx.Ava/UI/Models/SaveModel.cs

@@ -4,9 +4,10 @@ using LibHac.Fs.Shim;
 using LibHac.Ncm;
 using Ryujinx.Ava.Common;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.ViewModels;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.Ui.App.Common;
 using System;
@@ -14,7 +15,7 @@ using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class SaveModel : BaseModel
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/StatusUpdatedEventArgs.cs → Ryujinx.Ava/UI/Models/StatusUpdatedEventArgs.cs

@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     internal class StatusUpdatedEventArgs : EventArgs
     {

+ 2 - 2
Ryujinx.Ava/Ui/Models/TempProfile.cs → Ryujinx.Ava/UI/Models/TempProfile.cs

@@ -1,8 +1,8 @@
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.HLE.HOS.Services.Account.Acc;
 using System;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class TempProfile : BaseModel
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/TimeZone.cs → Ryujinx.Ava/UI/Models/TimeZone.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     internal class TimeZone
     {

+ 1 - 1
Ryujinx.Ava/Ui/Models/TitleUpdateModel.cs → Ryujinx.Ava/UI/Models/TitleUpdateModel.cs

@@ -1,7 +1,7 @@
 using LibHac.Ns;
 using Ryujinx.Ava.Common.Locale;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     internal class TitleUpdateModel
     {

+ 3 - 3
Ryujinx.Ava/Ui/Models/UserProfile.cs → Ryujinx.Ava/UI/Models/UserProfile.cs

@@ -1,9 +1,9 @@
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.HLE.HOS.Services.Account.Acc;
 using Profile = Ryujinx.HLE.HOS.Services.Account.Acc.UserProfile;
 
-namespace Ryujinx.Ava.Ui.Models
+namespace Ryujinx.Ava.UI.Models
 {
     public class UserProfile : BaseModel
     {

+ 5 - 4
Ryujinx.Ava/Ui/ViewModels/AmiiboWindowViewModel.cs → Ryujinx.Ava/UI/ViewModels/AmiiboWindowViewModel.cs

@@ -3,9 +3,10 @@ using Avalonia.Collections;
 using Avalonia.Media.Imaging;
 using Avalonia.Threading;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Utilities;
@@ -19,7 +20,7 @@ using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     public class AmiiboWindowViewModel : BaseModel, IDisposable
     {

+ 2 - 2
Ryujinx.Ava/Ui/ViewModels/AvatarProfileViewModel.cs → Ryujinx.Ava/UI/ViewModels/AvatarProfileViewModel.cs

@@ -8,7 +8,7 @@ using LibHac.Ncm;
 using LibHac.Tools.Fs;
 using LibHac.Tools.FsSystem;
 using LibHac.Tools.FsSystem.NcaUtils;
-using Ryujinx.Ava.Ui.Models;
+using Ryujinx.Ava.UI.Models;
 using Ryujinx.HLE.FileSystem;
 using SixLabors.ImageSharp;
 using SixLabors.ImageSharp.Formats.Png;
@@ -24,7 +24,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using Color = Avalonia.Media.Color;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     internal class AvatarProfileViewModel : BaseModel, IDisposable
     {

+ 1 - 1
Ryujinx.Ava/Ui/ViewModels/BaseModel.cs → Ryujinx.Ava/UI/ViewModels/BaseModel.cs

@@ -1,7 +1,7 @@
 using System.ComponentModel;
 using System.Runtime.CompilerServices;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     public class BaseModel : INotifyPropertyChanged
     {

+ 5 - 4
Ryujinx.Ava/Ui/ViewModels/ControllerSettingsViewModel.cs → Ryujinx.Ava/UI/ViewModels/ControllerSettingsViewModel.cs

@@ -5,9 +5,10 @@ using Avalonia.Svg.Skia;
 using Avalonia.Threading;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.Input;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Configuration.Hid;
@@ -28,7 +29,7 @@ using ConfigGamepadInputId = Ryujinx.Common.Configuration.Hid.Controller.Gamepad
 using ConfigStickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId;
 using Key = Ryujinx.Common.Configuration.Hid.Key;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     public class ControllerSettingsViewModel : BaseModel, IDisposable
     {

+ 4 - 3
Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs → Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs

@@ -12,8 +12,9 @@ using LibHac.Ncm;
 using Ryujinx.Ava.Common;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.Input;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
@@ -35,7 +36,7 @@ using System.Threading.Tasks;
 using Path = System.IO.Path;
 using ShaderCacheLoadingState = Ryujinx.Graphics.Gpu.Shader.ShaderCacheState;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     internal class MainWindowViewModel : BaseModel
     {

+ 6 - 10
Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs → Ryujinx.Ava/UI/ViewModels/SettingsViewModel.cs

@@ -9,8 +9,9 @@ using Ryujinx.Audio.Backends.SDL2;
 using Ryujinx.Audio.Backends.SoundIo;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.Input;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Windows;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Configuration.Hid;
 using Ryujinx.Common.GraphicsDriver;
@@ -25,9 +26,9 @@ using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
-using TimeZone = Ryujinx.Ava.Ui.Models.TimeZone;
+using TimeZone = Ryujinx.Ava.UI.Models.TimeZone;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     internal class SettingsViewModel : BaseModel
     {
@@ -41,7 +42,6 @@ namespace Ryujinx.Ava.Ui.ViewModels
         private float _customResolutionScale;
         private int _resolutionScale;
         private int _graphicsBackendMultithreadingIndex;
-        private float _previousVolumeLevel;
         private float _volume;
         private bool _isVulkanAvailable = true;
         private bool _directoryChanged = false;
@@ -390,8 +390,6 @@ namespace Ryujinx.Ava.Ui.ViewModels
             TimeOffset = dateTimeOffset.TimeOfDay;
 
             KeyboardHotkeys = config.Hid.Hotkeys.Value;
-
-            _previousVolumeLevel = Volume;
         }
 
         public void SaveSettings()
@@ -479,9 +477,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
             config.ToFileFormat().SaveConfig(Program.ConfigurationPath);
 
             MainWindow.UpdateGraphicsConfig();
-
-            _previousVolumeLevel = Volume;
-
+            
             if (_owner is SettingsWindow owner)
             {
                 owner.ControllerSettings?.SaveCurrentProfile();

+ 9 - 7
Ryujinx.Ava/Ui/ViewModels/UserProfileViewModel.cs → Ryujinx.Ava/UI/ViewModels/UserProfileViewModel.cs

@@ -5,15 +5,17 @@ using LibHac.Common;
 using LibHac.Fs;
 using LibHac.Fs.Shim;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.HLE.HOS.Services.Account.Acc;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
-using UserProfile = Ryujinx.Ava.Ui.Models.UserProfile;
+using UserId = Ryujinx.HLE.HOS.Services.Account.Acc.UserId;
+using UserProfile = Ryujinx.Ava.UI.Models.UserProfile;
 
-namespace Ryujinx.Ava.Ui.ViewModels
+namespace Ryujinx.Ava.UI.ViewModels
 {
     public class UserProfileViewModel : BaseModel, IDisposable
     {
@@ -46,7 +48,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
             {
                 _selectedProfile = value;
 
-                OnPropertyChanged(nameof(SelectedProfile));
+                OnPropertyChanged();
                 OnPropertyChanged(nameof(IsHighlightedProfileDeletable));
                 OnPropertyChanged(nameof(IsHighlightedProfileEditable));
             }
@@ -63,7 +65,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
             {
                 _highlightedProfile = value;
 
-                OnPropertyChanged(nameof(HighlightedProfile));
+                OnPropertyChanged();
                 OnPropertyChanged(nameof(IsHighlightedProfileDeletable));
                 OnPropertyChanged(nameof(IsHighlightedProfileEditable));
             }
@@ -104,7 +106,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
 
             Span<SaveDataInfo> saveDataInfo = stackalloc SaveDataInfo[10];
 
-            HashSet<HLE.HOS.Services.Account.Acc.UserId> lostAccounts = new HashSet<HLE.HOS.Services.Account.Acc.UserId>();
+            HashSet<UserId> lostAccounts = new HashSet<UserId>();
 
             while (true)
             {
@@ -118,7 +120,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
                 for (int i = 0; i < readCount; i++)
                 {
                     var save = saveDataInfo[i];
-                    var id = new HLE.HOS.Services.Account.Acc.UserId((long)save.UserId.Id.Low, (long)save.UserId.Id.High);
+                    var id = new UserId((long)save.UserId.Id.Low, (long)save.UserId.Id.High);
                     if (Profiles.FirstOrDefault( x=> x.UserId == id) == null)
                     {
                         lostAccounts.Add(id);

+ 2 - 2
Ryujinx.Ava/Ui/Windows/AboutWindow.axaml → Ryujinx.Ava/UI/Windows/AboutWindow.axaml

@@ -1,11 +1,11 @@
 <window:StyleableWindow
-    x:Class="Ryujinx.Ava.Ui.Windows.AboutWindow"
+    x:Class="Ryujinx.Ava.UI.Windows.AboutWindow"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
+    xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
     Width="850"
     Height="550"
     MinWidth="500"

+ 1 - 1
Ryujinx.Ava/Ui/Windows/AboutWindow.axaml.cs → Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs

@@ -9,7 +9,7 @@ using System.Net.Http;
 using System.Net.NetworkInformation;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class AboutWindow : StyleableWindow
     {

+ 20 - 15
Ryujinx.Ava/Ui/Windows/AmiiboWindow.axaml → Ryujinx.Ava/UI/Windows/AmiiboWindow.axaml

@@ -1,18 +1,23 @@
-<window:StyleableWindow 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"
-                        mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="350"
-                        x:Class="Ryujinx.Ava.Ui.Windows.AmiiboWindow"
-                        xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
-                        xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-                        xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-                        CanResize="False"
-                        WindowStartupLocation="CenterOwner"
-                        Width="800" MinHeight="650" Height="650"
-                        SizeToContent="Manual"
-                        MinWidth="600"
-                        Focusable="True">
+<window:StyleableWindow 
+    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:window="clr-namespace:Ryujinx.Ava.UI.Windows"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
+    xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
+    mc:Ignorable="d" 
+    d:DesignWidth="400" 
+    d:DesignHeight="350"
+    x:Class="Ryujinx.Ava.UI.Windows.AmiiboWindow"
+    CanResize="False"
+    WindowStartupLocation="CenterOwner"
+    Width="800" 
+    MinHeight="650" 
+    Height="650"
+    SizeToContent="Manual"
+    MinWidth="600"
+    Focusable="True">
     <Design.DataContext>
         <viewModels:AmiiboWindowViewModel />
     </Design.DataContext>

+ 3 - 3
Ryujinx.Ava/Ui/Windows/AmiiboWindow.axaml.cs → Ryujinx.Ava/UI/Windows/AmiiboWindow.axaml.cs

@@ -1,9 +1,9 @@
 using Avalonia.Interactivity;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.ViewModels;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class AmiiboWindow : StyleableWindow
     {

+ 19 - 18
Ryujinx.Ava/Ui/Windows/AvatarWindow.axaml → Ryujinx.Ava/UI/Windows/AvatarWindow.axaml

@@ -1,23 +1,24 @@
-<UserControl xmlns="https://github.com/avaloniaui"
-        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-        xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-        mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="350"
-        x:Class="Ryujinx.Ava.Ui.Windows.AvatarWindow"
-		Margin="0"
-		Padding="0"
-        xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-        xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-        xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
-        x:CompileBindings="True"
-        x:DataType="viewModels:AvatarProfileViewModel"
-        Focusable="True">
+<UserControl 
+    xmlns="https://github.com/avaloniaui"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    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" d:DesignWidth="400" d:DesignHeight="350"
+    x:Class="Ryujinx.Ava.UI.Windows.AvatarWindow"
+    Margin="0"
+    Padding="0"
+    x:CompileBindings="True"
+    x:DataType="viewModels:AvatarProfileViewModel"
+    Focusable="True">
     <Design.DataContext>
         <viewModels:AvatarProfileViewModel />
     </Design.DataContext>
 	<UserControl.Resources>
-		<controls:BitmapArrayValueConverter x:Key="ByteImage" />
+		<helpers:BitmapArrayValueConverter x:Key="ByteImage" />
 	</UserControl.Resources>
     <Grid Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
         <Grid.RowDefinitions>
@@ -43,9 +44,9 @@
         <ProgressBar Grid.Row="2" IsIndeterminate="{Binding IsIndeterminate}" Value="{Binding ImagesLoaded}" HorizontalAlignment="Stretch" Margin="5"
                      Maximum="{Binding ImageCount}" Minimum="0" />
         <StackPanel Grid.Row="3" Orientation="Horizontal" Spacing="10" Margin="10" HorizontalAlignment="Center">
-            <Button Content="{Locale:Locale AvatarChoose}" Width="200" Name="ChooseButton" Click="ChooseButton_OnClick" />
+            <Button Content="{locale:Locale AvatarChoose}" Width="200" Name="ChooseButton" Click="ChooseButton_OnClick" />
             <ui:ColorPickerButton Color="{Binding BackgroundColor, Mode=TwoWay}" Name="ColorButton" />
-            <Button HorizontalAlignment="Right" Content="{Locale:Locale Discard}" Click="CloseButton_OnClick"
+            <Button HorizontalAlignment="Right" Content="{locale:Locale Discard}" Click="CloseButton_OnClick"
                     Name="CloseButton"
                     Width="200" />
         </StackPanel>

+ 4 - 4
Ryujinx.Ava/Ui/Windows/AvatarWindow.axaml.cs → Ryujinx.Ava/UI/Windows/AvatarWindow.axaml.cs

@@ -2,12 +2,12 @@ using Avalonia.Controls;
 using Avalonia.Interactivity;
 using FluentAvalonia.UI.Controls;
 using FluentAvalonia.UI.Navigation;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.HLE.FileSystem;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class AvatarWindow : UserControl
     {

+ 3 - 3
Ryujinx.Ava/Ui/Windows/CheatWindow.axaml → Ryujinx.Ava/UI/Windows/CheatWindow.axaml

@@ -1,12 +1,12 @@
 <window:StyleableWindow
-    x:Class="Ryujinx.Ava.Ui.Windows.CheatWindow"
+    x:Class="Ryujinx.Ava.UI.Windows.CheatWindow"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:model="clr-namespace:Ryujinx.Ava.Ui.Models"
-    xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
+    xmlns:model="clr-namespace:Ryujinx.Ava.UI.Models"
+    xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
     Width="500"
     Height="500"
     MinWidth="500"

+ 2 - 2
Ryujinx.Ava/Ui/Windows/CheatWindow.axaml.cs → Ryujinx.Ava/UI/Windows/CheatWindow.axaml.cs

@@ -1,13 +1,13 @@
 using Avalonia.Collections;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
+using Ryujinx.Ava.UI.Models;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.HLE.HOS;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class CheatWindow : StyleableWindow
     {

+ 29 - 0
Ryujinx.Ava/UI/Windows/ContentDialogOverlayWindow.axaml

@@ -0,0 +1,29 @@
+<window:StyleableWindow 
+    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:window="clr-namespace:Ryujinx.Ava.UI.Windows"
+    mc:Ignorable="d"
+    d:DesignWidth="800"
+    d:DesignHeight="450"
+    x:Class="Ryujinx.Ava.UI.Windows.ContentDialogOverlayWindow"
+    Title="ContentDialogOverlayWindow"
+    Focusable="True">
+    <window:StyleableWindow.Styles>
+        <Style Selector="ui|ContentDialog /template/ Panel#LayoutRoot">
+            <Setter Property="Background"
+                    Value="Transparent" />
+        </Style>
+    </window:StyleableWindow.Styles>
+    <ContentControl
+        Focusable="False"
+        IsVisible="False"
+        KeyboardNavigation.IsTabStop="False">
+        <ui:ContentDialog Name="ContentDialog"
+                          IsPrimaryButtonEnabled="True"
+                          IsSecondaryButtonEnabled="True"
+                          IsVisible="False" />
+    </ContentControl>
+</window:StyleableWindow>

+ 1 - 1
Ryujinx.Ava/Ui/Windows/ContentDialogOverlayWindow.axaml.cs → Ryujinx.Ava/UI/Windows/ContentDialogOverlayWindow.axaml.cs

@@ -3,7 +3,7 @@ using Avalonia.Controls;
 using Avalonia.Markup.Xaml;
 using Avalonia.Media;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class ContentDialogOverlayWindow : StyleableWindow
     {

+ 4 - 4
Ryujinx.Ava/Ui/Windows/ControllerSettingsWindow.axaml → Ryujinx.Ava/UI/Windows/ControllerSettingsWindow.axaml

@@ -1,13 +1,13 @@
 <UserControl
-    x:Class="Ryujinx.Ava.Ui.Windows.ControllerSettingsWindow"
+    x:Class="Ryujinx.Ava.UI.Windows.ControllerSettingsWindow"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     HorizontalAlignment="Stretch"
     VerticalAlignment="Stretch"
     d:DesignHeight="800"
@@ -19,7 +19,7 @@
         <viewModels:ControllerSettingsViewModel />
     </Design.DataContext>
     <UserControl.Resources>
-        <controls:KeyValueConverter x:Key="Key" />
+        <helpers:KeyValueConverter x:Key="Key" />
     </UserControl.Resources>
     <StackPanel
         HorizontalAlignment="Stretch"

+ 5 - 4
Ryujinx.Ava/Ui/Windows/ControllerSettingsWindow.axaml.cs → Ryujinx.Ava/UI/Windows/ControllerSettingsWindow.axaml.cs

@@ -4,15 +4,16 @@ using Avalonia.Input;
 using Avalonia.Interactivity;
 using Avalonia.LogicalTree;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Common.Configuration.Hid.Controller;
 using Ryujinx.Input;
 using Ryujinx.Input.Assigner;
 using System;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class ControllerSettingsWindow : UserControl
     {

+ 2 - 2
Ryujinx.Ava/Ui/Windows/DownloadableContentManagerWindow.axaml → Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml

@@ -1,11 +1,11 @@
 <window:StyleableWindow
-    x:Class="Ryujinx.Ava.Ui.Windows.DownloadableContentManagerWindow"
+    x:Class="Ryujinx.Ava.UI.Windows.DownloadableContentManagerWindow"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
+    xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
     Width="800"
     Height="500"
     MinWidth="800"

+ 4 - 3
Ryujinx.Ava/Ui/Windows/DownloadableContentManagerWindow.axaml.cs → Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml.cs

@@ -9,8 +9,9 @@ using LibHac.Tools.Fs;
 using LibHac.Tools.FsSystem;
 using LibHac.Tools.FsSystem.NcaUtils;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Utilities;
 using Ryujinx.HLE.FileSystem;
@@ -23,7 +24,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Path = System.IO.Path;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class DownloadableContentManagerWindow : StyleableWindow
     {

+ 1 - 1
Ryujinx.Ava/Ui/Windows/IconColorPicker.cs → Ryujinx.Ava/UI/Windows/IconColorPicker.cs

@@ -3,7 +3,7 @@ using SixLabors.ImageSharp.PixelFormats;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     static class IconColorPicker
     {

+ 13 - 13
Ryujinx.Ava/Ui/Windows/MainWindow.axaml → Ryujinx.Ava/UI/Windows/MainWindow.axaml

@@ -1,15 +1,15 @@
 <window:StyleableWindow
-    x:Class="Ryujinx.Ava.Ui.Windows.MainWindow"
+    x:Class="Ryujinx.Ava.UI.Windows.MainWindow"
     xmlns="https://github.com/avaloniaui"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
+    xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    xmlns:models="clr-namespace:Ryujinx.Ava.Ui.Models"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-    xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-    xmlns:window="clr-namespace:Ryujinx.Ava.Ui.Windows"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
+    xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
+    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     Title="Ryujinx"
     Width="1280"
     Height="777"
@@ -31,19 +31,19 @@
         <viewModels:MainWindowViewModel />
     </Design.DataContext>
     <Window.Resources>
-        <controls:BitmapArrayValueConverter x:Key="ByteImage" />
+        <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
     </Window.Resources>
     <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto" />
             <RowDefinition Height="*" />
         </Grid.RowDefinitions>
-        <controls:OffscreenTextBox Name="HiddenTextBox" Grid.Row="0" />
+        <helpers:OffscreenTextBox Name="HiddenTextBox" Grid.Row="0" />
         <StackPanel Grid.Row="0" IsVisible="False">
-            <controls:HotKeyControl Name="FullscreenHotKey" Command="{ReflectionBinding ToggleFullscreen}" />
-            <controls:HotKeyControl Name="FullscreenHotKey2" Command="{ReflectionBinding ToggleFullscreen}" />
-            <controls:HotKeyControl Name="DockToggleHotKey" Command="{ReflectionBinding ToggleDockMode}" />
-            <controls:HotKeyControl Name="ExitHotKey" Command="{ReflectionBinding ExitCurrentState}" />
+            <helpers:HotKeyControl Name="FullscreenHotKey" Command="{ReflectionBinding ToggleFullscreen}" />
+            <helpers:HotKeyControl Name="FullscreenHotKey2" Command="{ReflectionBinding ToggleFullscreen}" />
+            <helpers:HotKeyControl Name="DockToggleHotKey" Command="{ReflectionBinding ToggleDockMode}" />
+            <helpers:HotKeyControl Name="ExitHotKey" Command="{ReflectionBinding ExitCurrentState}" />
         </StackPanel>
         <Grid
             Grid.Row="1"
@@ -298,7 +298,7 @@
                                 HorizontalAlignment="Stretch"
                                 VerticalAlignment="Center"
                                 FontFamily="avares://FluentAvalonia/Fonts#Symbols"
-                                Glyph="{controls:GlyphValueConverter List}" />
+                                Glyph="{helpers:GlyphValueConverter List}" />
                         </Button>
                         <Button
                             Width="40"
@@ -312,7 +312,7 @@
                                 HorizontalAlignment="Stretch"
                                 VerticalAlignment="Center"
                                 FontFamily="avares://FluentAvalonia/Fonts#Symbols"
-                                Glyph="{controls:GlyphValueConverter Grid}" />
+                                Glyph="{helpers:GlyphValueConverter Grid}" />
                         </Button>
                         <TextBlock
                             Margin="10,0"

+ 6 - 5
Ryujinx.Ava/Ui/Windows/MainWindow.axaml.cs → Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs

@@ -8,10 +8,11 @@ using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.Input;
-using Ryujinx.Ava.Ui.Applet;
-using Ryujinx.Ava.Ui.Controls;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Applet;
+using Ryujinx.Ava.UI.Controls;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
 using Ryujinx.Graphics.Gpu;
@@ -32,7 +33,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using InputManager = Ryujinx.Input.HLE.InputManager;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class MainWindow : StyleableWindow
     {

+ 10 - 10
Ryujinx.Ava/Ui/Windows/MotionSettingsWindow.axaml → Ryujinx.Ava/UI/Windows/MotionSettingsWindow.axaml

@@ -1,13 +1,13 @@
-<UserControl 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:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-             xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-             xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-             mc:Ignorable="d"
-             x:Class="Ryujinx.Ava.Ui.Windows.MotionSettingsWindow"
-             Focusable="True">
+<UserControl 
+    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"
+    mc:Ignorable="d"
+    x:Class="Ryujinx.Ava.UI.Windows.MotionSettingsWindow"
+    Focusable="True">
     <Grid Margin="10">
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto" />

+ 3 - 3
Ryujinx.Ava/Ui/Windows/MotionSettingsWindow.axaml.cs → Ryujinx.Ava/UI/Windows/MotionSettingsWindow.axaml.cs

@@ -1,12 +1,12 @@
 using Avalonia.Controls;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.Ui.Models;
-using Ryujinx.Ava.Ui.ViewModels;
+using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Common.Configuration.Hid.Controller;
 using System.Threading.Tasks;
 
-namespace Ryujinx.Ava.Ui.Windows
+namespace Ryujinx.Ava.UI.Windows
 {
     public partial class MotionSettingsWindow : UserControl
     {

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini