More settings anywhere cleanup

This commit is contained in:
YoshiRulz 2022-06-08 00:38:19 +10:00
parent c1ff3072e0
commit af73f87e8f
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
19 changed files with 341 additions and 438 deletions

View File

@ -288,9 +288,7 @@ namespace BizHawk.Client.Common
movie.HeaderEntries.Add(HeaderKeys.ClockRate, "0"); movie.HeaderEntries.Add(HeaderKeys.ClockRate, "0");
} }
movie.Core = ((CoreAttribute)Attribute movie.Core = emulator.Attributes().CoreName;
.GetCustomAttribute(emulator.GetType(), typeof(CoreAttribute)))
.CoreName;
} }
internal static string ConvertFileNameToTasMovie(string oldFileName) internal static string ConvertFileNameToTasMovie(string oldFileName)

View File

@ -454,7 +454,7 @@ namespace BizHawk.Client.EmuHawk
Config.PathEntries, Config.PathEntries,
Config.FirmwareUserSpecifications, Config.FirmwareUserSpecifications,
FirmwareDatabase.FirmwareRecords.First(fr => fr.ID == id), FirmwareDatabase.FirmwareRecords.First(fr => fr.ID == id),
// exactFile: hash, //TODO re-scan FW dir for this file, then try autopatching // exactFile: hash, //TODO re-scan FW dir for this file, then try autopatching
forbidScan: true)?.Hash; forbidScan: true)?.Hash;
private void PlayMovieMenuItem_Click(object sender, EventArgs e) private void PlayMovieMenuItem_Click(object sender, EventArgs e)
@ -1476,14 +1476,13 @@ namespace BizHawk.Client.EmuHawk
return this.ShowDialogWithTempMute(form); return this.ShowDialogWithTempMute(form);
} }
private DialogResult OpenQuickNesGamepadSettingsDialog() private DialogResult OpenQuickNesGamepadSettingsDialog(ISettingsAdapter settable)
=> GenericCoreConfig.DoDialogFor( => GenericCoreConfig.DoDialogFor(
this, this,
GetSettingsAdapterFor<QuickNES>(), settable,
"QuickNES Controller Settings", "QuickNES Controller Settings",
MovieSession.Movie.IsActive(), isMovieActive: MovieSession.Movie.IsActive(),
hideSettings: true, ignoreSettings: true);
hideSyncSettings: false);
private void NesControllerSettingsMenuItem_Click(object sender, EventArgs e) private void NesControllerSettingsMenuItem_Click(object sender, EventArgs e)
{ {
@ -1491,7 +1490,7 @@ namespace BizHawk.Client.EmuHawk
{ {
NES => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<NES>()), NES => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<NES>()),
SubNESHawk => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<SubNESHawk>()), SubNESHawk => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<SubNESHawk>()),
QuickNES => OpenQuickNesGamepadSettingsDialog(), QuickNES => OpenQuickNesGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<QuickNES>()),
_ => DialogResult.None _ => DialogResult.None
}; };
} }
@ -1607,20 +1606,20 @@ namespace BizHawk.Client.EmuHawk
}; };
} }
private DialogResult OpenGambatteSettingsDialog() private DialogResult OpenGambatteSettingsDialog(ISettingsAdapter settable)
=> GBPrefs.DoGBPrefsDialog(Config, this, Game, MovieSession, GetSettingsAdapterFor<Gameboy>()); => GBPrefs.DoGBPrefsDialog(Config, this, Game, MovieSession, settable);
private DialogResult OpenGBHawkSettingsDialog() private DialogResult OpenGBHawkSettingsDialog()
=> OpenGenericCoreConfigFor<GBHawk>("Gameboy Settings"); => OpenGenericCoreConfigFor<GBHawk>(CoreNames.GbHawk + " Settings");
private DialogResult OpenSameBoySettingsDialog() private DialogResult OpenSameBoySettingsDialog()
=> OpenGenericCoreConfigFor<Sameboy>("Gameboy Settings"); => OpenGenericCoreConfigFor<Sameboy>(CoreNames.Sameboy + " Settings");
private void GbCoreSettingsMenuItem_Click(object sender, EventArgs e) private void GbCoreSettingsMenuItem_Click(object sender, EventArgs e)
{ {
_ = Emulator switch _ = Emulator switch
{ {
Gameboy => OpenGambatteSettingsDialog(), Gameboy => OpenGambatteSettingsDialog(GetSettingsAdapterForLoadedCore<Gameboy>()),
GBHawk => OpenGBHawkSettingsDialog(), GBHawk => OpenGBHawkSettingsDialog(),
Sameboy => OpenSameBoySettingsDialog(), Sameboy => OpenSameBoySettingsDialog(),
_ => DialogResult.None _ => DialogResult.None
@ -1672,14 +1671,14 @@ namespace BizHawk.Client.EmuHawk
}; };
} }
private DialogResult OpenOctoshockSettingsDialog(OctoshockDll.eVidStandard vidStandard, Size vidSize) private DialogResult OpenOctoshockSettingsDialog(ISettingsAdapter settable, OctoshockDll.eVidStandard vidStandard, Size vidSize)
=> PSXOptions.DoSettingsDialog(Config, this, GetSettingsAdapterFor<Octoshock>(), vidStandard, vidSize); => PSXOptions.DoSettingsDialog(Config, this, settable, vidStandard, vidSize);
private void PsxOptionsMenuItem_Click(object sender, EventArgs e) private void PsxOptionsMenuItem_Click(object sender, EventArgs e)
{ {
var result = Emulator switch var result = Emulator switch
{ {
Octoshock octoshock => OpenOctoshockSettingsDialog(octoshock.SystemVidStandard, octoshock.CurrentVideoSize), Octoshock octoshock => OpenOctoshockSettingsDialog(GetSettingsAdapterForLoadedCore<Octoshock>(), octoshock.SystemVidStandard, octoshock.CurrentVideoSize),
_ => DialogResult.None _ => DialogResult.None
}; };
if (result.IsOk()) FrameBufferResized(); if (result.IsOk()) FrameBufferResized();
@ -1732,18 +1731,18 @@ namespace BizHawk.Client.EmuHawk
Tools.Load<SNESGraphicsDebugger>(); Tools.Load<SNESGraphicsDebugger>();
} }
private DialogResult OpenOldBSNESSettingsDialog() private DialogResult OpenOldBSNESSettingsDialog(ISettingsAdapter settable)
=> SNESOptions.DoSettingsDialog(this, GetSettingsAdapterFor<LibsnesCore>()); => SNESOptions.DoSettingsDialog(this, settable);
private DialogResult OpenBSNESSettingsDialog() private DialogResult OpenBSNESSettingsDialog(ISettingsAdapter settable)
=> BSNESOptions.DoSettingsDialog(this, GetSettingsAdapterFor<BsnesCore>()); => BSNESOptions.DoSettingsDialog(this, settable);
private void SnesOptionsMenuItem_Click(object sender, EventArgs e) private void SnesOptionsMenuItem_Click(object sender, EventArgs e)
{ {
_ = Emulator switch _ = Emulator switch
{ {
LibsnesCore => OpenOldBSNESSettingsDialog(), LibsnesCore => OpenOldBSNESSettingsDialog(GetSettingsAdapterForLoadedCore<LibsnesCore>()),
BsnesCore => OpenBSNESSettingsDialog(), BsnesCore => OpenBSNESSettingsDialog(GetSettingsAdapterForLoadedCore<BsnesCore>()),
_ => DialogResult.None _ => DialogResult.None
}; };
} }
@ -1875,14 +1874,14 @@ namespace BizHawk.Client.EmuHawk
} }
} }
private DialogResult OpenGambatteLinkSettingsDialog() private DialogResult OpenGambatteLinkSettingsDialog(ISettingsAdapter settable)
=> GBLPrefs.DoGBLPrefsDialog(Config, this, Game, MovieSession, GetSettingsAdapterFor<GambatteLink>()); => GBLPrefs.DoGBLPrefsDialog(Config, this, Game, MovieSession, settable);
private void GblSettingsMenuItem_Click(object sender, EventArgs e) private void GblSettingsMenuItem_Click(object sender, EventArgs e)
{ {
_ = Emulator switch _ = Emulator switch
{ {
GambatteLink => OpenGambatteLinkSettingsDialog(), GambatteLink => OpenGambatteLinkSettingsDialog(GetSettingsAdapterForLoadedCore<GambatteLink>()),
_ => DialogResult.None _ => DialogResult.None
}; };
} }
@ -1891,21 +1890,14 @@ namespace BizHawk.Client.EmuHawk
where T : IEmulator where T : IEmulator
=> GenericCoreConfig.DoDialogFor(this, GetSettingsAdapterFor<T>(), title, isMovieActive: MovieSession.Movie.IsActive()); => GenericCoreConfig.DoDialogFor(this, GetSettingsAdapterFor<T>(), title, isMovieActive: MovieSession.Movie.IsActive());
private DialogResult OpenGenericCoreConfig(string title) private void OpenGenericCoreConfig()
=> GenericCoreConfig.DoDialog(Emulator, this, title, isMovieActive: MovieSession.Movie.IsActive()); => GenericCoreConfig.DoDialog(Emulator, this, isMovieActive: MovieSession.Movie.IsActive());
private void GenericCoreSettingsMenuItem_Click(object sender, EventArgs e) private void GenericCoreSettingsMenuItem_Click(object sender, EventArgs e)
{ => OpenGenericCoreConfig();
var coreName = ((CoreAttribute) Attribute.GetCustomAttribute(Emulator.GetType(), typeof(CoreAttribute))).CoreName;
OpenGenericCoreConfig($"{coreName} Settings");
}
private DialogResult OpenNymaConfigFor<T>(NymaCore.NymaSettingsInfo settingsInfo)
where T : IEmulator
=> GenericCoreConfig.DoNymaDialogFor(this, GetSettingsAdapterFor<T>(), settingsInfo, isMovieActive: MovieSession.Movie.IsActive());
private DialogResult OpenVirtuSettingsDialog() private DialogResult OpenVirtuSettingsDialog()
=> OpenGenericCoreConfigFor<AppleII>("Apple II Settings"); => OpenGenericCoreConfigFor<AppleII>(CoreNames.Virtu + " Settings");
private void AppleIISettingsMenuItem_Click(object sender, EventArgs e) private void AppleIISettingsMenuItem_Click(object sender, EventArgs e)
{ {
@ -1985,7 +1977,7 @@ namespace BizHawk.Client.EmuHawk
} }
private DialogResult OpenC64HawkSettingsDialog() private DialogResult OpenC64HawkSettingsDialog()
=> OpenGenericCoreConfigFor<C64>("C64 Settings"); => OpenGenericCoreConfigFor<C64>(CoreNames.C64Hawk + " Settings");
private void C64SettingsMenuItem_Click(object sender, EventArgs e) private void C64SettingsMenuItem_Click(object sender, EventArgs e)
{ {
@ -2735,6 +2727,16 @@ namespace BizHawk.Client.EmuHawk
ToolStripMenuItemEx CreateGenericCoreConfigItem<T>(string coreName) ToolStripMenuItemEx CreateGenericCoreConfigItem<T>(string coreName)
where T : IEmulator where T : IEmulator
=> CreateSettingsItem("Settings...", (_, _) => OpenGenericCoreConfigFor<T>($"{coreName} Settings")); => CreateSettingsItem("Settings...", (_, _) => OpenGenericCoreConfigFor<T>($"{coreName} Settings"));
ToolStripMenuItemEx CreateGenericNymaCoreConfigItem<T>(string coreName, Func<CoreComm, NymaCore.NymaSettingsInfo> getCachedSettingsInfo)
where T : NymaCore
=> CreateSettingsItem(
"Settings...",
(_, _) => GenericCoreConfig.DoNymaDialogFor(
this,
GetSettingsAdapterFor<T>(),
$"{coreName} Settings",
getCachedSettingsInfo(CreateCoreComm()),
isMovieActive: MovieSession.Movie.IsActive()));
ToolStripMenuItemEx CreateCoreSubmenu(VSystemCategory cat, string coreName, params ToolStripItem[] items) ToolStripMenuItemEx CreateCoreSubmenu(VSystemCategory cat, string coreName, params ToolStripItem[] items)
{ {
ToolStripMenuItemEx submenu = new() { Tag = cat, Text = coreName }; ToolStripMenuItemEx submenu = new() { Tag = cat, Text = coreName };
@ -2748,13 +2750,7 @@ namespace BizHawk.Client.EmuHawk
var a7800HawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenA7800HawkGamepadSettingsDialog(GetSettingsAdapterFor<A7800Hawk>())); var a7800HawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenA7800HawkGamepadSettingsDialog(GetSettingsAdapterFor<A7800Hawk>()));
var a7800HawkFilterSettingsItem = CreateSettingsItem("Filter Settings...", (_, _) => OpenA7800HawkFilterSettingsDialog(GetSettingsAdapterFor<A7800Hawk>())); var a7800HawkFilterSettingsItem = CreateSettingsItem("Filter Settings...", (_, _) => OpenA7800HawkFilterSettingsDialog(GetSettingsAdapterFor<A7800Hawk>()));
var a7800HawkSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.A7800Hawk, a7800HawkGamepadSettingsItem, a7800HawkFilterSettingsItem); var a7800HawkSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.A7800Hawk, a7800HawkGamepadSettingsItem, a7800HawkFilterSettingsItem);
a7800HawkSubmenu.DropDownOpened += (_, _) => a7800HawkSubmenu.DropDownOpened += (_, _) => a7800HawkGamepadSettingsItem.Enabled = a7800HawkFilterSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not A7800Hawk;
{
var isMovieActive = MovieSession.Movie.IsActive();
var loadedCoreIsA7800Hawk = Emulator is A7800Hawk;
a7800HawkGamepadSettingsItem.Enabled = !isMovieActive || !loadedCoreIsA7800Hawk;
a7800HawkFilterSettingsItem.Enabled = !isMovieActive || !loadedCoreIsA7800Hawk;
};
items.Add(a7800HawkSubmenu); items.Add(a7800HawkSubmenu);
// Ares64 // Ares64
@ -2765,42 +2761,32 @@ namespace BizHawk.Client.EmuHawk
// BSNES // BSNES
var oldBSNESGamepadSettingsItem = CreateSettingsItem("Controller Configuration...", (_, _) => OpenOldBSNESGamepadSettingsDialog(GetSettingsAdapterFor<LibsnesCore>())); var oldBSNESGamepadSettingsItem = CreateSettingsItem("Controller Configuration...", (_, _) => OpenOldBSNESGamepadSettingsDialog(GetSettingsAdapterFor<LibsnesCore>()));
var oldBSNESSettingsItem = CreateSettingsItem("Options...", (_, _) => OpenOldBSNESSettingsDialog()); var oldBSNESSettingsItem = CreateSettingsItem("Options...", (_, _) => OpenOldBSNESSettingsDialog(GetSettingsAdapterFor<LibsnesCore>()));
var oldBSNESSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Bsnes, oldBSNESGamepadSettingsItem, oldBSNESSettingsItem); var oldBSNESSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Bsnes, oldBSNESGamepadSettingsItem, oldBSNESSettingsItem);
oldBSNESSubmenu.DropDownOpened += (_, _) => oldBSNESSubmenu.DropDownOpened += (_, _) => oldBSNESGamepadSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not LibsnesCore;
{
var loadedCoreIsOldBSNES = Emulator is LibsnesCore;
oldBSNESGamepadSettingsItem.Enabled = !loadedCoreIsOldBSNES || MovieSession.Movie.NotActive();
};
items.Add(oldBSNESSubmenu); items.Add(oldBSNESSubmenu);
// BSNESv115+ // BSNESv115+
var bsnesGamepadSettingsItem = CreateSettingsItem("Controller Configuration...", (_, _) => OpenBSNESGamepadSettingsDialog(GetSettingsAdapterFor<BsnesCore>())); var bsnesGamepadSettingsItem = CreateSettingsItem("Controller Configuration...", (_, _) => OpenBSNESGamepadSettingsDialog(GetSettingsAdapterFor<BsnesCore>()));
var bsnesSettingsItem = CreateSettingsItem("Options...", (_, _) => OpenBSNESSettingsDialog()); var bsnesSettingsItem = CreateSettingsItem("Options...", (_, _) => OpenBSNESSettingsDialog(GetSettingsAdapterFor<BsnesCore>()));
var bsnesSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Bsnes115, bsnesGamepadSettingsItem, bsnesSettingsItem); var bsnesSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Bsnes115, bsnesGamepadSettingsItem, bsnesSettingsItem);
bsnesSubmenu.DropDownOpened += (_, _) => bsnesSubmenu.DropDownOpened += (_, _) => bsnesGamepadSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not BsnesCore;
{
var loadedCoreIsBSNES = Emulator is BsnesCore;
bsnesGamepadSettingsItem.Enabled = !loadedCoreIsBSNES || MovieSession.Movie.NotActive();
};
items.Add(bsnesSubmenu); items.Add(bsnesSubmenu);
// C64Hawk // C64Hawk
var c64HawkSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenC64HawkSettingsDialog()); items.Add(CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.C64Hawk, CreateSettingsItem("Settings...", (_, _) => OpenC64HawkSettingsDialog())));
var c64HawkSubmenu = CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.C64Hawk, c64HawkSettingsItem);
items.Add(c64HawkSubmenu);
// ChannelFHawk // ChannelFHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.ChannelFHawk, CreateGenericCoreConfigItem<ChannelF>(CoreNames.ChannelFHawk))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.ChannelFHawk, CreateGenericCoreConfigItem<ChannelF>(CoreNames.ChannelFHawk)));
// ColecoHawk // ColecoHawk
var colecoHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenColecoHawkGamepadSettingsDialog(GetSettingsAdapterFor<ColecoVision>())); var colecoHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenColecoHawkGamepadSettingsDialog(GetSettingsAdapterFor<ColecoVision>()));
var colecoHawkSkipBIOSItem = CreateSettingsItem("Skip BIOS intro (When Applicable)", (sender, _) => ColecoHawkSetSkipBIOSIntro(!((ToolStripMenuItem)sender).Checked, GetSettingsAdapterFor<ColecoVision>())); var colecoHawkSkipBIOSItem = CreateSettingsItem("Skip BIOS intro (When Applicable)", (sender, _) => ColecoHawkSetSkipBIOSIntro(!((ToolStripMenuItem) sender).Checked, GetSettingsAdapterFor<ColecoVision>()));
var colecoHawkUseSGMItem = CreateSettingsItem("Use the Super Game Module", (sender, _) => ColecoHawkSetSuperGameModule(!((ToolStripMenuItem)sender).Checked, GetSettingsAdapterFor<ColecoVision>())); var colecoHawkUseSGMItem = CreateSettingsItem("Use the Super Game Module", (sender, _) => ColecoHawkSetSuperGameModule(!((ToolStripMenuItem) sender).Checked, GetSettingsAdapterFor<ColecoVision>()));
var colecoHawkSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.ColecoHawk, colecoHawkGamepadSettingsItem, colecoHawkSkipBIOSItem, colecoHawkUseSGMItem); var colecoHawkSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.ColecoHawk, colecoHawkGamepadSettingsItem, colecoHawkSkipBIOSItem, colecoHawkUseSGMItem);
colecoHawkSubmenu.DropDownOpened += (_, _) => colecoHawkSubmenu.DropDownOpened += (_, _) =>
{ {
var ss = (ColecoVision.ColecoSyncSettings)GetSettingsAdapterFor<ColecoVision>().GetSyncSettings(); var ss = (ColecoVision.ColecoSyncSettings) GetSettingsAdapterFor<ColecoVision>().GetSyncSettings();
colecoHawkGamepadSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not ColecoVision; colecoHawkGamepadSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not ColecoVision;
colecoHawkSkipBIOSItem.Checked = ss.SkipBiosIntro; colecoHawkSkipBIOSItem.Checked = ss.SkipBiosIntro;
colecoHawkUseSGMItem.Checked = ss.UseSGM; colecoHawkUseSGMItem.Checked = ss.UseSGM;
@ -2825,30 +2811,17 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Other, CoreNames.Emu83, CreateSettingsItem("Palette...", (_, _) => OpenTI83PaletteSettingsDialog(GetSettingsAdapterFor<Emu83>())))); items.Add(CreateCoreSubmenu(VSystemCategory.Other, CoreNames.Emu83, CreateSettingsItem("Palette...", (_, _) => OpenTI83PaletteSettingsDialog(GetSettingsAdapterFor<Emu83>()))));
// Faust // Faust
var faustSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Faust>(Faust.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Faust, CreateGenericNymaCoreConfigItem<Faust>(CoreNames.Faust, Faust.CachedSettingsInfo)));
var faustSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Faust, faustSettingsItem);
items.Add(faustSubmenu);
// Gambatte // Gambatte
var gambatteSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog()); items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.Gambatte, CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog(GetSettingsAdapterFor<Gameboy>()))));
var gambatteSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.Gambatte, gambatteSettingsItem); if (includeDupes) items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Gambatte, CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog(GetSettingsAdapterFor<Gameboy>()))));
items.Add(gambatteSubmenu);
if (includeDupes)
{
var gambatteSettingsItem1 = CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog());
var gambatteSubmenu1 = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Gambatte, gambatteSettingsItem1);
items.Add(gambatteSubmenu1);
}
// GambatteLink // GambatteLink
var gambatteLinkSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGambatteLinkSettingsDialog()); items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GambatteLink, CreateSettingsItem("Settings...", (_, _) => OpenGambatteLinkSettingsDialog(GetSettingsAdapterFor<GambatteLink>()))));
var gambatteLinkSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GambatteLink, gambatteLinkSettingsItem);
items.Add(gambatteLinkSubmenu);
// GBHawk // GBHawk
var gbHawkSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGBHawkSettingsDialog()); items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GbHawk, CreateSettingsItem("Settings...", (_, _) => OpenGBHawkSettingsDialog())));
var gbHawkSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GbHawk, gbHawkSettingsItem);
items.Add(gbHawkSubmenu);
// GBHawkLink // GBHawkLink
items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GBHawkLink, CreateGenericCoreConfigItem<GBHawkLink>(CoreNames.GBHawkLink))); items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GBHawkLink, CreateGenericCoreConfigItem<GBHawkLink>(CoreNames.GBHawkLink)));
@ -2869,9 +2842,7 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.Handy, CreateGenericCoreConfigItem<Lynx>(CoreNames.Handy))); // as Handy doesn't implement `IStatable<,>`, this opens an empty `GenericCoreConfig`, which is dumb, but matches the existing behaviour items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.Handy, CreateGenericCoreConfigItem<Lynx>(CoreNames.Handy))); // as Handy doesn't implement `IStatable<,>`, this opens an empty `GenericCoreConfig`, which is dumb, but matches the existing behaviour
// HyperNyma // HyperNyma
var hyperNymaSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<HyperNyma>(HyperNyma.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.HyperNyma, CreateGenericNymaCoreConfigItem<HyperNyma>(CoreNames.HyperNyma, HyperNyma.CachedSettingsInfo)));
var hyperNymaSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.HyperNyma, hyperNymaSettingsItem);
items.Add(hyperNymaSubmenu);
// IntelliHawk // IntelliHawk
var intelliHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenIntelliHawkGamepadSettingsDialog(GetSettingsAdapterFor<Intellivision>())); var intelliHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenIntelliHawkGamepadSettingsDialog(GetSettingsAdapterFor<Intellivision>()));
@ -2886,8 +2857,7 @@ namespace BizHawk.Client.EmuHawk
CreateGenericCoreConfigItem<LibretroEmulator>(CoreNames.Libretro))); // as Libretro doesn't implement `IStatable<,>`, this opens an empty `GenericCoreConfig`, which is dumb, but matches the existing behaviour CreateGenericCoreConfigItem<LibretroEmulator>(CoreNames.Libretro))); // as Libretro doesn't implement `IStatable<,>`, this opens an empty `GenericCoreConfig`, which is dumb, but matches the existing behaviour
// MAME // MAME
// just guessing here --yoshi var mameSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGenericCoreConfig());
var mameSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGenericCoreConfig($"{CoreNames.MAME} Settings"));
var mameSubmenu = CreateCoreSubmenu(VSystemCategory.Other, CoreNames.MAME, mameSettingsItem); var mameSubmenu = CreateCoreSubmenu(VSystemCategory.Other, CoreNames.MAME, mameSettingsItem);
mameSubmenu.DropDownOpened += (_, _) => mameSettingsItem.Enabled = Emulator is MAME; mameSubmenu.DropDownOpened += (_, _) => mameSettingsItem.Enabled = Emulator is MAME;
items.Add(mameSubmenu); items.Add(mameSubmenu);
@ -2905,13 +2875,13 @@ namespace BizHawk.Client.EmuHawk
var mupen64PlusGraphicsSettingsItem = CreateSettingsItem("Video Plugins...", N64PluginSettingsMenuItem_Click); var mupen64PlusGraphicsSettingsItem = CreateSettingsItem("Video Plugins...", N64PluginSettingsMenuItem_Click);
var mupen64PlusGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenMupen64PlusGamepadSettingsDialog(GetSettingsAdapterFor<N64>())); var mupen64PlusGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenMupen64PlusGamepadSettingsDialog(GetSettingsAdapterFor<N64>()));
var mupen64PlusAnalogConstraintItem = CreateSettingsItem("Circular Analog Range", N64CircularAnalogRangeMenuItem_Click); var mupen64PlusAnalogConstraintItem = CreateSettingsItem("Circular Analog Range", N64CircularAnalogRangeMenuItem_Click);
var mupen64PlusNonVILagFramesItem = CreateSettingsItem("Non-VI Lag Frames", (sender, _) => Mupen64PlusSetNonVILagFrames(!((ToolStripMenuItem)sender).Checked, GetSettingsAdapterFor<N64>())); var mupen64PlusNonVILagFramesItem = CreateSettingsItem("Non-VI Lag Frames", (sender, _) => Mupen64PlusSetNonVILagFrames(!((ToolStripMenuItem) sender).Checked, GetSettingsAdapterFor<N64>()));
var mupen64PlusUseExpansionSlotItem = CreateSettingsItem("Use Expansion Slot", (sender, _) => Mupen64PlusSetUseExpansionSlot(!((ToolStripMenuItem)sender).Checked, GetSettingsAdapterFor<N64>())); var mupen64PlusUseExpansionSlotItem = CreateSettingsItem("Use Expansion Slot", (sender, _) => Mupen64PlusSetUseExpansionSlot(!((ToolStripMenuItem) sender).Checked, GetSettingsAdapterFor<N64>()));
var mupen64PlusSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Mupen64Plus, mupen64PlusGraphicsSettingsItem, mupen64PlusGamepadSettingsItem, mupen64PlusAnalogConstraintItem, mupen64PlusNonVILagFramesItem, mupen64PlusUseExpansionSlotItem); var mupen64PlusSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Mupen64Plus, mupen64PlusGraphicsSettingsItem, mupen64PlusGamepadSettingsItem, mupen64PlusAnalogConstraintItem, mupen64PlusNonVILagFramesItem, mupen64PlusUseExpansionSlotItem);
mupen64PlusSubmenu.DropDownOpened += (_, _) => mupen64PlusSubmenu.DropDownOpened += (_, _) =>
{ {
var settable = GetSettingsAdapterFor<N64>(); var settable = GetSettingsAdapterFor<N64>();
var s = (N64Settings)settable.GetSettings(); var s = (N64Settings) settable.GetSettings();
var isMovieActive = MovieSession.Movie.IsActive(); var isMovieActive = MovieSession.Movie.IsActive();
var mupen64Plus = Emulator as N64; var mupen64Plus = Emulator as N64;
var loadedCoreIsMupen64Plus = mupen64Plus is not null; var loadedCoreIsMupen64Plus = mupen64Plus is not null;
@ -2926,16 +2896,14 @@ namespace BizHawk.Client.EmuHawk
} }
else else
{ {
mupen64PlusUseExpansionSlotItem.Checked = !((N64SyncSettings)settable.GetSyncSettings()).DisableExpansionSlot; mupen64PlusUseExpansionSlotItem.Checked = !((N64SyncSettings) settable.GetSyncSettings()).DisableExpansionSlot;
mupen64PlusUseExpansionSlotItem.Enabled = true; mupen64PlusUseExpansionSlotItem.Enabled = true;
} }
}; };
items.Add(mupen64PlusSubmenu); items.Add(mupen64PlusSubmenu);
// NeoPop // NeoPop
var neoPopSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<NeoGeoPort>(NeoGeoPort.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.NeoPop, CreateGenericNymaCoreConfigItem<NeoGeoPort>(CoreNames.NeoPop, NeoGeoPort.CachedSettingsInfo)));
var neoPopSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.NeoPop, neoPopSettingsItem);
items.Add(neoPopSubmenu);
// NesHawk // NesHawk
var nesHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<NES>())); var nesHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<NES>()));
@ -2950,19 +2918,16 @@ namespace BizHawk.Client.EmuHawk
nesHawkAdvancedSettingsItem); nesHawkAdvancedSettingsItem);
nesHawkSubmenu.DropDownOpened += (_, _) => nesHawkSubmenu.DropDownOpened += (_, _) =>
{ {
var isMovieActive = MovieSession.Movie.IsActive();
var nesHawk = Emulator as NES; var nesHawk = Emulator as NES;
var loadedCoreIsNesHawk = nesHawk is not null; var canEditSyncSettings = nesHawk is null || MovieSession.Movie.NotActive();
nesHawkGamepadSettingsItem.Enabled = (!loadedCoreIsNesHawk || !isMovieActive) && Tools.IsAvailable<NesControllerSettings>(); nesHawkGamepadSettingsItem.Enabled = canEditSyncSettings && Tools.IsAvailable<NesControllerSettings>();
nesHawkVSSettingsItem.Enabled = !loadedCoreIsNesHawk || nesHawk.IsVS is true; nesHawkVSSettingsItem.Enabled = nesHawk?.IsVS is null or true;
nesHawkAdvancedSettingsItem.Enabled = !loadedCoreIsNesHawk || !isMovieActive; nesHawkAdvancedSettingsItem.Enabled = canEditSyncSettings;
}; };
items.Add(nesHawkSubmenu); items.Add(nesHawkSubmenu);
// Nymashock // Nymashock
var nymashockSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Nymashock>(Nymashock.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Nymashock, CreateGenericNymaCoreConfigItem<Nymashock>(CoreNames.Nymashock, Nymashock.CachedSettingsInfo)));
var nymashockSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Nymashock, nymashockSettingsItem);
items.Add(nymashockSubmenu);
// O2Hawk // O2Hawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.O2Hawk, CreateGenericCoreConfigItem<O2Hawk>(CoreNames.O2Hawk))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.O2Hawk, CreateGenericCoreConfigItem<O2Hawk>(CoreNames.O2Hawk)));
@ -2971,21 +2936,15 @@ namespace BizHawk.Client.EmuHawk
var octoshockGamepadSettingsItem = CreateSettingsItem("Controller / Memcard Settings...", (_, _) => OpenOctoshockGamepadSettingsDialog(GetSettingsAdapterFor<Octoshock>())); var octoshockGamepadSettingsItem = CreateSettingsItem("Controller / Memcard Settings...", (_, _) => OpenOctoshockGamepadSettingsDialog(GetSettingsAdapterFor<Octoshock>()));
var octoshockSettingsItem = CreateSettingsItem("Options...", PsxOptionsMenuItem_Click); var octoshockSettingsItem = CreateSettingsItem("Options...", PsxOptionsMenuItem_Click);
// using init buffer sizes here (in practice, they don't matter here, but might as well) // using init buffer sizes here (in practice, they don't matter here, but might as well)
var octoshockNtscSettingsItem = CreateSettingsItem("Options (as NTSC)...", (_, _) => OpenOctoshockSettingsDialog(OctoshockDll.eVidStandard.NTSC, new(280, 240))); var octoshockNTSCSettingsItem = CreateSettingsItem("Options (as NTSC)...", (_, _) => OpenOctoshockSettingsDialog(GetSettingsAdapterFor<Octoshock>(), OctoshockDll.eVidStandard.NTSC, new(280, 240)));
var octoshockPalSettingsItem = CreateSettingsItem("Options (as PAL)...", (_, _) => OpenOctoshockSettingsDialog(OctoshockDll.eVidStandard.PAL, new(280, 288))); var octoshockPALSettingsItem = CreateSettingsItem("Options (as PAL)...", (_, _) => OpenOctoshockSettingsDialog(GetSettingsAdapterFor<Octoshock>(), OctoshockDll.eVidStandard.PAL, new(280, 288)));
var octoshockSubmenu = CreateCoreSubmenu( var octoshockSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Octoshock, octoshockGamepadSettingsItem, octoshockSettingsItem, octoshockNTSCSettingsItem, octoshockPALSettingsItem);
VSystemCategory.Consoles,
CoreNames.Octoshock,
octoshockGamepadSettingsItem,
octoshockSettingsItem,
octoshockNtscSettingsItem,
octoshockPalSettingsItem);
octoshockSubmenu.DropDownOpened += (_, _) => octoshockSubmenu.DropDownOpened += (_, _) =>
{ {
var loadedCoreIsOctoshock = Emulator is Octoshock; var loadedCoreIsOctoshock = Emulator is Octoshock;
octoshockGamepadSettingsItem.Enabled = !loadedCoreIsOctoshock || MovieSession.Movie.NotActive(); octoshockGamepadSettingsItem.Enabled = !loadedCoreIsOctoshock || MovieSession.Movie.NotActive();
octoshockSettingsItem.Visible = loadedCoreIsOctoshock; octoshockSettingsItem.Visible = loadedCoreIsOctoshock;
octoshockNtscSettingsItem.Visible = octoshockPalSettingsItem.Visible = !loadedCoreIsOctoshock; octoshockNTSCSettingsItem.Visible = octoshockPALSettingsItem.Visible = !loadedCoreIsOctoshock;
}; };
items.Add(octoshockSubmenu); items.Add(octoshockSubmenu);
@ -2996,33 +2955,24 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.PicoDrive, CreateGenericCoreConfigItem<PicoDrive>(CoreNames.PicoDrive))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.PicoDrive, CreateGenericCoreConfigItem<PicoDrive>(CoreNames.PicoDrive)));
// QuickNes // QuickNes
var quickNesGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenQuickNesGamepadSettingsDialog()); var quickNesGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenQuickNesGamepadSettingsDialog(GetSettingsAdapterFor<QuickNES>()));
var quickNesSubmenu = CreateCoreSubmenu( var quickNesSubmenu = CreateCoreSubmenu(
VSystemCategory.Consoles, VSystemCategory.Consoles,
CoreNames.QuickNes, CoreNames.QuickNes,
quickNesGamepadSettingsItem, quickNesGamepadSettingsItem,
CreateSettingsItem("Graphics Settings...", (_, _) => OpenQuickNesGraphicsSettingsDialog(GetSettingsAdapterFor<QuickNES>()))); CreateSettingsItem("Graphics Settings...", (_, _) => OpenQuickNesGraphicsSettingsDialog(GetSettingsAdapterFor<QuickNES>())));
quickNesSubmenu.DropDownOpened += (_, _) => quickNesSubmenu.DropDownOpened += (_, _) => quickNesGamepadSettingsItem.Enabled = (MovieSession.Movie.NotActive() || Emulator is not QuickNES) && Tools.IsAvailable<NesControllerSettings>();
{
var isMovieActive = MovieSession.Movie.IsActive();
var loadedCoreIsQuickNes = Emulator is QuickNES;
quickNesGamepadSettingsItem.Enabled = (!loadedCoreIsQuickNes || !isMovieActive) && Tools.IsAvailable<NesControllerSettings>();
};
items.Add(quickNesSubmenu); items.Add(quickNesSubmenu);
// SameBoy // SameBoy
var sameBoySettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenSameBoySettingsDialog()); items.Add(CreateCoreSubmenu(
var sameBoySubmenu = CreateCoreSubmenu(
VSystemCategory.Handhelds, VSystemCategory.Handhelds,
CoreNames.Sameboy, CoreNames.Sameboy,
sameBoySettingsItem, CreateSettingsItem("Settings...", (_, _) => OpenSameBoySettingsDialog()),
CreateSettingsItem("Choose Custom Palette...", (_, _) => OpenSameBoyPaletteSettingsDialog(GetSettingsAdapterFor<Sameboy>()))); CreateSettingsItem("Choose Custom Palette...", (_, _) => OpenSameBoyPaletteSettingsDialog(GetSettingsAdapterFor<Sameboy>()))));
items.Add(sameBoySubmenu);
// Saturnus // Saturnus
var saturnusSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Saturnus>(Saturnus.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Saturnus, CreateGenericNymaCoreConfigItem<Saturnus>(CoreNames.Saturnus, Saturnus.CachedSettingsInfo)));
var saturnusSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Saturnus, saturnusSettingsItem);
items.Add(saturnusSubmenu);
// SMSHawk // SMSHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.SMSHawk, CreateGenericCoreConfigItem<SMS>(CoreNames.SMSHawk))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.SMSHawk, CreateGenericCoreConfigItem<SMS>(CoreNames.SMSHawk)));
@ -3047,12 +2997,11 @@ namespace BizHawk.Client.EmuHawk
subNESHawkAdvancedSettingsItem); subNESHawkAdvancedSettingsItem);
subNESHawkSubmenu.DropDownOpened += (_, _) => subNESHawkSubmenu.DropDownOpened += (_, _) =>
{ {
var isMovieActive = MovieSession.Movie.IsActive();
var subNESHawk = Emulator as SubNESHawk; var subNESHawk = Emulator as SubNESHawk;
var loadedCoreIsSubNESHawk = subNESHawk is not null; var canEditSyncSettings = subNESHawk is null || MovieSession.Movie.NotActive();
subNESHawkGamepadSettingsItem.Enabled = !isMovieActive && Tools.IsAvailable<NesControllerSettings>(); subNESHawkGamepadSettingsItem.Enabled = canEditSyncSettings && Tools.IsAvailable<NesControllerSettings>();
subNESHawkVSSettingsItem.Enabled = !loadedCoreIsSubNESHawk || subNESHawk.IsVs is true; subNESHawkVSSettingsItem.Enabled = subNESHawk?.IsVs is null or true;
subNESHawkAdvancedSettingsItem.Enabled = !loadedCoreIsSubNESHawk || !isMovieActive; subNESHawkAdvancedSettingsItem.Enabled = canEditSyncSettings;
}; };
items.Add(subNESHawkSubmenu); items.Add(subNESHawkSubmenu);
@ -3060,14 +3009,10 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Other, CoreNames.TI83Hawk, CreateSettingsItem("Palette...", (_, _) => OpenTI83PaletteSettingsDialog(GetSettingsAdapterFor<TI83>())))); items.Add(CreateCoreSubmenu(VSystemCategory.Other, CoreNames.TI83Hawk, CreateSettingsItem("Palette...", (_, _) => OpenTI83PaletteSettingsDialog(GetSettingsAdapterFor<TI83>()))));
// T. S. T. // T. S. T.
var tstSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Tst>(Tst.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TST, CreateGenericNymaCoreConfigItem<Tst>(CoreNames.TST, Tst.CachedSettingsInfo)));
var tstSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TST, tstSettingsItem);
items.Add(tstSubmenu);
// TurboNyma // TurboNyma
var turboNymaSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<TurboNyma>(TurboNyma.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TurboNyma, CreateGenericNymaCoreConfigItem<TurboNyma>(CoreNames.TurboNyma, TurboNyma.CachedSettingsInfo)));
var turboNymaSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TurboNyma, turboNymaSettingsItem);
items.Add(turboNymaSubmenu);
// uzem // uzem
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Uzem, CreateGenericCoreConfigItem<Uzem>(CoreNames.Uzem))); // as uzem doesn't implement `IStatable<,>`, this opens an empty `GenericCoreConfig`, which is dumb, but matches the existing behaviour items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Uzem, CreateGenericCoreConfigItem<Uzem>(CoreNames.Uzem))); // as uzem doesn't implement `IStatable<,>`, this opens an empty `GenericCoreConfig`, which is dumb, but matches the existing behaviour
@ -3076,14 +3021,10 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VectrexHawk, CreateGenericCoreConfigItem<VectrexHawk>(CoreNames.VectrexHawk))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VectrexHawk, CreateGenericCoreConfigItem<VectrexHawk>(CoreNames.VectrexHawk)));
// Virtu // Virtu
var virtuSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenVirtuSettingsDialog()); items.Add(CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.Virtu, CreateSettingsItem("Settings...", (_, _) => OpenVirtuSettingsDialog())));
var virtuSubmenu = CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.Virtu, virtuSettingsItem);
items.Add(virtuSubmenu);
// Virtual Boyee // Virtual Boyee
var virtualBoyeeSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<VirtualBoyee>(VirtualBoyee.CachedSettingsInfo(CreateCoreComm()))); items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VirtualBoyee, CreateGenericNymaCoreConfigItem<VirtualBoyee>(CoreNames.VirtualBoyee, VirtualBoyee.CachedSettingsInfo)));
var virtualBoyeeSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VirtualBoyee, virtualBoyeeSettingsItem);
items.Add(virtualBoyeeSubmenu);
// ZXHawk // ZXHawk
items.Add(CreateCoreSubmenu( items.Add(CreateCoreSubmenu(

View File

@ -55,8 +55,8 @@ namespace BizHawk.Client.EmuHawk
IMovieSession movieSession, IMovieSession movieSession,
ISettingsAdapter settable) ISettingsAdapter settable)
{ {
var s = settable.GetSettings() as GambatteLink.GambatteLinkSettings; var s = (GambatteLink.GambatteLinkSettings) settable.GetSettings();
var ss = settable.GetSyncSettings() as GambatteLink.GambatteLinkSyncSettings; var ss = (GambatteLink.GambatteLinkSyncSettings) settable.GetSyncSettings();
using var dlg = new GBLPrefs(dialogParent.DialogController, config, game, movieSession); using var dlg = new GBLPrefs(dialogParent.DialogController, config, game, movieSession);
dlg.PutSettings(s, ss); dlg.PutSettings(s, ss);

View File

@ -24,8 +24,8 @@ namespace BizHawk.Client.EmuHawk
IMovieSession movieSession, IMovieSession movieSession,
ISettingsAdapter settable) ISettingsAdapter settable)
{ {
var s = settable.GetSettings() as Gameboy.GambatteSettings; var s = (Gameboy.GambatteSettings) settable.GetSettings();
var ss = settable.GetSyncSettings() as Gameboy.GambatteSyncSettings; var ss = (Gameboy.GambatteSyncSettings) settable.GetSyncSettings();
using var dlg = new GBPrefs(dialogParent.DialogController); using var dlg = new GBPrefs(dialogParent.DialogController);
dlg.gbPrefControl1.PutSettings(config, game, movieSession, s, ss); dlg.gbPrefControl1.PutSettings(config, game, movieSession, s, ss);

View File

@ -1,14 +1,89 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Windows.Forms; using System.Windows.Forms;
using BizHawk.Client.Common; using BizHawk.Client.Common;
using BizHawk.Emulation.Common; using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Arcades.MAME;
using BizHawk.Emulation.Cores.Waterbox;
namespace BizHawk.Client.EmuHawk namespace BizHawk.Client.EmuHawk
{ {
public partial class GenericCoreConfig : Form public partial class GenericCoreConfig : Form
{ {
private readonly struct TempTypeDescProviderScope : IDisposable
{
private readonly TypeDescriptionProvider _desc;
private readonly Type _type;
public TempTypeDescProviderScope(TypeDescriptionProvider desc, Type type)
=> TypeDescriptor.AddProvider(_desc = desc, _type = type);
public void Dispose()
=> TypeDescriptor.RemoveProvider(_desc, _type);
}
public static DialogResult DoDialogFor(
IDialogParent owner,
ISettingsAdapter settable,
string title,
bool isMovieActive,
bool ignoreSettings = false,
bool ignoreSyncSettings = false)
{
using GenericCoreConfig dlg = new(
settable,
isMovieActive: isMovieActive,
ignoreSettings: ignoreSettings,
ignoreSyncSettings: ignoreSyncSettings)
{
Text = title,
};
return owner.ShowDialogAsChild(dlg);
}
private static DialogResult DoMAMEDialog(
IDialogParent owner,
ISettingsAdapter settable,
List<MAME.DriverSetting> settings,
bool isMovieActive)
{
using TempTypeDescProviderScope scope = new(new MAMETypeDescriptorProvider(settings), typeof(MAME.MAMESyncSettings));
return DoDialogFor(owner, settable, "MAME Settings", isMovieActive: isMovieActive, ignoreSettings: true);
}
public static DialogResult DoNymaDialogFor(
IDialogParent owner,
ISettingsAdapter settable,
string title,
NymaCore.NymaSettingsInfo settingsInfo,
bool isMovieActive)
{
NymaTypeDescriptorProvider desc = new(settingsInfo);
using TempTypeDescProviderScope scope = new(desc, typeof(NymaCore.NymaSettings)), scope1 = new(desc, typeof(NymaCore.NymaSyncSettings));
return DoDialogFor(
owner,
settable,
title,
isMovieActive: isMovieActive,
ignoreSettings: !settingsInfo.HasSettings,
ignoreSyncSettings: !settingsInfo.HasSyncSettings);
}
public static void DoDialog(IEmulator emulator, IDialogParent owner, bool isMovieActive)
{
var settable = ((MainForm) owner).GetSettingsAdapterForLoadedCoreUntyped(); //HACK
var title = $"{emulator.Attributes().CoreName} Settings";
_ = emulator switch
{
MAME mame => DoMAMEDialog(owner, settable, mame.CurrentDriverSettings, isMovieActive: isMovieActive),
NymaCore core => DoNymaDialogFor(owner, settable, title, core.SettingsInfo, isMovieActive: isMovieActive),
_ => DoDialogFor(owner, settable, title, isMovieActive: isMovieActive)
};
}
private readonly ISettingsAdapter _settable; private readonly ISettingsAdapter _settable;
private object _s; private object _s;
@ -72,98 +147,6 @@ namespace BizHawk.Client.EmuHawk
Close(); Close();
} }
public static DialogResult DoDialog(IEmulator emulator, IDialogParent owner, string title, bool isMovieActive)
{
if (emulator is Emulation.Cores.Waterbox.NymaCore core)
{
var desc = new Emulation.Cores.Waterbox.NymaTypeDescriptorProvider(core.SettingsInfo);
try
{
// OH GOD THE HACKS WHY
TypeDescriptor.AddProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSettings));
TypeDescriptor.AddProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSyncSettings));
return DoDialog(owner, "Nyma Core", isMovieActive, !core.SettingsInfo.HasSettings, !core.SettingsInfo.HasSyncSettings);
}
finally
{
TypeDescriptor.RemoveProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSettings));
TypeDescriptor.RemoveProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSyncSettings));
}
}
else if (emulator is Emulation.Cores.Arcades.MAME.MAME mame)
{
var desc = new Emulation.Cores.Arcades.MAME.MAMETypeDescriptorProvider(mame.CurrentDriverSettings);
try
{
TypeDescriptor.AddProvider(desc, typeof(Emulation.Cores.Arcades.MAME.MAME.MAMESyncSettings));
return DoDialog(owner, "MAME", isMovieActive, true, false);
}
finally
{
TypeDescriptor.RemoveProvider(desc, typeof(Emulation.Cores.Arcades.MAME.MAME.MAMESyncSettings));
}
}
else
{
return DoDialog(owner, title, isMovieActive, false, false);
}
}
public static DialogResult DoDialog(
IDialogParent owner,
string title,
bool isMovieActive,
bool hideSettings,
bool hideSyncSettings)
{
using var dlg = new GenericCoreConfig(
((MainForm) owner).GetSettingsAdapterForLoadedCoreUntyped(), //HACK
isMovieActive: isMovieActive,
ignoreSettings: hideSettings,
ignoreSyncSettings: hideSyncSettings)
{
Text = title,
};
return owner.ShowDialogAsChild(dlg);
}
public static DialogResult DoDialogFor(
IDialogParent owner,
ISettingsAdapter settable,
string title,
bool isMovieActive,
bool hideSettings = false,
bool hideSyncSettings = false)
{
using GenericCoreConfig dlg = new(settable, isMovieActive, hideSettings, hideSyncSettings) { Text = title };
return owner.ShowDialogAsChild(dlg);
}
public static DialogResult DoNymaDialogFor(
IDialogParent owner,
ISettingsAdapter settable,
Emulation.Cores.Waterbox.NymaCore.NymaSettingsInfo settingsInfo,
bool isMovieActive)
{
var desc = new Emulation.Cores.Waterbox.NymaTypeDescriptorProvider(settingsInfo);
try
{
// OH GOD THE HACKS WHY
TypeDescriptor.AddProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSettings));
TypeDescriptor.AddProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSyncSettings));
using GenericCoreConfig dlg = new(settable, isMovieActive, !settingsInfo.HasSettings, !settingsInfo.HasSyncSettings)
{
Text = "Nyma Core"
};
return owner.ShowDialogAsChild(dlg);
}
finally
{
TypeDescriptor.RemoveProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSettings));
TypeDescriptor.RemoveProvider(desc, typeof(Emulation.Cores.Waterbox.NymaCore.NymaSyncSettings));
}
}
private void PropertyGrid2_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) private void PropertyGrid2_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{ {
_syncSettingsChanged = true; _syncSettingsChanged = true;

View File

@ -89,9 +89,14 @@ namespace BizHawk.Client.EmuHawk
OctoshockDll.eVidStandard vidStandard, OctoshockDll.eVidStandard vidStandard,
Size vidSize) Size vidSize)
{ {
var s = settable.GetSettings() as Octoshock.Settings; using PSXOptions dlg = new(
var ss = settable.GetSyncSettings() as Octoshock.SyncSettings; config,
using var dlg = new PSXOptions(config, dialogParent.DialogController, settable, s, ss, vidStandard, vidSize); dialogParent.DialogController,
settable,
(Octoshock.Settings) settable.GetSettings(),
(Octoshock.SyncSettings) settable.GetSyncSettings(),
vidStandard,
vidSize);
return dialogParent.ShowDialogAsChild(dlg); return dialogParent.ShowDialogAsChild(dlg);
} }

View File

@ -16,8 +16,8 @@ namespace BizHawk.Client.EmuHawk
public static DialogResult DoSettingsDialog(IDialogParent dialogParent, ISettingsAdapter settable) public static DialogResult DoSettingsDialog(IDialogParent dialogParent, ISettingsAdapter settable)
{ {
var s = settable.GetSettings() as BsnesCore.SnesSettings; var s = (BsnesCore.SnesSettings) settable.GetSettings();
var ss = settable.GetSyncSettings() as BsnesCore.SnesSyncSettings; var ss = (BsnesCore.SnesSyncSettings) settable.GetSyncSettings();
using var dlg = new BSNESOptions using var dlg = new BSNESOptions
{ {
AlwaysDoubleSize = s.AlwaysDoubleSize, AlwaysDoubleSize = s.AlwaysDoubleSize,

View File

@ -19,8 +19,8 @@ namespace BizHawk.Client.EmuHawk
public static DialogResult DoSettingsDialog(IDialogParent dialogParent, ISettingsAdapter settable) public static DialogResult DoSettingsDialog(IDialogParent dialogParent, ISettingsAdapter settable)
{ {
var s = settable.GetSettings() as LibsnesCore.SnesSettings; var s = (LibsnesCore.SnesSettings) settable.GetSettings();
var ss = settable.GetSyncSettings() as LibsnesCore.SnesSyncSettings; var ss = (LibsnesCore.SnesSyncSettings) settable.GetSyncSettings();
using var dlg = new SNESOptions using var dlg = new SNESOptions
{ {
RandomizedInitialState = ss.RandomizedInitialState, RandomizedInitialState = ss.RandomizedInitialState,

View File

@ -50,10 +50,7 @@ namespace BizHawk.Emulation.Cores.Consoles.NEC.PCE
_hyperNyma = DoInit<LibHyperNyma>(lp, "hyper.wbx", firmwares); _hyperNyma = DoInit<LibHyperNyma>(lp, "hyper.wbx", firmwares);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
public override string SystemId => IsSgx public override string SystemId => IsSgx

View File

@ -61,10 +61,7 @@ namespace BizHawk.Emulation.Cores.Consoles.NEC.PCE
_turboNyma = DoInit<LibTurboNyma>(lp, "turbo.wbx", firmwares); _turboNyma = DoInit<LibTurboNyma>(lp, "turbo.wbx", firmwares);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
public override string SystemId => IsSgx public override string SystemId => IsSgx

View File

@ -41,10 +41,7 @@ namespace BizHawk.Emulation.Cores.Consoles.NEC.PCFX
DoInit<LibNymaCore>(lp, "pcfx.wbx", firmwares); DoInit<LibNymaCore>(lp, "pcfx.wbx", firmwares);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride> protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride>

View File

@ -37,10 +37,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Faust
DoInit<LibNymaCore>(game, rom, null, "faust.wbx", extension, deterministic); DoInit<LibNymaCore>(game, rom, null, "faust.wbx", extension, deterministic);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
protected override HashSet<string> ComputeHiddenPorts() protected override HashSet<string> ComputeHiddenPorts()

View File

@ -33,10 +33,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.VB
{ {
DoInit<LibNymaCore>(lp, "vb.wbx"); DoInit<LibNymaCore>(lp, "vb.wbx");
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride> protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride>

View File

@ -38,10 +38,7 @@ namespace BizHawk.Emulation.Cores.Consoles.SNK
{ {
_neopop = DoInit<LibNeoGeoPort>(game, rom, null, "ngp.wbx", extension, deterministic); _neopop = DoInit<LibNeoGeoPort>(game, rom, null, "ngp.wbx", extension, deterministic);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
public new bool SaveRamModified public new bool SaveRamModified

View File

@ -44,10 +44,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn
}; };
DoInit<LibNymaCore>(lp, "ss.wbx", firmwares); DoInit<LibNymaCore>(lp, "ss.wbx", firmwares);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride> protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride>

View File

@ -42,10 +42,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
}; };
DoInit<LibNymaCore>(lp, "shock.wbx", firmwares); DoInit<LibNymaCore>(lp, "shock.wbx", firmwares);
if (_cachedSettingsInfo is null) _cachedSettingsInfo ??= SettingsInfo.Clone();
{
_cachedSettingsInfo = SettingsInfo.Clone();
}
} }
protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride> protected override IDictionary<string, SettingOverride> SettingOverrides { get; } = new Dictionary<string, SettingOverride>