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.Core = ((CoreAttribute)Attribute
.GetCustomAttribute(emulator.GetType(), typeof(CoreAttribute)))
.CoreName;
movie.Core = emulator.Attributes().CoreName;
}
internal static string ConvertFileNameToTasMovie(string oldFileName)

View File

@ -454,7 +454,7 @@ namespace BizHawk.Client.EmuHawk
Config.PathEntries,
Config.FirmwareUserSpecifications,
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;
private void PlayMovieMenuItem_Click(object sender, EventArgs e)
@ -1476,14 +1476,13 @@ namespace BizHawk.Client.EmuHawk
return this.ShowDialogWithTempMute(form);
}
private DialogResult OpenQuickNesGamepadSettingsDialog()
private DialogResult OpenQuickNesGamepadSettingsDialog(ISettingsAdapter settable)
=> GenericCoreConfig.DoDialogFor(
this,
GetSettingsAdapterFor<QuickNES>(),
settable,
"QuickNES Controller Settings",
MovieSession.Movie.IsActive(),
hideSettings: true,
hideSyncSettings: false);
isMovieActive: MovieSession.Movie.IsActive(),
ignoreSettings: true);
private void NesControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
@ -1491,7 +1490,7 @@ namespace BizHawk.Client.EmuHawk
{
NES => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<NES>()),
SubNESHawk => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<SubNESHawk>()),
QuickNES => OpenQuickNesGamepadSettingsDialog(),
QuickNES => OpenQuickNesGamepadSettingsDialog(GetSettingsAdapterForLoadedCore<QuickNES>()),
_ => DialogResult.None
};
}
@ -1607,20 +1606,20 @@ namespace BizHawk.Client.EmuHawk
};
}
private DialogResult OpenGambatteSettingsDialog()
=> GBPrefs.DoGBPrefsDialog(Config, this, Game, MovieSession, GetSettingsAdapterFor<Gameboy>());
private DialogResult OpenGambatteSettingsDialog(ISettingsAdapter settable)
=> GBPrefs.DoGBPrefsDialog(Config, this, Game, MovieSession, settable);
private DialogResult OpenGBHawkSettingsDialog()
=> OpenGenericCoreConfigFor<GBHawk>("Gameboy Settings");
=> OpenGenericCoreConfigFor<GBHawk>(CoreNames.GbHawk + " Settings");
private DialogResult OpenSameBoySettingsDialog()
=> OpenGenericCoreConfigFor<Sameboy>("Gameboy Settings");
=> OpenGenericCoreConfigFor<Sameboy>(CoreNames.Sameboy + " Settings");
private void GbCoreSettingsMenuItem_Click(object sender, EventArgs e)
{
_ = Emulator switch
{
Gameboy => OpenGambatteSettingsDialog(),
Gameboy => OpenGambatteSettingsDialog(GetSettingsAdapterForLoadedCore<Gameboy>()),
GBHawk => OpenGBHawkSettingsDialog(),
Sameboy => OpenSameBoySettingsDialog(),
_ => DialogResult.None
@ -1672,14 +1671,14 @@ namespace BizHawk.Client.EmuHawk
};
}
private DialogResult OpenOctoshockSettingsDialog(OctoshockDll.eVidStandard vidStandard, Size vidSize)
=> PSXOptions.DoSettingsDialog(Config, this, GetSettingsAdapterFor<Octoshock>(), vidStandard, vidSize);
private DialogResult OpenOctoshockSettingsDialog(ISettingsAdapter settable, OctoshockDll.eVidStandard vidStandard, Size vidSize)
=> PSXOptions.DoSettingsDialog(Config, this, settable, vidStandard, vidSize);
private void PsxOptionsMenuItem_Click(object sender, EventArgs e)
{
var result = Emulator switch
{
Octoshock octoshock => OpenOctoshockSettingsDialog(octoshock.SystemVidStandard, octoshock.CurrentVideoSize),
Octoshock octoshock => OpenOctoshockSettingsDialog(GetSettingsAdapterForLoadedCore<Octoshock>(), octoshock.SystemVidStandard, octoshock.CurrentVideoSize),
_ => DialogResult.None
};
if (result.IsOk()) FrameBufferResized();
@ -1732,18 +1731,18 @@ namespace BizHawk.Client.EmuHawk
Tools.Load<SNESGraphicsDebugger>();
}
private DialogResult OpenOldBSNESSettingsDialog()
=> SNESOptions.DoSettingsDialog(this, GetSettingsAdapterFor<LibsnesCore>());
private DialogResult OpenOldBSNESSettingsDialog(ISettingsAdapter settable)
=> SNESOptions.DoSettingsDialog(this, settable);
private DialogResult OpenBSNESSettingsDialog()
=> BSNESOptions.DoSettingsDialog(this, GetSettingsAdapterFor<BsnesCore>());
private DialogResult OpenBSNESSettingsDialog(ISettingsAdapter settable)
=> BSNESOptions.DoSettingsDialog(this, settable);
private void SnesOptionsMenuItem_Click(object sender, EventArgs e)
{
_ = Emulator switch
{
LibsnesCore => OpenOldBSNESSettingsDialog(),
BsnesCore => OpenBSNESSettingsDialog(),
LibsnesCore => OpenOldBSNESSettingsDialog(GetSettingsAdapterForLoadedCore<LibsnesCore>()),
BsnesCore => OpenBSNESSettingsDialog(GetSettingsAdapterForLoadedCore<BsnesCore>()),
_ => DialogResult.None
};
}
@ -1875,14 +1874,14 @@ namespace BizHawk.Client.EmuHawk
}
}
private DialogResult OpenGambatteLinkSettingsDialog()
=> GBLPrefs.DoGBLPrefsDialog(Config, this, Game, MovieSession, GetSettingsAdapterFor<GambatteLink>());
private DialogResult OpenGambatteLinkSettingsDialog(ISettingsAdapter settable)
=> GBLPrefs.DoGBLPrefsDialog(Config, this, Game, MovieSession, settable);
private void GblSettingsMenuItem_Click(object sender, EventArgs e)
{
_ = Emulator switch
{
GambatteLink => OpenGambatteLinkSettingsDialog(),
GambatteLink => OpenGambatteLinkSettingsDialog(GetSettingsAdapterForLoadedCore<GambatteLink>()),
_ => DialogResult.None
};
}
@ -1891,21 +1890,14 @@ namespace BizHawk.Client.EmuHawk
where T : IEmulator
=> GenericCoreConfig.DoDialogFor(this, GetSettingsAdapterFor<T>(), title, isMovieActive: MovieSession.Movie.IsActive());
private DialogResult OpenGenericCoreConfig(string title)
=> GenericCoreConfig.DoDialog(Emulator, this, title, isMovieActive: MovieSession.Movie.IsActive());
private void OpenGenericCoreConfig()
=> GenericCoreConfig.DoDialog(Emulator, this, isMovieActive: MovieSession.Movie.IsActive());
private void GenericCoreSettingsMenuItem_Click(object sender, EventArgs e)
{
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());
=> OpenGenericCoreConfig();
private DialogResult OpenVirtuSettingsDialog()
=> OpenGenericCoreConfigFor<AppleII>("Apple II Settings");
=> OpenGenericCoreConfigFor<AppleII>(CoreNames.Virtu + " Settings");
private void AppleIISettingsMenuItem_Click(object sender, EventArgs e)
{
@ -1985,7 +1977,7 @@ namespace BizHawk.Client.EmuHawk
}
private DialogResult OpenC64HawkSettingsDialog()
=> OpenGenericCoreConfigFor<C64>("C64 Settings");
=> OpenGenericCoreConfigFor<C64>(CoreNames.C64Hawk + " Settings");
private void C64SettingsMenuItem_Click(object sender, EventArgs e)
{
@ -2735,6 +2727,16 @@ namespace BizHawk.Client.EmuHawk
ToolStripMenuItemEx CreateGenericCoreConfigItem<T>(string coreName)
where T : IEmulator
=> 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 submenu = new() { Tag = cat, Text = coreName };
@ -2748,13 +2750,7 @@ namespace BizHawk.Client.EmuHawk
var a7800HawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenA7800HawkGamepadSettingsDialog(GetSettingsAdapterFor<A7800Hawk>()));
var a7800HawkFilterSettingsItem = CreateSettingsItem("Filter Settings...", (_, _) => OpenA7800HawkFilterSettingsDialog(GetSettingsAdapterFor<A7800Hawk>()));
var a7800HawkSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.A7800Hawk, a7800HawkGamepadSettingsItem, a7800HawkFilterSettingsItem);
a7800HawkSubmenu.DropDownOpened += (_, _) =>
{
var isMovieActive = MovieSession.Movie.IsActive();
var loadedCoreIsA7800Hawk = Emulator is A7800Hawk;
a7800HawkGamepadSettingsItem.Enabled = !isMovieActive || !loadedCoreIsA7800Hawk;
a7800HawkFilterSettingsItem.Enabled = !isMovieActive || !loadedCoreIsA7800Hawk;
};
a7800HawkSubmenu.DropDownOpened += (_, _) => a7800HawkGamepadSettingsItem.Enabled = a7800HawkFilterSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not A7800Hawk;
items.Add(a7800HawkSubmenu);
// Ares64
@ -2765,42 +2761,32 @@ namespace BizHawk.Client.EmuHawk
// BSNES
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);
oldBSNESSubmenu.DropDownOpened += (_, _) =>
{
var loadedCoreIsOldBSNES = Emulator is LibsnesCore;
oldBSNESGamepadSettingsItem.Enabled = !loadedCoreIsOldBSNES || MovieSession.Movie.NotActive();
};
oldBSNESSubmenu.DropDownOpened += (_, _) => oldBSNESGamepadSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not LibsnesCore;
items.Add(oldBSNESSubmenu);
// BSNESv115+
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);
bsnesSubmenu.DropDownOpened += (_, _) =>
{
var loadedCoreIsBSNES = Emulator is BsnesCore;
bsnesGamepadSettingsItem.Enabled = !loadedCoreIsBSNES || MovieSession.Movie.NotActive();
};
bsnesSubmenu.DropDownOpened += (_, _) => bsnesGamepadSettingsItem.Enabled = MovieSession.Movie.NotActive() || Emulator is not BsnesCore;
items.Add(bsnesSubmenu);
// C64Hawk
var c64HawkSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenC64HawkSettingsDialog());
var c64HawkSubmenu = CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.C64Hawk, c64HawkSettingsItem);
items.Add(c64HawkSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.C64Hawk, CreateSettingsItem("Settings...", (_, _) => OpenC64HawkSettingsDialog())));
// ChannelFHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.ChannelFHawk, CreateGenericCoreConfigItem<ChannelF>(CoreNames.ChannelFHawk)));
// ColecoHawk
var colecoHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenColecoHawkGamepadSettingsDialog(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 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 colecoHawkSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.ColecoHawk, colecoHawkGamepadSettingsItem, colecoHawkSkipBIOSItem, colecoHawkUseSGMItem);
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;
colecoHawkSkipBIOSItem.Checked = ss.SkipBiosIntro;
colecoHawkUseSGMItem.Checked = ss.UseSGM;
@ -2825,30 +2811,17 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Other, CoreNames.Emu83, CreateSettingsItem("Palette...", (_, _) => OpenTI83PaletteSettingsDialog(GetSettingsAdapterFor<Emu83>()))));
// Faust
var faustSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Faust>(Faust.CachedSettingsInfo(CreateCoreComm())));
var faustSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Faust, faustSettingsItem);
items.Add(faustSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Faust, CreateGenericNymaCoreConfigItem<Faust>(CoreNames.Faust, Faust.CachedSettingsInfo)));
// Gambatte
var gambatteSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog());
var gambatteSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.Gambatte, gambatteSettingsItem);
items.Add(gambatteSubmenu);
if (includeDupes)
{
var gambatteSettingsItem1 = CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog());
var gambatteSubmenu1 = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Gambatte, gambatteSettingsItem1);
items.Add(gambatteSubmenu1);
}
items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.Gambatte, CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog(GetSettingsAdapterFor<Gameboy>()))));
if (includeDupes) items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Gambatte, CreateSettingsItem("Settings...", (_, _) => OpenGambatteSettingsDialog(GetSettingsAdapterFor<Gameboy>()))));
// GambatteLink
var gambatteLinkSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGambatteLinkSettingsDialog());
var gambatteLinkSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GambatteLink, gambatteLinkSettingsItem);
items.Add(gambatteLinkSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GambatteLink, CreateSettingsItem("Settings...", (_, _) => OpenGambatteLinkSettingsDialog(GetSettingsAdapterFor<GambatteLink>()))));
// GBHawk
var gbHawkSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGBHawkSettingsDialog());
var gbHawkSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GbHawk, gbHawkSettingsItem);
items.Add(gbHawkSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.GbHawk, CreateSettingsItem("Settings...", (_, _) => OpenGBHawkSettingsDialog())));
// 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
// HyperNyma
var hyperNymaSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<HyperNyma>(HyperNyma.CachedSettingsInfo(CreateCoreComm())));
var hyperNymaSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.HyperNyma, hyperNymaSettingsItem);
items.Add(hyperNymaSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.HyperNyma, CreateGenericNymaCoreConfigItem<HyperNyma>(CoreNames.HyperNyma, HyperNyma.CachedSettingsInfo)));
// IntelliHawk
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
// MAME
// just guessing here --yoshi
var mameSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGenericCoreConfig($"{CoreNames.MAME} Settings"));
var mameSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenGenericCoreConfig());
var mameSubmenu = CreateCoreSubmenu(VSystemCategory.Other, CoreNames.MAME, mameSettingsItem);
mameSubmenu.DropDownOpened += (_, _) => mameSettingsItem.Enabled = Emulator is MAME;
items.Add(mameSubmenu);
@ -2905,13 +2875,13 @@ namespace BizHawk.Client.EmuHawk
var mupen64PlusGraphicsSettingsItem = CreateSettingsItem("Video Plugins...", N64PluginSettingsMenuItem_Click);
var mupen64PlusGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenMupen64PlusGamepadSettingsDialog(GetSettingsAdapterFor<N64>()));
var mupen64PlusAnalogConstraintItem = CreateSettingsItem("Circular Analog Range", N64CircularAnalogRangeMenuItem_Click);
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 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 mupen64PlusSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Mupen64Plus, mupen64PlusGraphicsSettingsItem, mupen64PlusGamepadSettingsItem, mupen64PlusAnalogConstraintItem, mupen64PlusNonVILagFramesItem, mupen64PlusUseExpansionSlotItem);
mupen64PlusSubmenu.DropDownOpened += (_, _) =>
{
var settable = GetSettingsAdapterFor<N64>();
var s = (N64Settings)settable.GetSettings();
var s = (N64Settings) settable.GetSettings();
var isMovieActive = MovieSession.Movie.IsActive();
var mupen64Plus = Emulator as N64;
var loadedCoreIsMupen64Plus = mupen64Plus is not null;
@ -2926,16 +2896,14 @@ namespace BizHawk.Client.EmuHawk
}
else
{
mupen64PlusUseExpansionSlotItem.Checked = !((N64SyncSettings)settable.GetSyncSettings()).DisableExpansionSlot;
mupen64PlusUseExpansionSlotItem.Checked = !((N64SyncSettings) settable.GetSyncSettings()).DisableExpansionSlot;
mupen64PlusUseExpansionSlotItem.Enabled = true;
}
};
items.Add(mupen64PlusSubmenu);
// NeoPop
var neoPopSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<NeoGeoPort>(NeoGeoPort.CachedSettingsInfo(CreateCoreComm())));
var neoPopSubmenu = CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.NeoPop, neoPopSettingsItem);
items.Add(neoPopSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Handhelds, CoreNames.NeoPop, CreateGenericNymaCoreConfigItem<NeoGeoPort>(CoreNames.NeoPop, NeoGeoPort.CachedSettingsInfo)));
// NesHawk
var nesHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<NES>()));
@ -2950,19 +2918,16 @@ namespace BizHawk.Client.EmuHawk
nesHawkAdvancedSettingsItem);
nesHawkSubmenu.DropDownOpened += (_, _) =>
{
var isMovieActive = MovieSession.Movie.IsActive();
var nesHawk = Emulator as NES;
var loadedCoreIsNesHawk = nesHawk is not null;
nesHawkGamepadSettingsItem.Enabled = (!loadedCoreIsNesHawk || !isMovieActive) && Tools.IsAvailable<NesControllerSettings>();
nesHawkVSSettingsItem.Enabled = !loadedCoreIsNesHawk || nesHawk.IsVS is true;
nesHawkAdvancedSettingsItem.Enabled = !loadedCoreIsNesHawk || !isMovieActive;
var canEditSyncSettings = nesHawk is null || MovieSession.Movie.NotActive();
nesHawkGamepadSettingsItem.Enabled = canEditSyncSettings && Tools.IsAvailable<NesControllerSettings>();
nesHawkVSSettingsItem.Enabled = nesHawk?.IsVS is null or true;
nesHawkAdvancedSettingsItem.Enabled = canEditSyncSettings;
};
items.Add(nesHawkSubmenu);
// Nymashock
var nymashockSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Nymashock>(Nymashock.CachedSettingsInfo(CreateCoreComm())));
var nymashockSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Nymashock, nymashockSettingsItem);
items.Add(nymashockSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Nymashock, CreateGenericNymaCoreConfigItem<Nymashock>(CoreNames.Nymashock, Nymashock.CachedSettingsInfo)));
// 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 octoshockSettingsItem = CreateSettingsItem("Options...", PsxOptionsMenuItem_Click);
// 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 octoshockPalSettingsItem = CreateSettingsItem("Options (as PAL)...", (_, _) => OpenOctoshockSettingsDialog(OctoshockDll.eVidStandard.PAL, new(280, 288)));
var octoshockSubmenu = CreateCoreSubmenu(
VSystemCategory.Consoles,
CoreNames.Octoshock,
octoshockGamepadSettingsItem,
octoshockSettingsItem,
octoshockNtscSettingsItem,
octoshockPalSettingsItem);
var octoshockNTSCSettingsItem = CreateSettingsItem("Options (as NTSC)...", (_, _) => OpenOctoshockSettingsDialog(GetSettingsAdapterFor<Octoshock>(), OctoshockDll.eVidStandard.NTSC, new(280, 240)));
var octoshockPALSettingsItem = CreateSettingsItem("Options (as PAL)...", (_, _) => OpenOctoshockSettingsDialog(GetSettingsAdapterFor<Octoshock>(), OctoshockDll.eVidStandard.PAL, new(280, 288)));
var octoshockSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Octoshock, octoshockGamepadSettingsItem, octoshockSettingsItem, octoshockNTSCSettingsItem, octoshockPALSettingsItem);
octoshockSubmenu.DropDownOpened += (_, _) =>
{
var loadedCoreIsOctoshock = Emulator is Octoshock;
octoshockGamepadSettingsItem.Enabled = !loadedCoreIsOctoshock || MovieSession.Movie.NotActive();
octoshockSettingsItem.Visible = loadedCoreIsOctoshock;
octoshockNtscSettingsItem.Visible = octoshockPalSettingsItem.Visible = !loadedCoreIsOctoshock;
octoshockNTSCSettingsItem.Visible = octoshockPALSettingsItem.Visible = !loadedCoreIsOctoshock;
};
items.Add(octoshockSubmenu);
@ -2996,33 +2955,24 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.PicoDrive, CreateGenericCoreConfigItem<PicoDrive>(CoreNames.PicoDrive)));
// QuickNes
var quickNesGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenQuickNesGamepadSettingsDialog());
var quickNesGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenQuickNesGamepadSettingsDialog(GetSettingsAdapterFor<QuickNES>()));
var quickNesSubmenu = CreateCoreSubmenu(
VSystemCategory.Consoles,
CoreNames.QuickNes,
quickNesGamepadSettingsItem,
CreateSettingsItem("Graphics Settings...", (_, _) => OpenQuickNesGraphicsSettingsDialog(GetSettingsAdapterFor<QuickNES>())));
quickNesSubmenu.DropDownOpened += (_, _) =>
{
var isMovieActive = MovieSession.Movie.IsActive();
var loadedCoreIsQuickNes = Emulator is QuickNES;
quickNesGamepadSettingsItem.Enabled = (!loadedCoreIsQuickNes || !isMovieActive) && Tools.IsAvailable<NesControllerSettings>();
};
quickNesSubmenu.DropDownOpened += (_, _) => quickNesGamepadSettingsItem.Enabled = (MovieSession.Movie.NotActive() || Emulator is not QuickNES) && Tools.IsAvailable<NesControllerSettings>();
items.Add(quickNesSubmenu);
// SameBoy
var sameBoySettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenSameBoySettingsDialog());
var sameBoySubmenu = CreateCoreSubmenu(
items.Add(CreateCoreSubmenu(
VSystemCategory.Handhelds,
CoreNames.Sameboy,
sameBoySettingsItem,
CreateSettingsItem("Choose Custom Palette...", (_, _) => OpenSameBoyPaletteSettingsDialog(GetSettingsAdapterFor<Sameboy>())));
items.Add(sameBoySubmenu);
CreateSettingsItem("Settings...", (_, _) => OpenSameBoySettingsDialog()),
CreateSettingsItem("Choose Custom Palette...", (_, _) => OpenSameBoyPaletteSettingsDialog(GetSettingsAdapterFor<Sameboy>()))));
// Saturnus
var saturnusSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Saturnus>(Saturnus.CachedSettingsInfo(CreateCoreComm())));
var saturnusSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Saturnus, saturnusSettingsItem);
items.Add(saturnusSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Saturnus, CreateGenericNymaCoreConfigItem<Saturnus>(CoreNames.Saturnus, Saturnus.CachedSettingsInfo)));
// SMSHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.SMSHawk, CreateGenericCoreConfigItem<SMS>(CoreNames.SMSHawk)));
@ -3047,12 +2997,11 @@ namespace BizHawk.Client.EmuHawk
subNESHawkAdvancedSettingsItem);
subNESHawkSubmenu.DropDownOpened += (_, _) =>
{
var isMovieActive = MovieSession.Movie.IsActive();
var subNESHawk = Emulator as SubNESHawk;
var loadedCoreIsSubNESHawk = subNESHawk is not null;
subNESHawkGamepadSettingsItem.Enabled = !isMovieActive && Tools.IsAvailable<NesControllerSettings>();
subNESHawkVSSettingsItem.Enabled = !loadedCoreIsSubNESHawk || subNESHawk.IsVs is true;
subNESHawkAdvancedSettingsItem.Enabled = !loadedCoreIsSubNESHawk || !isMovieActive;
var canEditSyncSettings = subNESHawk is null || MovieSession.Movie.NotActive();
subNESHawkGamepadSettingsItem.Enabled = canEditSyncSettings && Tools.IsAvailable<NesControllerSettings>();
subNESHawkVSSettingsItem.Enabled = subNESHawk?.IsVs is null or true;
subNESHawkAdvancedSettingsItem.Enabled = canEditSyncSettings;
};
items.Add(subNESHawkSubmenu);
@ -3060,14 +3009,10 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Other, CoreNames.TI83Hawk, CreateSettingsItem("Palette...", (_, _) => OpenTI83PaletteSettingsDialog(GetSettingsAdapterFor<TI83>()))));
// T. S. T.
var tstSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<Tst>(Tst.CachedSettingsInfo(CreateCoreComm())));
var tstSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TST, tstSettingsItem);
items.Add(tstSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TST, CreateGenericNymaCoreConfigItem<Tst>(CoreNames.TST, Tst.CachedSettingsInfo)));
// TurboNyma
var turboNymaSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<TurboNyma>(TurboNyma.CachedSettingsInfo(CreateCoreComm())));
var turboNymaSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TurboNyma, turboNymaSettingsItem);
items.Add(turboNymaSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.TurboNyma, CreateGenericNymaCoreConfigItem<TurboNyma>(CoreNames.TurboNyma, TurboNyma.CachedSettingsInfo)));
// 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
@ -3076,14 +3021,10 @@ namespace BizHawk.Client.EmuHawk
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VectrexHawk, CreateGenericCoreConfigItem<VectrexHawk>(CoreNames.VectrexHawk)));
// Virtu
var virtuSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenVirtuSettingsDialog());
var virtuSubmenu = CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.Virtu, virtuSettingsItem);
items.Add(virtuSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.PCs, CoreNames.Virtu, CreateSettingsItem("Settings...", (_, _) => OpenVirtuSettingsDialog())));
// Virtual Boyee
var virtualBoyeeSettingsItem = CreateSettingsItem("Settings...", (_, _) => OpenNymaConfigFor<VirtualBoyee>(VirtualBoyee.CachedSettingsInfo(CreateCoreComm())));
var virtualBoyeeSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VirtualBoyee, virtualBoyeeSettingsItem);
items.Add(virtualBoyeeSubmenu);
items.Add(CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.VirtualBoyee, CreateGenericNymaCoreConfigItem<VirtualBoyee>(CoreNames.VirtualBoyee, VirtualBoyee.CachedSettingsInfo)));
// ZXHawk
items.Add(CreateCoreSubmenu(

View File

@ -49,8 +49,8 @@
// tabControl1
//
this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);

View File

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

View File

@ -28,111 +28,111 @@
/// </summary>
private void InitializeComponent()
{
this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
this.buttonDefaults = new System.Windows.Forms.Button();
this.buttonGbPalette = new System.Windows.Forms.Button();
this.cbRgbdsSyntax = new System.Windows.Forms.CheckBox();
this.checkBoxMuted = new System.Windows.Forms.CheckBox();
this.cbShowBorder = new System.Windows.Forms.CheckBox();
this.buttonGbcPalette = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// propertyGrid1
//
this.propertyGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.propertyGrid1.Location = new System.Drawing.Point(3, 3);
this.propertyGrid1.Name = "propertyGrid1";
this.propertyGrid1.PropertySort = System.Windows.Forms.PropertySort.NoSort;
this.propertyGrid1.Size = new System.Drawing.Size(516, 408);
this.propertyGrid1.TabIndex = 0;
this.propertyGrid1.ToolbarVisible = false;
this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.PropertyGrid1_PropertyValueChanged);
//
// buttonDefaults
//
this.buttonDefaults.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonDefaults.Location = new System.Drawing.Point(444, 417);
this.buttonDefaults.Name = "buttonDefaults";
this.buttonDefaults.Size = new System.Drawing.Size(75, 23);
this.buttonDefaults.TabIndex = 1;
this.buttonDefaults.Text = "Defaults";
this.buttonDefaults.UseVisualStyleBackColor = true;
this.buttonDefaults.Click += new System.EventHandler(this.ButtonDefaults_Click);
//
// buttonGbPalette
//
this.buttonGbPalette.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonGbPalette.Location = new System.Drawing.Point(3, 417);
this.buttonGbPalette.Name = "buttonGbPalette";
this.buttonGbPalette.Size = new System.Drawing.Size(87, 23);
this.buttonGbPalette.TabIndex = 2;
this.buttonGbPalette.Text = "GB Palette...";
this.buttonGbPalette.UseVisualStyleBackColor = true;
this.buttonGbPalette.Click += new System.EventHandler(this.ButtonGbPalette_Click);
//
// buttonGbcPalette
//
this.buttonGbcPalette.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonGbcPalette.Location = new System.Drawing.Point(96, 417);
this.buttonGbcPalette.Name = "buttonGbcPalette";
this.buttonGbcPalette.Size = new System.Drawing.Size(87, 23);
this.buttonGbcPalette.TabIndex = 6;
this.buttonGbcPalette.Text = "GBC Palette...";
this.buttonGbcPalette.UseVisualStyleBackColor = true;
this.buttonGbcPalette.Click += new System.EventHandler(this.ButtonGbcPalette_Click);
//
// cbRgbdsSyntax
//
this.cbRgbdsSyntax.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cbRgbdsSyntax.AutoSize = true;
this.cbRgbdsSyntax.Location = new System.Drawing.Point(245, 421);
this.cbRgbdsSyntax.Name = "cbRgbdsSyntax";
this.cbRgbdsSyntax.Size = new System.Drawing.Size(99, 17);
this.cbRgbdsSyntax.TabIndex = 3;
this.cbRgbdsSyntax.Text = "RGBDS Syntax";
this.cbRgbdsSyntax.UseVisualStyleBackColor = true;
this.cbRgbdsSyntax.CheckedChanged += new System.EventHandler(this.CbRgbdsSyntax_CheckedChanged);
//
// checkBoxMuted
//
this.checkBoxMuted.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.checkBoxMuted.AutoSize = true;
this.checkBoxMuted.Location = new System.Drawing.Point(189, 421);
this.checkBoxMuted.Name = "checkBoxMuted";
this.checkBoxMuted.Size = new System.Drawing.Size(50, 17);
this.checkBoxMuted.TabIndex = 4;
this.checkBoxMuted.Text = "Mute";
this.checkBoxMuted.UseVisualStyleBackColor = true;
this.checkBoxMuted.CheckedChanged += new System.EventHandler(this.CheckBoxMuted_CheckedChanged);
//
// cbShowBorder
//
this.cbShowBorder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cbShowBorder.AutoSize = true;
this.cbShowBorder.Location = new System.Drawing.Point(350, 421);
this.cbShowBorder.Name = "cbShowBorder";
this.cbShowBorder.Size = new System.Drawing.Size(87, 17);
this.cbShowBorder.TabIndex = 5;
this.cbShowBorder.Text = "Show Border";
this.cbShowBorder.UseVisualStyleBackColor = true;
this.cbShowBorder.CheckedChanged += new System.EventHandler(this.CbShowBorder_CheckedChanged);
//
// GBPrefControl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
this.Controls.Add(this.buttonGbcPalette);
this.Controls.Add(this.cbRgbdsSyntax);
this.Controls.Add(this.checkBoxMuted);
this.Controls.Add(this.cbShowBorder);
this.Controls.Add(this.buttonGbPalette);
this.Controls.Add(this.buttonDefaults);
this.Controls.Add(this.propertyGrid1);
this.Name = "GBPrefControl";
this.Size = new System.Drawing.Size(522, 443);
this.ResumeLayout(false);
this.PerformLayout();
this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
this.buttonDefaults = new System.Windows.Forms.Button();
this.buttonGbPalette = new System.Windows.Forms.Button();
this.cbRgbdsSyntax = new System.Windows.Forms.CheckBox();
this.checkBoxMuted = new System.Windows.Forms.CheckBox();
this.cbShowBorder = new System.Windows.Forms.CheckBox();
this.buttonGbcPalette = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// propertyGrid1
//
this.propertyGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.propertyGrid1.Location = new System.Drawing.Point(3, 3);
this.propertyGrid1.Name = "propertyGrid1";
this.propertyGrid1.PropertySort = System.Windows.Forms.PropertySort.NoSort;
this.propertyGrid1.Size = new System.Drawing.Size(516, 408);
this.propertyGrid1.TabIndex = 0;
this.propertyGrid1.ToolbarVisible = false;
this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.PropertyGrid1_PropertyValueChanged);
//
// buttonDefaults
//
this.buttonDefaults.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonDefaults.Location = new System.Drawing.Point(444, 417);
this.buttonDefaults.Name = "buttonDefaults";
this.buttonDefaults.Size = new System.Drawing.Size(75, 23);
this.buttonDefaults.TabIndex = 1;
this.buttonDefaults.Text = "Defaults";
this.buttonDefaults.UseVisualStyleBackColor = true;
this.buttonDefaults.Click += new System.EventHandler(this.ButtonDefaults_Click);
//
// buttonGbPalette
//
this.buttonGbPalette.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonGbPalette.Location = new System.Drawing.Point(3, 417);
this.buttonGbPalette.Name = "buttonGbPalette";
this.buttonGbPalette.Size = new System.Drawing.Size(87, 23);
this.buttonGbPalette.TabIndex = 2;
this.buttonGbPalette.Text = "GB Palette...";
this.buttonGbPalette.UseVisualStyleBackColor = true;
this.buttonGbPalette.Click += new System.EventHandler(this.ButtonGbPalette_Click);
//
// buttonGbcPalette
//
this.buttonGbcPalette.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonGbcPalette.Location = new System.Drawing.Point(96, 417);
this.buttonGbcPalette.Name = "buttonGbcPalette";
this.buttonGbcPalette.Size = new System.Drawing.Size(87, 23);
this.buttonGbcPalette.TabIndex = 6;
this.buttonGbcPalette.Text = "GBC Palette...";
this.buttonGbcPalette.UseVisualStyleBackColor = true;
this.buttonGbcPalette.Click += new System.EventHandler(this.ButtonGbcPalette_Click);
//
// cbRgbdsSyntax
//
this.cbRgbdsSyntax.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cbRgbdsSyntax.AutoSize = true;
this.cbRgbdsSyntax.Location = new System.Drawing.Point(245, 421);
this.cbRgbdsSyntax.Name = "cbRgbdsSyntax";
this.cbRgbdsSyntax.Size = new System.Drawing.Size(99, 17);
this.cbRgbdsSyntax.TabIndex = 3;
this.cbRgbdsSyntax.Text = "RGBDS Syntax";
this.cbRgbdsSyntax.UseVisualStyleBackColor = true;
this.cbRgbdsSyntax.CheckedChanged += new System.EventHandler(this.CbRgbdsSyntax_CheckedChanged);
//
// checkBoxMuted
//
this.checkBoxMuted.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.checkBoxMuted.AutoSize = true;
this.checkBoxMuted.Location = new System.Drawing.Point(189, 421);
this.checkBoxMuted.Name = "checkBoxMuted";
this.checkBoxMuted.Size = new System.Drawing.Size(50, 17);
this.checkBoxMuted.TabIndex = 4;
this.checkBoxMuted.Text = "Mute";
this.checkBoxMuted.UseVisualStyleBackColor = true;
this.checkBoxMuted.CheckedChanged += new System.EventHandler(this.CheckBoxMuted_CheckedChanged);
//
// cbShowBorder
//
this.cbShowBorder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cbShowBorder.AutoSize = true;
this.cbShowBorder.Location = new System.Drawing.Point(350, 421);
this.cbShowBorder.Name = "cbShowBorder";
this.cbShowBorder.Size = new System.Drawing.Size(87, 17);
this.cbShowBorder.TabIndex = 5;
this.cbShowBorder.Text = "Show Border";
this.cbShowBorder.UseVisualStyleBackColor = true;
this.cbShowBorder.CheckedChanged += new System.EventHandler(this.CbShowBorder_CheckedChanged);
//
// GBPrefControl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
this.Controls.Add(this.buttonGbcPalette);
this.Controls.Add(this.cbRgbdsSyntax);
this.Controls.Add(this.checkBoxMuted);
this.Controls.Add(this.cbShowBorder);
this.Controls.Add(this.buttonGbPalette);
this.Controls.Add(this.buttonDefaults);
this.Controls.Add(this.propertyGrid1);
this.Name = "GBPrefControl";
this.Size = new System.Drawing.Size(522, 443);
this.ResumeLayout(false);
this.PerformLayout();
}

View File

@ -28,58 +28,58 @@
/// </summary>
private void InitializeComponent()
{
this.buttonOK = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.gbPrefControl1 = new BizHawk.Client.EmuHawk.GBPrefControl();
this.SuspendLayout();
//
// buttonOK
//
this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.buttonOK.Location = new System.Drawing.Point(378, 386);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 1;
this.buttonOK.Text = "OK";
this.buttonOK.UseVisualStyleBackColor = true;
//
// buttonCancel
//
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.Location = new System.Drawing.Point(459, 386);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 2;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
//
// gbPrefControl1
//
this.gbPrefControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gbPrefControl1.DialogParent = null;
this.gbPrefControl1.Location = new System.Drawing.Point(12, 12);
this.gbPrefControl1.Name = "gbPrefControl1";
this.gbPrefControl1.Size = new System.Drawing.Size(522, 368);
this.gbPrefControl1.TabIndex = 0;
//
// GBPrefs
//
this.AcceptButton = this.buttonOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.buttonCancel;
this.ClientSize = new System.Drawing.Size(546, 421);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonOK);
this.Controls.Add(this.gbPrefControl1);
this.Name = "GBPrefs";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Game Boy Settings";
this.ResumeLayout(false);
this.buttonOK = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.gbPrefControl1 = new BizHawk.Client.EmuHawk.GBPrefControl();
this.SuspendLayout();
//
// buttonOK
//
this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.buttonOK.Location = new System.Drawing.Point(378, 386);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 1;
this.buttonOK.Text = "OK";
this.buttonOK.UseVisualStyleBackColor = true;
//
// buttonCancel
//
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.Location = new System.Drawing.Point(459, 386);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 2;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
//
// gbPrefControl1
//
this.gbPrefControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gbPrefControl1.DialogParent = null;
this.gbPrefControl1.Location = new System.Drawing.Point(12, 12);
this.gbPrefControl1.Name = "gbPrefControl1";
this.gbPrefControl1.Size = new System.Drawing.Size(522, 368);
this.gbPrefControl1.TabIndex = 0;
//
// GBPrefs
//
this.AcceptButton = this.buttonOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.buttonCancel;
this.ClientSize = new System.Drawing.Size(546, 421);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonOK);
this.Controls.Add(this.gbPrefControl1);
this.Name = "GBPrefs";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Game Boy Settings";
this.ResumeLayout(false);
}

View File

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

View File

@ -1,14 +1,89 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using BizHawk.Client.Common;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Arcades.MAME;
using BizHawk.Emulation.Cores.Waterbox;
namespace BizHawk.Client.EmuHawk
{
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 object _s;
@ -72,98 +147,6 @@ namespace BizHawk.Client.EmuHawk
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)
{
_syncSettingsChanged = true;

View File

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

View File

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

View File

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

View File

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

View File

@ -41,10 +41,7 @@ namespace BizHawk.Emulation.Cores.Consoles.NEC.PCFX
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>

View File

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

View File

@ -33,10 +33,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.VB
{
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>

View File

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

View File

@ -44,10 +44,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn
};
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>

View File

@ -42,10 +42,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
};
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>