diff --git a/src/Ryujinx/Systems/AppHost.cs b/src/Ryujinx/Systems/AppHost.cs index 89f9412ba..64de63407 100644 --- a/src/Ryujinx/Systems/AppHost.cs +++ b/src/Ryujinx/Systems/AppHost.cs @@ -4,7 +4,6 @@ using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; using DiscordRPC; -using Gommon; using LibHac.Common; using LibHac.Ns; using Ryujinx.Audio.Backends.Dummy; diff --git a/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs index 48bc1571a..f2ebbe6c2 100644 --- a/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs @@ -1,7 +1,6 @@ using DynamicData; using DynamicData.Kernel; using Gommon; -using LibHac; using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 727294992..47a99d886 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -11,13 +11,17 @@ namespace Ryujinx.Ava.UI.ViewModels { public partial class AboutWindowViewModel : BaseModel, IDisposable { - [ObservableProperty] private Bitmap _gitLabLogo; - [ObservableProperty] private Bitmap _discordLogo; - [ObservableProperty] private string _version; + [ObservableProperty] public partial Bitmap GitLabLogo { get; set; } - public string Developers => "GreemDev, LotP"; + [ObservableProperty] public partial Bitmap DiscordLogo { get; set; } - public string FormerDevelopers => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.AboutPageDeveloperListMore, "gdkchan, Ac_K, marysaka, rip in peri peri, LDj3SNuD, emmaus, Thealexbarney, GoffyDude, TSRBerry, IsaacMarovitz"); + [ObservableProperty] public partial string Version { get; set; } + + public static string Developers => "GreemDev, LotP"; + + public static string FormerDevelopers => LocaleManager.Instance.UpdateAndGetDynamicValue( + LocaleKeys.AboutPageDeveloperListMore, + "gdkchan, Ac_K, marysaka, rip in peri peri, LDj3SNuD, emmaus, Thealexbarney, GoffyDude, TSRBerry, IsaacMarovitz"); public AboutWindowViewModel() { @@ -36,7 +40,8 @@ namespace Ryujinx.Ava.UI.ViewModels private void UpdateLogoTheme(string theme) { - bool isDarkTheme = theme == "Dark" || (theme == "Auto" && RyujinxApp.DetectSystemTheme() == ThemeVariant.Dark); + bool isDarkTheme = theme == "Dark" || + (theme == "Auto" && RyujinxApp.DetectSystemTheme() == ThemeVariant.Dark); string themeName = isDarkTheme ? "Dark" : "Light"; diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index 51541b615..06ded822d 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -35,17 +35,13 @@ namespace Ryujinx.Ava.UI.ViewModels private readonly HttpClient _httpClient; private readonly AmiiboWindow _owner; - private Bitmap _amiiboImage; private List _amiiboList; private AvaloniaList _amiibos; private ObservableCollection _amiiboSeries; private int _amiiboSelectedIndex; private int _seriesSelectedIndex; - private bool _enableScanning; private bool _showAllAmiibo; - private bool _useRandomUuid = _cachedUseRandomUuid; - private string _usage; private static readonly AmiiboJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); @@ -82,14 +78,14 @@ namespace Ryujinx.Ava.UI.ViewModels public bool UseRandomUuid { - get => _useRandomUuid; + get; set { - _cachedUseRandomUuid = _useRandomUuid = value; + _cachedUseRandomUuid = field = value; OnPropertyChanged(); } - } + } = _cachedUseRandomUuid; public bool ShowAllAmiibo { @@ -155,10 +151,10 @@ namespace Ryujinx.Ava.UI.ViewModels public Bitmap AmiiboImage { - get => _amiiboImage; + get; set { - _amiiboImage = value; + field = value; OnPropertyChanged(); } @@ -166,10 +162,10 @@ namespace Ryujinx.Ava.UI.ViewModels public string Usage { - get => _usage; + get; set { - _usage = value; + field = value; OnPropertyChanged(); } @@ -177,10 +173,10 @@ namespace Ryujinx.Ava.UI.ViewModels public bool EnableScanning { - get => _enableScanning; + get; set { - _enableScanning = value; + field = value; OnPropertyChanged(); } diff --git a/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs b/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs index 643614d6e..b280c96c9 100644 --- a/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs @@ -7,14 +7,16 @@ namespace Ryujinx.Ava.UI.ViewModels { public partial class DlcSelectViewModel : BaseModel { - [ObservableProperty] private DownloadableContentModel[] _dlcs; + [ObservableProperty] + public partial DownloadableContentModel[] Dlcs { get; set; } #nullable enable - [ObservableProperty] private DownloadableContentModel? _selectedDlc; + [ObservableProperty] + public partial DownloadableContentModel? SelectedDlc { get; set; } #nullable disable public DlcSelectViewModel(ulong titleId, ApplicationLibrary appLibrary) { - _dlcs = appLibrary.FindDlcsFor(titleId) + Dlcs = appLibrary.FindDlcsFor(titleId) .OrderBy(it => it.IsBundled ? 0 : 1) .ThenBy(it => it.TitleId) .ToArray(); diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index c048b481c..39e53184f 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -19,10 +19,14 @@ namespace Ryujinx.Ava.UI.ViewModels public partial class DownloadableContentManagerViewModel : BaseModel { private readonly ApplicationLibrary _applicationLibrary; - private AvaloniaList _downloadableContents = []; - [ObservableProperty] private AvaloniaList _selectedDownloadableContents = []; - [ObservableProperty] private AvaloniaList _views = []; - [ObservableProperty] private bool _showBundledContentNotice = false; + [ObservableProperty] + public partial AvaloniaList SelectedDownloadableContents { get; set; } = []; + + [ObservableProperty] + public partial AvaloniaList Views { get; set; } = []; + + [ObservableProperty] + public partial bool ShowBundledContentNotice { get; set; } = false; private string _search; private readonly ApplicationData _applicationData; @@ -30,15 +34,15 @@ namespace Ryujinx.Ava.UI.ViewModels public AvaloniaList DownloadableContents { - get => _downloadableContents; + get; set { - _downloadableContents = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(UpdateCount)); Sort(); } - } + } = []; public string Search { @@ -51,10 +55,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public string UpdateCount - { - get => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count); - } + public string UpdateCount => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count); public DownloadableContentManagerViewModel(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index 61d3ffd59..2949b69a8 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -4,55 +4,50 @@ using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Views.Input; using Ryujinx.Common.Utilities; using Ryujinx.UI.Views.Input; -using System.Drawing; namespace Ryujinx.Ava.UI.ViewModels.Input { public partial class ControllerInputViewModel : BaseModel { - private GamepadInputConfig _config; public GamepadInputConfig Config { - get => _config; + get; set { - _config = value; + field = value; OnPropertyChanged(); } } - private StickVisualizer _visualizer; public StickVisualizer Visualizer { - get => _visualizer; + get; set { - _visualizer = value; + field = value; OnPropertyChanged(); } } - private bool _isLeft; public bool IsLeft { - get => _isLeft; + get; set { - _isLeft = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasSides)); } } - private bool _isRight; public bool IsRight { - get => _isRight; + get; set { - _isRight = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasSides)); } @@ -60,8 +55,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool HasSides => IsLeft ^ IsRight; - [ObservableProperty] private SvgImage _image; - + [ObservableProperty] + public partial SvgImage Image { get; set; } public InputViewModel ParentModel { get; } public ControllerInputViewModel(InputViewModel model, GamepadInputConfig config, StickVisualizer visualizer) @@ -75,7 +70,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input if (args.PropertyName is nameof(Config.UseRainbowLed)) { if (Config is { UseRainbowLed: true, TurnOffLed: false, EnableLedChanging: true }) - Rainbow.Updated += (ref Color color) => ParentModel.SelectedGamepad.SetLed((uint)color.ToArgb()); + Rainbow.Updated += (ref color) => ParentModel.SelectedGamepad.SetLed((uint)color.ToArgb()); else { Rainbow.Reset(); diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index bc0f066d0..9e6096cb1 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -48,36 +48,41 @@ namespace Ryujinx.Ava.UI.ViewModels.Input private int _controller; private string _controllerImage; private int _device; - private object _configViewModel; private bool _isChangeTrackingActive; - private string _chosenProfile; - [ObservableProperty] private bool _isModified; - [ObservableProperty] private string _profileName; - [ObservableProperty] private bool _notificationIsVisible; // Automatically call the NotificationView property with OnPropertyChanged() - [ObservableProperty] private string _notificationText; // Automatically call the NotificationText property with OnPropertyChanged() + [ObservableProperty] + public partial bool IsModified { get; set; } + + [ObservableProperty] + public partial string ProfileName { get; set; } + + [ObservableProperty] + public partial bool NotificationIsVisible { get; set; } // Automatically call the NotificationView property with OnPropertyChanged() + + [ObservableProperty] + public partial string NotificationText { get; set; } // Automatically call the NotificationText property with OnPropertyChanged() + private bool _isLoaded; private static readonly InputConfigJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); public IGamepadDriver AvaloniaKeyboardDriver { get; } - private IGamepad _selectedGamepad; - public IGamepad SelectedGamepad { - get => _selectedGamepad; + get; private set { Rainbow.Reset(); - _selectedGamepad = value; + field = value; if (ConfigViewModel is ControllerInputViewModel { Config.UseRainbowLed: true }) - Rainbow.Updated += (ref Color color) => _selectedGamepad.SetLed((uint)color.ToArgb()); + Rainbow.Updated += (ref Color color) => field.SetLed((uint)color.ToArgb()); OnPropertiesChanged(nameof(HasLed), nameof(CanClearLed)); } } + public StickVisualizer VisualStick { get; private set; } public ObservableCollection PlayerIndexes { get; set; } @@ -99,15 +104,15 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool CanClearLed => SelectedGamepad.Name.ContainsIgnoreCase("DualSense"); public event Action NotifyChangesEvent; - + public string ChosenProfile { - get => _chosenProfile; + get; set { // When you select a profile, the settings from the profile will be applied. // To save the settings, you still need to click the apply button - _chosenProfile = value; + field = value; LoadProfile(); OnPropertyChanged(); } @@ -115,10 +120,10 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public object ConfigViewModel { - get => _configViewModel; + get; set { - _configViewModel = value; + field = value; VisualStick.UpdateConfig(value); diff --git a/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs index bab8db7ce..178e2c955 100644 --- a/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs @@ -6,49 +6,45 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { public partial class KeyboardInputViewModel : BaseModel { - private KeyboardInputConfig _config; public KeyboardInputConfig Config { - get => _config; + get; set { - _config = value; + field = value; OnPropertyChanged(); } } - private StickVisualizer _visualizer; public StickVisualizer Visualizer { - get => _visualizer; + get; set { - _visualizer = value; + field = value; OnPropertyChanged(); } } - private bool _isLeft; public bool IsLeft { - get => _isLeft; + get; set { - _isLeft = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasSides)); } } - private bool _isRight; public bool IsRight { - get => _isRight; + get; set { - _isRight = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasSides)); } @@ -56,7 +52,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool HasSides => IsLeft ^ IsRight; - [ObservableProperty] private SvgImage _image; + [ObservableProperty] + public partial SvgImage Image { get; set; } public readonly InputViewModel ParentModel; diff --git a/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs index 71c404c21..516b892b5 100644 --- a/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs @@ -23,8 +23,11 @@ namespace Ryujinx.Ava.UI.ViewModels.Input ParentModel.SelectedGamepad.SetLed(LedColor.ToUInt32()); }); - [ObservableProperty] private bool _enableLedChanging; - [ObservableProperty] private Color _ledColor; + [ObservableProperty] + public partial bool EnableLedChanging { get; set; } + + [ObservableProperty] + public partial Color LedColor { get; set; } public string RainbowSpeedText => RainbowSpeed.ToString(CultureInfo.CurrentCulture).Truncate(4, string.Empty); @@ -41,27 +44,23 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool ShowLedColorPicker => !TurnOffLed && !UseRainbowLed; - private bool _turnOffLed; - public bool TurnOffLed { - get => _turnOffLed; + get; set { - _turnOffLed = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(ShowLedColorPicker)); } } - private bool _useRainbowLed; - public bool UseRainbowLed { - get => _useRainbowLed; + get; set { - _useRainbowLed = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(ShowLedColorPicker)); } diff --git a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs index ba8686831..ad9a70eaa 100644 --- a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs @@ -4,20 +4,28 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { public partial class MotionInputViewModel : BaseModel { - [ObservableProperty] private int _slot; + [ObservableProperty] + public partial int Slot { get; set; } - [ObservableProperty] private int _altSlot; + [ObservableProperty] + public partial int AltSlot { get; set; } - [ObservableProperty] private string _dsuServerHost; + [ObservableProperty] + public partial string DsuServerHost { get; set; } - [ObservableProperty] private int _dsuServerPort; + [ObservableProperty] + public partial int DsuServerPort { get; set; } - [ObservableProperty] private bool _mirrorInput; + [ObservableProperty] + public partial bool MirrorInput { get; set; } - [ObservableProperty] private int _sensitivity; + [ObservableProperty] + public partial int Sensitivity { get; set; } - [ObservableProperty] private double _gyroDeadzone; + [ObservableProperty] + public partial double GyroDeadzone { get; set; } - [ObservableProperty] private bool _enableCemuHookMotion; + [ObservableProperty] + public partial bool EnableCemuHookMotion { get; set; } } } diff --git a/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs index c4158fced..e2323f567 100644 --- a/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs @@ -4,8 +4,10 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { public partial class RumbleInputViewModel : BaseModel { - [ObservableProperty] private float _strongRumble; + [ObservableProperty] + public partial float StrongRumble { get; set; } - [ObservableProperty] private float _weakRumble; + [ObservableProperty] + public partial float WeakRumble { get; set; } } } diff --git a/src/Ryujinx/UI/ViewModels/LdnGamesListViewModel.cs b/src/Ryujinx/UI/ViewModels/LdnGamesListViewModel.cs index 4bd9aa92d..7a924acb3 100644 --- a/src/Ryujinx/UI/ViewModels/LdnGamesListViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/LdnGamesListViewModel.cs @@ -91,10 +91,8 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(nameof(VisibleEntries)); } - [ObservableProperty] private bool _isRefreshing; - private bool _onlyShowForOwnedGames; - private bool _onlyShowPublicGames = true; - private bool _onlyShowJoinableGames = true; + [ObservableProperty] + public partial bool IsRefreshing { get; set; } public async Task RefreshAsync() { @@ -109,12 +107,12 @@ namespace Ryujinx.Ava.UI.ViewModels public bool OnlyShowForOwnedGames { - get => _onlyShowForOwnedGames; + get; set { OnPropertyChanging(); OnPropertyChanging(nameof(VisibleEntries)); - _onlyShowForOwnedGames = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(VisibleEntries)); } @@ -122,29 +120,29 @@ namespace Ryujinx.Ava.UI.ViewModels public bool OnlyShowPublicGames { - get => _onlyShowPublicGames; + get; set { OnPropertyChanging(); OnPropertyChanging(nameof(VisibleEntries)); - _onlyShowPublicGames = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(VisibleEntries)); } - } + } = true; public bool OnlyShowJoinableGames { - get => _onlyShowJoinableGames; + get; set { OnPropertyChanging(); OnPropertyChanging(nameof(VisibleEntries)); - _onlyShowJoinableGames = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(VisibleEntries)); } - } + } = true; public void NameSorting(int nameSort = 0) diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index abfe5a4c5..45e67add0 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -24,9 +24,11 @@ namespace Ryujinx.Ava.UI.ViewModels { private readonly string _modJsonPath; - private AvaloniaList _mods = []; - [ObservableProperty] private AvaloniaList _views = []; - [ObservableProperty] private AvaloniaList _selectedMods = []; + [ObservableProperty] + public partial AvaloniaList Views { get; set; } = []; + + [ObservableProperty] + public partial AvaloniaList SelectedMods { get; set; } = []; private string _search; private readonly ulong _applicationId; @@ -37,15 +39,15 @@ namespace Ryujinx.Ava.UI.ViewModels public AvaloniaList Mods { - get => _mods; + get; set { - _mods = value; + field = value; OnPropertyChanged(); OnPropertyChanged(nameof(ModCount)); Sort(); } - } + } = []; public string Search { @@ -58,10 +60,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public string ModCount - { - get => string.Format(LocaleManager.Instance[LocaleKeys.ModWindowHeading], Mods.Count); - } + public string ModCount => string.Format(LocaleManager.Instance[LocaleKeys.ModWindowHeading], Mods.Count); public ModManagerViewModel(ulong applicationId, ulong applicationIdBase, ApplicationLibrary appLibrary) { diff --git a/src/Ryujinx/UI/ViewModels/ProfileSelectorDialogViewModel.cs b/src/Ryujinx/UI/ViewModels/ProfileSelectorDialogViewModel.cs index 979e1616a..0aa326b55 100644 --- a/src/Ryujinx/UI/ViewModels/ProfileSelectorDialogViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ProfileSelectorDialogViewModel.cs @@ -7,8 +7,10 @@ namespace Ryujinx.Ava.UI.ViewModels public partial class ProfileSelectorDialogViewModel : BaseModel { - [ObservableProperty] private UserId _selectedUserId; + [ObservableProperty] + public partial UserId SelectedUserId { get; set; } - [ObservableProperty] private ObservableCollection _profiles = []; + [ObservableProperty] + public partial ObservableCollection Profiles { get; set; } = []; } } diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index 230887e34..65e91f41f 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -15,9 +15,13 @@ namespace Ryujinx.Ava.UI.ViewModels _baseViewModel = settingsVm; } - [ObservableProperty] private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; - [ObservableProperty] private bool _nifmDisableIsAnyInternetRequestAccepted = ConfigurationState.Instance.Hacks.DisableNifmIsAnyInternetRequestAccepted; + [ObservableProperty] + public partial bool Xc2MenuSoftlockFix { get; set; } = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + [ObservableProperty] + public partial bool NifmDisableIsAnyInternetRequestAccepted { get; set; } = ConfigurationState.Instance.Hacks.DisableNifmIsAnyInternetRequestAccepted; + + public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => { sb.AppendLine( diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 54fd951fb..7d42c004c 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -53,7 +53,7 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] private bool _isVulkanAvailable = true; [ObservableProperty] private bool _gameListNeedsRefresh; private readonly List _gpuIds = []; - public bool _useInputGlobalConfig; + private bool _useInputGlobalConfig; private int _graphicsBackendIndex; private int _scalingFilter; private int _scalingFilterLevel; diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index 74876774e..3d34643ab 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -21,10 +21,17 @@ namespace Ryujinx.Ava.UI.ViewModels private ApplicationLibrary ApplicationLibrary { get; } private ApplicationData ApplicationData { get; } - [ObservableProperty] private AvaloniaList _titleUpdates = []; - [ObservableProperty] private AvaloniaList _views = []; - [ObservableProperty] private object _selectedUpdate = new TitleUpdateViewModelNoUpdate(); - [ObservableProperty] private bool _showBundledContentNotice; + [ObservableProperty] + public partial AvaloniaList TitleUpdates { get; set; } = []; + + [ObservableProperty] + public partial AvaloniaList Views { get; set; } = []; + + [ObservableProperty] + public partial object SelectedUpdate { get; set; } = new TitleUpdateViewModelNoUpdate(); + + [ObservableProperty] + public partial bool ShowBundledContentNotice { get; set; } private readonly IStorageProvider _storageProvider; diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index 8c6a71038..9b1c75b2e 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -25,14 +25,15 @@ namespace Ryujinx.Ava.UI.ViewModels { private static readonly Dictionary _avatarStore = new(); - [ObservableProperty] private ObservableCollection _images; - [ObservableProperty] private Color _backgroundColor = Colors.White; + [ObservableProperty] + public partial ObservableCollection Images { get; set; } - private int _selectedIndex; + [ObservableProperty] + public partial Color BackgroundColor { get; set; } = Colors.White; public UserFirmwareAvatarSelectorViewModel() { - _images = []; + Images = []; LoadImagesFromStore(); PropertyChanged += (_, args) => @@ -44,21 +45,17 @@ namespace Ryujinx.Ava.UI.ViewModels public int SelectedIndex { - get => _selectedIndex; + get; set { - _selectedIndex = value; + field = value; - if (_selectedIndex == -1) - { - SelectedImage = null; - } - else - { - SelectedImage = Images[_selectedIndex].Data; - } + SelectedImage = field == -1 + ? null + : Images[field].Data; OnPropertyChanged(); + OnPropertyChanged(nameof(SelectedImage)); } } diff --git a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs index f9f9ca2f5..5a6af229d 100644 --- a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs @@ -4,6 +4,7 @@ namespace Ryujinx.Ava.UI.ViewModels { public partial class UserProfileImageSelectorViewModel : BaseModel { - [ObservableProperty] private bool _firmwareFound; + [ObservableProperty] + public partial bool FirmwareFound { get; set; } } } diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs index eb7fa0fef..34c83372a 100644 --- a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs @@ -10,11 +10,21 @@ namespace Ryujinx.Ava.UI.ViewModels { public partial class UserSaveManagerViewModel : BaseModel { - [ObservableProperty] private int _sortIndex; - [ObservableProperty] private int _orderIndex; - [ObservableProperty] private string _search; - [ObservableProperty] private ObservableCollection _saves = []; - [ObservableProperty] private ObservableCollection _views = []; + [ObservableProperty] + public partial int SortIndex { get; set; } + + [ObservableProperty] + public partial int OrderIndex { get; set; } + + [ObservableProperty] + public partial string Search { get; set; } + + [ObservableProperty] + public partial ObservableCollection Saves { get; set; } = []; + + [ObservableProperty] + public partial ObservableCollection Views { get; set; } = []; + private readonly AccountManager _accountManager; public string SaveManagerHeading => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.SaveManagerHeading, _accountManager.LastOpenedUser.Name, _accountManager.LastOpenedUser.UserId); diff --git a/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs index dab42fbf8..1281cc834 100644 --- a/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs @@ -18,7 +18,8 @@ namespace Ryujinx.Ava.UI.ViewModels { public class XciTrimmerViewModel : BaseModel { - private const long _bytesPerMB = 1024 * 1024; + private const long BytesPerMb = 1024 * 1024; + private enum ProcessingMode { Trimming, @@ -44,7 +45,6 @@ namespace Ryujinx.Ava.UI.ViewModels private string _search; private ProcessingMode _processingMode; private SortField _sortField = SortField.Name; - private bool _sortAscending = true; public XciTrimmerViewModel(MainWindowViewModel mainWindowViewModel) { @@ -472,15 +472,16 @@ namespace Ryujinx.Ava.UI.ViewModels }; } } + public bool SortingAscending { - get => _sortAscending; + get; set { - _sortAscending = value; + field = value; SortingChanged(); } - } + } = true; public bool IsSortedByName { @@ -516,7 +517,7 @@ namespace Ryujinx.Ava.UI.ViewModels { get { - return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerSavingsMb], AllXCIFiles.Sum(xci => xci.PotentialSavingsB / _bytesPerMB)); + return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerSavingsMb], AllXCIFiles.Sum(xci => xci.PotentialSavingsB / BytesPerMb)); } } @@ -524,7 +525,7 @@ namespace Ryujinx.Ava.UI.ViewModels { get { - return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerSavingsMb], AllXCIFiles.Sum(xci => xci.CurrentSavingsB / _bytesPerMB)); + return string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerSavingsMb], AllXCIFiles.Sum(xci => xci.CurrentSavingsB / BytesPerMb)); } }