diff --git a/UI/Debugger/Windows/DebugLogWindow.axaml.cs b/UI/Debugger/Windows/DebugLogWindow.axaml.cs index 079d42a1..225ed1ab 100644 --- a/UI/Debugger/Windows/DebugLogWindow.axaml.cs +++ b/UI/Debugger/Windows/DebugLogWindow.axaml.cs @@ -82,7 +82,6 @@ namespace Mesen.Debugger.Windows } _timer.Stop(); ConfigManager.Config.Debug.DebugLog.SaveWindowSettings(this); - DataContext = null; } } } \ No newline at end of file diff --git a/UI/ViewModels/AudioConfigViewModel.cs b/UI/ViewModels/AudioConfigViewModel.cs index 6e232e9b..476bef91 100644 --- a/UI/ViewModels/AudioConfigViewModel.cs +++ b/UI/ViewModels/AudioConfigViewModel.cs @@ -10,11 +10,13 @@ namespace Mesen.ViewModels public class AudioConfigViewModel : DisposableViewModel { [Reactive] public AudioConfig Config { get; set; } + [Reactive] public AudioConfig OriginalConfig { get; set; } [Reactive] public List AudioDevices { get; set; } = new(); public AudioConfigViewModel() { - Config = ConfigManager.Config.Audio.Clone(); + Config = ConfigManager.Config.Audio; + OriginalConfig = Config.Clone(); if(Design.IsDesignMode) { return; diff --git a/UI/ViewModels/ConfigViewModel.cs b/UI/ViewModels/ConfigViewModel.cs index 08c5e717..8b83d3fc 100644 --- a/UI/ViewModels/ConfigViewModel.cs +++ b/UI/ViewModels/ConfigViewModel.cs @@ -63,33 +63,38 @@ namespace Mesen.ViewModels public void SaveConfig() { - ConfigManager.Config.Audio = Audio?.Config.Clone() ?? ConfigManager.Config.Audio; - ConfigManager.Config.Input = Input?.Config.Clone() ?? ConfigManager.Config.Input; - ConfigManager.Config.Video = Video?.Config.Clone() ?? ConfigManager.Config.Video; - ConfigManager.Config.Preferences = Preferences?.Config.Clone() ?? ConfigManager.Config.Preferences; - ConfigManager.Config.Emulation = Emulation?.Config.Clone() ?? ConfigManager.Config.Emulation; - ConfigManager.Config.Nes = Nes?.Config.Clone() ?? ConfigManager.Config.Nes; - ConfigManager.Config.Snes = Snes?.Config.Clone() ?? ConfigManager.Config.Snes; - ConfigManager.Config.Gameboy = Gameboy?.Config.Clone() ?? ConfigManager.Config.Gameboy; - ConfigManager.Config.PcEngine = PcEngine?.Config.Clone() ?? ConfigManager.Config.PcEngine; ConfigManager.Config.ApplyConfig(); ConfigManager.Config.Save(); - ConfigManager.Config.Preferences.UpdateFileAssociations(); } + public void RevertConfig() + { + ConfigManager.Config.Audio = Audio?.OriginalConfig ?? ConfigManager.Config.Audio; + ConfigManager.Config.Input = Input?.OriginalConfig ?? ConfigManager.Config.Input; + ConfigManager.Config.Video = Video?.OriginalConfig ?? ConfigManager.Config.Video; + ConfigManager.Config.Preferences = Preferences?.OriginalConfig ?? ConfigManager.Config.Preferences; + ConfigManager.Config.Emulation = Emulation?.OriginalConfig ?? ConfigManager.Config.Emulation; + ConfigManager.Config.Nes = Nes?.OriginalConfig ?? ConfigManager.Config.Nes; + ConfigManager.Config.Snes = Snes?.OriginalConfig ?? ConfigManager.Config.Snes; + ConfigManager.Config.Gameboy = Gameboy?.OriginalConfig ?? ConfigManager.Config.Gameboy; + ConfigManager.Config.PcEngine = PcEngine?.OriginalConfig ?? ConfigManager.Config.PcEngine; + ConfigManager.Config.ApplyConfig(); + ConfigManager.Config.Save(); + } + public bool IsDirty() { return ( - Audio?.Config.IsIdentical(ConfigManager.Config.Audio) == false || - Input?.Config.IsIdentical(ConfigManager.Config.Input) == false || - Video?.Config.IsIdentical(ConfigManager.Config.Video) == false || - Preferences?.Config.IsIdentical(ConfigManager.Config.Preferences) == false || - Emulation?.Config.IsIdentical(ConfigManager.Config.Emulation) == false || - Nes?.Config.IsIdentical(ConfigManager.Config.Nes) == false || - Snes?.Config.IsIdentical(ConfigManager.Config.Snes) == false || - Gameboy?.Config.IsIdentical(ConfigManager.Config.Gameboy) == false || - PcEngine?.Config.IsIdentical(ConfigManager.Config.PcEngine) == false + Audio?.OriginalConfig.IsIdentical(ConfigManager.Config.Audio) == false || + Input?.OriginalConfig.IsIdentical(ConfigManager.Config.Input) == false || + Video?.OriginalConfig.IsIdentical(ConfigManager.Config.Video) == false || + Preferences?.OriginalConfig.IsIdentical(ConfigManager.Config.Preferences) == false || + Emulation?.OriginalConfig.IsIdentical(ConfigManager.Config.Emulation) == false || + Nes?.OriginalConfig.IsIdentical(ConfigManager.Config.Nes) == false || + Snes?.OriginalConfig.IsIdentical(ConfigManager.Config.Snes) == false || + Gameboy?.OriginalConfig.IsIdentical(ConfigManager.Config.Gameboy) == false || + PcEngine?.OriginalConfig.IsIdentical(ConfigManager.Config.PcEngine) == false ); } } diff --git a/UI/ViewModels/EmulationConfigViewModel.cs b/UI/ViewModels/EmulationConfigViewModel.cs index 95f407bb..d0f37332 100644 --- a/UI/ViewModels/EmulationConfigViewModel.cs +++ b/UI/ViewModels/EmulationConfigViewModel.cs @@ -8,10 +8,12 @@ namespace Mesen.ViewModels public class EmulationConfigViewModel : DisposableViewModel { [Reactive] public EmulationConfig Config { get; set; } + [Reactive] public EmulationConfig OriginalConfig { get; set; } public EmulationConfigViewModel() { - Config = ConfigManager.Config.Emulation.Clone(); + Config = ConfigManager.Config.Emulation; + OriginalConfig = Config.Clone(); if(Design.IsDesignMode) { return; diff --git a/UI/ViewModels/GameboyConfigViewModel.cs b/UI/ViewModels/GameboyConfigViewModel.cs index 5f7d2a96..ceba9300 100644 --- a/UI/ViewModels/GameboyConfigViewModel.cs +++ b/UI/ViewModels/GameboyConfigViewModel.cs @@ -14,14 +14,16 @@ namespace Mesen.ViewModels public class GameboyConfigViewModel : DisposableViewModel { [Reactive] public GameboyConfig Config { get; set; } + [Reactive] public GameboyConfig OriginalConfig { get; set; } [Reactive] public GameboyConfigTab SelectedTab { get; set; } = 0; public ReactiveCommand SetupPlayer { get; } public GameboyConfigViewModel() { - Config = ConfigManager.Config.Gameboy.Clone(); - + Config = ConfigManager.Config.Gameboy; + OriginalConfig = Config.Clone(); + IObservable button1Enabled = this.WhenAnyValue(x => x.Config.Controller.Type, x => x.CanConfigure()); SetupPlayer = ReactiveCommand.Create