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