mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-11-20 04:16:34 +00:00
Adjust SettingsInputViewModel for new system
This commit is contained in:
parent
ddbdd0246a
commit
2e48ef62fa
4 changed files with 72 additions and 86 deletions
|
@ -35,6 +35,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
{
|
||||
public class SettingsInputViewModel : BaseModel, IDisposable
|
||||
{
|
||||
public event Action DirtyEvent;
|
||||
|
||||
private const string Disabled = "disabled";
|
||||
private const string ProControllerResource = "Ryujinx.UI.Common/Resources/Controller_ProCon.svg";
|
||||
private const string JoyConPairResource = "Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg";
|
||||
|
@ -85,8 +87,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
|
||||
public event Action NotifyChangesEvent;
|
||||
|
||||
private readonly SettingsViewModel _settingsViewModel;
|
||||
|
||||
public object ConfigViewModel
|
||||
{
|
||||
get => _configViewModel;
|
||||
|
@ -239,10 +239,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
|
||||
public InputConfig Config { get; set; }
|
||||
|
||||
public SettingsInputViewModel(UserControl owner, SettingsViewModel settingsViewModel) : this()
|
||||
public SettingsInputViewModel(UserControl owner) : this()
|
||||
{
|
||||
_settingsViewModel = settingsViewModel;
|
||||
|
||||
if (Program.PreviewerDetached)
|
||||
{
|
||||
_mainWindow =
|
||||
|
@ -754,37 +752,35 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
|
||||
return;
|
||||
}
|
||||
|
||||
bool validFileName = ProfileName.IndexOfAny(Path.GetInvalidFileNameChars()) == -1;
|
||||
|
||||
if (validFileName)
|
||||
{
|
||||
string path = Path.Combine(GetProfileBasePath(), ProfileName + ".json");
|
||||
|
||||
InputConfig config = null;
|
||||
|
||||
if (IsKeyboard)
|
||||
{
|
||||
config = (ConfigViewModel as KeyboardInputViewModel).Config.GetConfig();
|
||||
}
|
||||
else if (IsController)
|
||||
{
|
||||
config = (ConfigViewModel as ControllerInputViewModel).Config.GetConfig();
|
||||
}
|
||||
|
||||
config.ControllerType = Controllers[_controller].Type;
|
||||
|
||||
string jsonString = JsonHelper.Serialize(config, _serializerContext.InputConfig);
|
||||
|
||||
await File.WriteAllTextAsync(path, jsonString);
|
||||
|
||||
LoadProfiles();
|
||||
}
|
||||
else
|
||||
{
|
||||
bool validFileName = ProfileName.IndexOfAny(Path.GetInvalidFileNameChars()) == -1;
|
||||
|
||||
if (validFileName)
|
||||
{
|
||||
string path = Path.Combine(GetProfileBasePath(), ProfileName + ".json");
|
||||
|
||||
InputConfig config = null;
|
||||
|
||||
if (IsKeyboard)
|
||||
{
|
||||
config = (ConfigViewModel as KeyboardInputViewModel).Config.GetConfig();
|
||||
}
|
||||
else if (IsController)
|
||||
{
|
||||
config = (ConfigViewModel as ControllerInputViewModel).Config.GetConfig();
|
||||
}
|
||||
|
||||
config.ControllerType = Controllers[_controller].Type;
|
||||
|
||||
string jsonString = JsonHelper.Serialize(config, _serializerContext.InputConfig);
|
||||
|
||||
await File.WriteAllTextAsync(path, jsonString);
|
||||
|
||||
LoadProfiles();
|
||||
}
|
||||
else
|
||||
{
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogProfileInvalidProfileNameErrorMessage]);
|
||||
}
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogProfileInvalidProfileNameErrorMessage]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -815,17 +811,17 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
}
|
||||
}
|
||||
|
||||
public void Save()
|
||||
public void Save(ConfigurationState config)
|
||||
{
|
||||
List<InputConfig> newConfig = new();
|
||||
List<InputConfig> newInputConfig = new();
|
||||
|
||||
newConfig.AddRange(ConfigurationState.Instance.Hid.InputConfig.Value);
|
||||
newInputConfig.AddRange(ConfigurationState.Instance.Hid.InputConfig.Value);
|
||||
|
||||
newConfig.Remove(newConfig.Find(x => x == null));
|
||||
newInputConfig.Remove(newInputConfig.Find(x => x == null));
|
||||
|
||||
if (Device == 0)
|
||||
{
|
||||
newConfig.Remove(newConfig.Find(x => x.PlayerIndex == this.PlayerId));
|
||||
newInputConfig.Remove(newInputConfig.Find(x => x.PlayerIndex == this.PlayerId));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -833,48 +829,41 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
|
||||
if (device.Type == DeviceType.Keyboard)
|
||||
{
|
||||
var inputConfig = (ConfigViewModel as KeyboardInputViewModel).Config;
|
||||
inputConfig.Id = device.Id;
|
||||
var keyboardConfig = (ConfigViewModel as KeyboardInputViewModel).Config;
|
||||
keyboardConfig.Id = device.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
var inputConfig = (ConfigViewModel as ControllerInputViewModel).Config;
|
||||
inputConfig.Id = device.Id.Split(" ")[0];
|
||||
var controllerConfig = (ConfigViewModel as ControllerInputViewModel).Config;
|
||||
controllerConfig.Id = device.Id.Split(" ")[0];
|
||||
}
|
||||
|
||||
var config = !IsController
|
||||
var inputConfig = !IsController
|
||||
? (ConfigViewModel as KeyboardInputViewModel).Config.GetConfig()
|
||||
: (ConfigViewModel as ControllerInputViewModel).Config.GetConfig();
|
||||
config.ControllerType = Controllers[_controller].Type;
|
||||
config.PlayerIndex = _playerId;
|
||||
inputConfig.ControllerType = Controllers[_controller].Type;
|
||||
inputConfig.PlayerIndex = _playerId;
|
||||
|
||||
int i = newConfig.FindIndex(x => x.PlayerIndex == PlayerId);
|
||||
int i = newInputConfig.FindIndex(x => x.PlayerIndex == PlayerId);
|
||||
if (i == -1)
|
||||
{
|
||||
newConfig.Add(config);
|
||||
newInputConfig.Add(inputConfig);
|
||||
}
|
||||
else
|
||||
{
|
||||
newConfig[i] = config;
|
||||
newInputConfig[i] = inputConfig;
|
||||
}
|
||||
}
|
||||
|
||||
_mainWindow.ViewModel.AppHost?.NpadManager.ReloadConfiguration(newConfig, ConfigurationState.Instance.Hid.EnableKeyboard, ConfigurationState.Instance.Hid.EnableMouse);
|
||||
_mainWindow.ViewModel.AppHost?.NpadManager.ReloadConfiguration(newInputConfig, ConfigurationState.Instance.Hid.EnableKeyboard, ConfigurationState.Instance.Hid.EnableMouse);
|
||||
|
||||
// Atomically replace and signal input change.
|
||||
// NOTE: Do not modify InputConfig.Value directly as other code depends on the on-change event.
|
||||
ConfigurationState.Instance.Hid.InputConfig.Value = newConfig;
|
||||
config.Hid.InputConfig.Value = newInputConfig;
|
||||
|
||||
ConfigurationState.Instance.System.EnableDockedMode.Value = EnableDockedMode;
|
||||
ConfigurationState.Instance.Hid.EnableKeyboard.Value = EnableKeyboard;
|
||||
ConfigurationState.Instance.Hid.EnableMouse.Value = EnableMouse;
|
||||
|
||||
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||
}
|
||||
|
||||
public void NotifyChange(string property)
|
||||
{
|
||||
OnPropertyChanged(property);
|
||||
config.System.EnableDockedMode.Value = EnableDockedMode;
|
||||
config.Hid.EnableKeyboard.Value = EnableKeyboard;
|
||||
config.Hid.EnableMouse.Value = EnableMouse;
|
||||
}
|
||||
|
||||
public void NotifyChanges()
|
||||
|
|
|
@ -2,7 +2,6 @@ using Avalonia.Collections;
|
|||
using Avalonia.Threading;
|
||||
using LibHac.Tools.FsSystem;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.UI.Models.Input;
|
||||
using Ryujinx.Ava.UI.Windows;
|
||||
using Ryujinx.Common.Configuration;
|
||||
using Ryujinx.Common.Configuration.Multiplayer;
|
||||
|
@ -47,7 +46,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
}
|
||||
|
||||
public event Action CloseWindow;
|
||||
public event Action SaveSettingsEvent;
|
||||
public event Action<bool> DirtyEvent;
|
||||
public event Action<bool> ToggleButtons;
|
||||
|
||||
|
@ -172,6 +170,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
private readonly SettingsCpuViewModel _cpuViewModel;
|
||||
private readonly SettingsGraphicsViewModel _graphicsViewModel;
|
||||
private readonly SettingsLoggingViewModel _loggingViewModel;
|
||||
private readonly SettingsInputViewModel _inputViewModel;
|
||||
private readonly SettingsHotkeysViewModel _hotkeysViewModel;
|
||||
|
||||
public DateTimeOffset CurrentDate { get; set; }
|
||||
|
@ -212,6 +211,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
SettingsCpuViewModel cpuViewModel,
|
||||
SettingsGraphicsViewModel graphicsViewModel,
|
||||
SettingsHotkeysViewModel hotkeysViewModel,
|
||||
SettingsInputViewModel inputViewModel,
|
||||
SettingsLoggingViewModel loggingViewModel) : this()
|
||||
{
|
||||
_virtualFileSystem = virtualFileSystem;
|
||||
|
@ -221,12 +221,14 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
_cpuViewModel = cpuViewModel;
|
||||
_graphicsViewModel = graphicsViewModel;
|
||||
_hotkeysViewModel = hotkeysViewModel;
|
||||
_inputViewModel = inputViewModel;
|
||||
_loggingViewModel = loggingViewModel;
|
||||
|
||||
_audioViewModel.DirtyEvent += CheckIfModified;
|
||||
_cpuViewModel.DirtyEvent += CheckIfModified;
|
||||
_graphicsViewModel.DirtyEvent += CheckIfModified;
|
||||
_hotkeysViewModel.DirtyEvent += CheckIfModified;
|
||||
_inputViewModel.DirtyEvent += CheckIfModified;
|
||||
_loggingViewModel.DirtyEvent += CheckIfModified;
|
||||
|
||||
if (Program.PreviewerDetached)
|
||||
|
@ -303,6 +305,12 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
isDirty |= _hotkeysViewModel.CheckIfModified(config);
|
||||
}
|
||||
|
||||
if (_inputViewModel != null)
|
||||
{
|
||||
// TODO: IMPLEMENT THIS!!
|
||||
// isDirty |= _inputViewModel.CheckIfModified(config);
|
||||
}
|
||||
|
||||
// Network
|
||||
isDirty |= config.System.EnableInternetAccess.Value != EnableInternetAccess;
|
||||
|
||||
|
@ -443,6 +451,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
_cpuViewModel?.Save(config);
|
||||
_graphicsViewModel?.Save(config);
|
||||
_hotkeysViewModel?.Save(config);
|
||||
_inputViewModel?.Save(config);
|
||||
|
||||
// Network
|
||||
config.System.EnableInternetAccess.Value = EnableInternetAccess;
|
||||
|
@ -456,8 +465,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Settings
|
|||
|
||||
MainWindow.UpdateGraphicsConfig();
|
||||
|
||||
SaveSettingsEvent?.Invoke();
|
||||
|
||||
_directoryChanged = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,23 +5,18 @@ namespace Ryujinx.Ava.UI.Views.Settings
|
|||
{
|
||||
public partial class SettingsInputView : UserControl
|
||||
{
|
||||
private readonly SettingsInputViewModel _viewModel;
|
||||
public SettingsInputViewModel ViewModel;
|
||||
|
||||
public SettingsInputView(SettingsViewModel viewModel)
|
||||
public SettingsInputView()
|
||||
{
|
||||
DataContext = _viewModel = new SettingsInputViewModel(this, viewModel);
|
||||
DataContext = ViewModel = new SettingsInputViewModel(this);
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SaveCurrentProfile()
|
||||
{
|
||||
_viewModel.Save();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_viewModel.Dispose();
|
||||
ViewModel.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ namespace Ryujinx.Ava.UI.Windows
|
|||
CpuPage = new SettingsCpuView();
|
||||
GraphicsPage = new SettingsGraphicsView();
|
||||
HotkeysPage = new SettingsHotkeysView();
|
||||
InputPage = new SettingsInputView();
|
||||
LoggingPage = new SettingsLoggingView();
|
||||
|
||||
ViewModel = new SettingsViewModel(
|
||||
|
@ -42,17 +43,16 @@ namespace Ryujinx.Ava.UI.Windows
|
|||
CpuPage.ViewModel,
|
||||
GraphicsPage.ViewModel,
|
||||
HotkeysPage.ViewModel,
|
||||
InputPage.ViewModel,
|
||||
LoggingPage.ViewModel);
|
||||
|
||||
UiPage = new SettingsUiView(ViewModel);
|
||||
InputPage = new SettingsInputView(ViewModel);
|
||||
SystemPage = new SettingsSystemView(ViewModel);
|
||||
NetworkPage = new SettingsNetworkView();
|
||||
|
||||
DataContext = ViewModel;
|
||||
|
||||
ViewModel.CloseWindow += Close;
|
||||
ViewModel.SaveSettingsEvent += SaveSettings;
|
||||
ViewModel.DirtyEvent += UpdateDirtyTitle;
|
||||
ViewModel.ToggleButtons += ToggleButtons;
|
||||
|
||||
|
@ -93,16 +93,6 @@ namespace Ryujinx.Ava.UI.Windows
|
|||
Buttons.IsEnabled = enable;
|
||||
}
|
||||
|
||||
public void SaveSettings()
|
||||
{
|
||||
InputPage.SaveCurrentProfile();
|
||||
|
||||
if (Owner is MainWindow window && ViewModel.DirectoryChanged)
|
||||
{
|
||||
window.LoadApplications();
|
||||
}
|
||||
}
|
||||
|
||||
private void Load()
|
||||
{
|
||||
NavPanel.SelectionChanged += NavPanelOnSelectionChanged;
|
||||
|
@ -177,6 +167,11 @@ namespace Ryujinx.Ava.UI.Windows
|
|||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
if (Owner is MainWindow window && ViewModel.DirectoryChanged)
|
||||
{
|
||||
window.LoadApplications();
|
||||
}
|
||||
|
||||
HotkeysPage.Dispose();
|
||||
InputPage.Dispose();
|
||||
base.OnClosing(e);
|
||||
|
|
Loading…
Reference in a new issue