mirror of
https://github.com/libretro/MesenCE.git
synced 2026-11-11 11:11:25 -10:00
Also fixes DX11.0 support (for Win7 PCs that aren't fully updated), which stopped working after the recent variable refresh rate changes
136 lines
5.8 KiB
C#
136 lines
5.8 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using HarfBuzzSharp;
|
|
using Mesen.Config;
|
|
using Mesen.Utilities;
|
|
using System;
|
|
|
|
namespace Mesen.ViewModels
|
|
{
|
|
public partial class ConfigViewModel : DisposableViewModel
|
|
{
|
|
[ObservableProperty] public partial AudioConfigViewModel? Audio { get; set; }
|
|
[ObservableProperty] public partial InputConfigViewModel? Input { get; set; }
|
|
[ObservableProperty] public partial VideoConfigViewModel? Video { get; set; }
|
|
[ObservableProperty] public partial PreferencesConfigViewModel? Preferences { get; set; }
|
|
[ObservableProperty] public partial EmulationConfigViewModel? Emulation { get; set; }
|
|
|
|
[ObservableProperty] public partial SnesConfigViewModel? Snes { get; set; }
|
|
[ObservableProperty] public partial NesConfigViewModel? Nes { get; set; }
|
|
[ObservableProperty] public partial GameboyConfigViewModel? Gameboy { get; set; }
|
|
[ObservableProperty] public partial GbaConfigViewModel? Gba { get; set; }
|
|
[ObservableProperty] public partial PceConfigViewModel? PcEngine { get; set; }
|
|
[ObservableProperty] public partial SmsConfigViewModel? Sms { get; set; }
|
|
[ObservableProperty] public partial WsConfigViewModel? Ws { get; set; }
|
|
[ObservableProperty] public partial OtherConsolesConfigViewModel? OtherConsoles { get; set; }
|
|
|
|
[ObservableProperty] public partial ConfigWindowTab SelectedIndex { get; set; }
|
|
public bool AlwaysOnTop { get; }
|
|
|
|
[Obsolete("For designer only")]
|
|
public ConfigViewModel() : this(ConfigWindowTab.Audio) { }
|
|
|
|
public ConfigViewModel(ConfigWindowTab selectedTab)
|
|
{
|
|
AlwaysOnTop = ConfigManager.Config.Preferences.AlwaysOnTop;
|
|
SelectTab(selectedTab);
|
|
}
|
|
|
|
partial void OnSelectedIndexChanged(ConfigWindowTab value)
|
|
{
|
|
SelectTab(value);
|
|
}
|
|
|
|
public void SelectTab(ConfigWindowTab tab)
|
|
{
|
|
//Create each view model when the corresponding tab is clicked, for performance
|
|
switch(tab) {
|
|
case ConfigWindowTab.Audio: Audio ??= AddDisposable(new AudioConfigViewModel()); break;
|
|
case ConfigWindowTab.Emulation: Emulation ??= AddDisposable(new EmulationConfigViewModel()); break;
|
|
case ConfigWindowTab.Input: Input ??= AddDisposable(new InputConfigViewModel()); break;
|
|
case ConfigWindowTab.Video: Video ??= AddDisposable(new VideoConfigViewModel()); break;
|
|
|
|
case ConfigWindowTab.Nes:
|
|
//TODOv2 fix this patch
|
|
Preferences ??= AddDisposable(new PreferencesConfigViewModel());
|
|
Nes ??= AddDisposable(new NesConfigViewModel(Preferences.Config));
|
|
break;
|
|
|
|
case ConfigWindowTab.Snes: Snes ??= AddDisposable(new SnesConfigViewModel()); break;
|
|
case ConfigWindowTab.Gameboy: Gameboy ??= AddDisposable(new GameboyConfigViewModel()); break;
|
|
case ConfigWindowTab.Gba: Gba ??= AddDisposable(new GbaConfigViewModel()); break;
|
|
case ConfigWindowTab.PcEngine: PcEngine ??= AddDisposable(new PceConfigViewModel()); break;
|
|
case ConfigWindowTab.Sms: Sms ??= AddDisposable(new SmsConfigViewModel()); break;
|
|
case ConfigWindowTab.Ws: Ws ??= AddDisposable(new WsConfigViewModel()); break;
|
|
case ConfigWindowTab.OtherConsoles: OtherConsoles ??= AddDisposable(new OtherConsolesConfigViewModel()); break;
|
|
|
|
case ConfigWindowTab.Preferences: Preferences ??= AddDisposable(new PreferencesConfigViewModel()); break;
|
|
}
|
|
|
|
SelectedIndex = tab;
|
|
}
|
|
|
|
public void SaveConfig()
|
|
{
|
|
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.Gba = Gba?.OriginalConfig ?? ConfigManager.Config.Gba;
|
|
ConfigManager.Config.PcEngine = PcEngine?.OriginalConfig ?? ConfigManager.Config.PcEngine;
|
|
ConfigManager.Config.Sms = Sms?.OriginalConfig ?? ConfigManager.Config.Sms;
|
|
ConfigManager.Config.Cv = OtherConsoles?.CvOriginalConfig ?? ConfigManager.Config.Cv;
|
|
ConfigManager.Config.ApplyConfig();
|
|
ConfigManager.Config.Save();
|
|
}
|
|
|
|
public bool IsDirty()
|
|
{
|
|
return (
|
|
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 ||
|
|
Gba?.OriginalConfig.IsIdentical(ConfigManager.Config.Gba) == false ||
|
|
PcEngine?.OriginalConfig.IsIdentical(ConfigManager.Config.PcEngine) == false ||
|
|
Sms?.OriginalConfig.IsIdentical(ConfigManager.Config.Sms) == false ||
|
|
Ws?.OriginalConfig.IsIdentical(ConfigManager.Config.Ws) == false ||
|
|
OtherConsoles?.CvOriginalConfig.IsIdentical(ConfigManager.Config.Cv) == false
|
|
);
|
|
}
|
|
}
|
|
|
|
public enum ConfigWindowTab
|
|
{
|
|
Audio = 0,
|
|
Emulation = 1,
|
|
Input = 2,
|
|
Video = 3,
|
|
//separator
|
|
Nes = 5,
|
|
Snes = 6,
|
|
Gameboy = 7,
|
|
Gba = 8,
|
|
PcEngine = 9,
|
|
Sms = 10,
|
|
Ws = 11,
|
|
OtherConsoles = 12,
|
|
//separator
|
|
Preferences = 14
|
|
}
|
|
}
|