allow neshawk/subneshawk/quicknes/octoshock settings to be edited without the core loaded

this makes all cores (except MAME) able to have their settings edited without the core loaded
This commit is contained in:
CasualPokePlayer 2022-06-06 19:07:06 -07:00
parent 6b90737813
commit c1ff3072e0
3 changed files with 47 additions and 31 deletions

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)
@ -1477,10 +1477,11 @@ namespace BizHawk.Client.EmuHawk
} }
private DialogResult OpenQuickNesGamepadSettingsDialog() private DialogResult OpenQuickNesGamepadSettingsDialog()
=> GenericCoreConfig.DoDialog( => GenericCoreConfig.DoDialogFor(
this, this,
GetSettingsAdapterFor<QuickNES>(),
"QuickNES Controller Settings", "QuickNES Controller Settings",
isMovieActive: MovieSession.Movie.IsActive(), MovieSession.Movie.IsActive(),
hideSettings: true, hideSettings: true,
hideSyncSettings: false); hideSyncSettings: false);
@ -1671,14 +1672,14 @@ namespace BizHawk.Client.EmuHawk
}; };
} }
private DialogResult OpenOctoshockSettingsDialog(ISettingsAdapter settable, Octoshock octoshock) private DialogResult OpenOctoshockSettingsDialog(OctoshockDll.eVidStandard vidStandard, Size vidSize)
=> PSXOptions.DoSettingsDialog(Config, this, settable, octoshock); => PSXOptions.DoSettingsDialog(Config, this, GetSettingsAdapterFor<Octoshock>(), 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(GetSettingsAdapterForLoadedCore<Octoshock>(), octoshock), Octoshock octoshock => OpenOctoshockSettingsDialog(octoshock.SystemVidStandard, octoshock.CurrentVideoSize),
_ => DialogResult.None _ => DialogResult.None
}; };
if (result.IsOk()) FrameBufferResized(); if (result.IsOk()) FrameBufferResized();
@ -2794,12 +2795,12 @@ namespace BizHawk.Client.EmuHawk
// 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;
@ -2904,13 +2905,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;
@ -2925,7 +2926,7 @@ namespace BizHawk.Client.EmuHawk
} }
else else
{ {
mupen64PlusUseExpansionSlotItem.Checked = !((N64SyncSettings) settable.GetSyncSettings()).DisableExpansionSlot; mupen64PlusUseExpansionSlotItem.Checked = !((N64SyncSettings)settable.GetSyncSettings()).DisableExpansionSlot;
mupen64PlusUseExpansionSlotItem.Enabled = true; mupen64PlusUseExpansionSlotItem.Enabled = true;
} }
}; };
@ -2939,7 +2940,7 @@ namespace BizHawk.Client.EmuHawk
// NesHawk // NesHawk
var nesHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<NES>())); var nesHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<NES>()));
var nesHawkVSSettingsItem = CreateSettingsItem("VS Settings...", (_, _) => OpenNesHawkVSSettingsDialog(GetSettingsAdapterFor<NES>())); var nesHawkVSSettingsItem = CreateSettingsItem("VS Settings...", (_, _) => OpenNesHawkVSSettingsDialog(GetSettingsAdapterFor<NES>()));
var nesHawkAdvancedSettingsItem = CreateSettingsItem("Advanced Settings...", MovieSettingsMenuItem_Click); var nesHawkAdvancedSettingsItem = CreateSettingsItem("Advanced Settings...", (_, _) => OpenNesHawkAdvancedSettingsDialog(GetSettingsAdapterFor<NES>(), Emulator is not NES nesHawk || nesHawk.HasMapperProperties));
var nesHawkSubmenu = CreateCoreSubmenu( var nesHawkSubmenu = CreateCoreSubmenu(
VSystemCategory.Consoles, VSystemCategory.Consoles,
CoreNames.NesHawk, CoreNames.NesHawk,
@ -2952,9 +2953,9 @@ namespace BizHawk.Client.EmuHawk
var isMovieActive = MovieSession.Movie.IsActive(); var isMovieActive = MovieSession.Movie.IsActive();
var nesHawk = Emulator as NES; var nesHawk = Emulator as NES;
var loadedCoreIsNesHawk = nesHawk is not null; var loadedCoreIsNesHawk = nesHawk is not null;
nesHawkGamepadSettingsItem.Enabled = !isMovieActive && Tools.IsAvailable<NesControllerSettings>(); nesHawkGamepadSettingsItem.Enabled = (!loadedCoreIsNesHawk || !isMovieActive) && Tools.IsAvailable<NesControllerSettings>();
nesHawkVSSettingsItem.Enabled = nesHawk?.IsVS is true; nesHawkVSSettingsItem.Enabled = !loadedCoreIsNesHawk || nesHawk.IsVS is true;
nesHawkAdvancedSettingsItem.Enabled = loadedCoreIsNesHawk && !isMovieActive; nesHawkAdvancedSettingsItem.Enabled = !loadedCoreIsNesHawk || !isMovieActive;
}; };
items.Add(nesHawkSubmenu); items.Add(nesHawkSubmenu);
@ -2969,12 +2970,22 @@ namespace BizHawk.Client.EmuHawk
// Octoshock // Octoshock
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);
var octoshockSubmenu = CreateCoreSubmenu(VSystemCategory.Consoles, CoreNames.Octoshock, octoshockGamepadSettingsItem, octoshockSettingsItem); // 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);
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.Enabled = loadedCoreIsOctoshock; octoshockSettingsItem.Visible = loadedCoreIsOctoshock;
octoshockNtscSettingsItem.Visible = octoshockPalSettingsItem.Visible = !loadedCoreIsOctoshock;
}; };
items.Add(octoshockSubmenu); items.Add(octoshockSubmenu);
@ -2991,7 +3002,12 @@ namespace BizHawk.Client.EmuHawk
CoreNames.QuickNes, CoreNames.QuickNes,
quickNesGamepadSettingsItem, quickNesGamepadSettingsItem,
CreateSettingsItem("Graphics Settings...", (_, _) => OpenQuickNesGraphicsSettingsDialog(GetSettingsAdapterFor<QuickNES>()))); CreateSettingsItem("Graphics Settings...", (_, _) => OpenQuickNesGraphicsSettingsDialog(GetSettingsAdapterFor<QuickNES>())));
quickNesSubmenu.DropDownOpened += (_, _) => quickNesGamepadSettingsItem.Enabled = !MovieSession.Movie.IsActive() && Emulator is QuickNES && Tools.IsAvailable<NesControllerSettings>(); quickNesSubmenu.DropDownOpened += (_, _) =>
{
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
@ -3021,7 +3037,7 @@ namespace BizHawk.Client.EmuHawk
// SubNESHawk // SubNESHawk
var subNESHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<SubNESHawk>())); var subNESHawkGamepadSettingsItem = CreateSettingsItem("Controller Settings...", (_, _) => OpenNesHawkGamepadSettingsDialog(GetSettingsAdapterFor<SubNESHawk>()));
var subNESHawkVSSettingsItem = CreateSettingsItem("VS Settings...", (_, _) => OpenNesHawkVSSettingsDialog(GetSettingsAdapterFor<SubNESHawk>())); var subNESHawkVSSettingsItem = CreateSettingsItem("VS Settings...", (_, _) => OpenNesHawkVSSettingsDialog(GetSettingsAdapterFor<SubNESHawk>()));
var subNESHawkAdvancedSettingsItem = CreateSettingsItem("Advanced Settings...", MovieSettingsMenuItem_Click); var subNESHawkAdvancedSettingsItem = CreateSettingsItem("Advanced Settings...", (_, _) => OpenNesHawkAdvancedSettingsDialog(GetSettingsAdapterFor<SubNESHawk>(), Emulator is not SubNESHawk subNESHawk || subNESHawk.HasMapperProperties));
var subNESHawkSubmenu = CreateCoreSubmenu( var subNESHawkSubmenu = CreateCoreSubmenu(
VSystemCategory.Consoles, VSystemCategory.Consoles,
CoreNames.SubNesHawk, CoreNames.SubNesHawk,
@ -3035,8 +3051,8 @@ namespace BizHawk.Client.EmuHawk
var subNESHawk = Emulator as SubNESHawk; var subNESHawk = Emulator as SubNESHawk;
var loadedCoreIsSubNESHawk = subNESHawk is not null; var loadedCoreIsSubNESHawk = subNESHawk is not null;
subNESHawkGamepadSettingsItem.Enabled = !isMovieActive && Tools.IsAvailable<NesControllerSettings>(); subNESHawkGamepadSettingsItem.Enabled = !isMovieActive && Tools.IsAvailable<NesControllerSettings>();
subNESHawkVSSettingsItem.Enabled = subNESHawk?.IsVs is true; subNESHawkVSSettingsItem.Enabled = !loadedCoreIsSubNESHawk || subNESHawk.IsVs is true;
subNESHawkAdvancedSettingsItem.Enabled = loadedCoreIsSubNESHawk && !isMovieActive; subNESHawkAdvancedSettingsItem.Enabled = !loadedCoreIsSubNESHawk || !isMovieActive;
}; };
items.Add(subNESHawkSubmenu); items.Add(subNESHawkSubmenu);

View File

@ -131,9 +131,11 @@ namespace BizHawk.Client.EmuHawk
IDialogParent owner, IDialogParent owner,
ISettingsAdapter settable, ISettingsAdapter settable,
string title, string title,
bool isMovieActive) bool isMovieActive,
bool hideSettings = false,
bool hideSyncSettings = false)
{ {
using GenericCoreConfig dlg = new(settable, isMovieActive) { Text = title }; using GenericCoreConfig dlg = new(settable, isMovieActive, hideSettings, hideSyncSettings) { Text = title };
return owner.ShowDialogAsChild(dlg); return owner.ShowDialogAsChild(dlg);
} }

View File

@ -82,18 +82,16 @@ namespace BizHawk.Client.EmuHawk
DialogController.ShowMessageBox("Finetuned Display Options will take effect if you OK from PSX Options"); DialogController.ShowMessageBox("Finetuned Display Options will take effect if you OK from PSX Options");
} }
/// <remarks>TODO only use <paramref name="settable"/></remarks>
public static DialogResult DoSettingsDialog( public static DialogResult DoSettingsDialog(
Config config, Config config,
IDialogParent dialogParent, IDialogParent dialogParent,
ISettingsAdapter settable, ISettingsAdapter settable,
Octoshock psx) OctoshockDll.eVidStandard vidStandard,
Size vidSize)
{ {
var s = psx.GetSettings(); var s = settable.GetSettings() as Octoshock.Settings;
var ss = psx.GetSyncSettings(); var ss = settable.GetSyncSettings() as Octoshock.SyncSettings;
var vid = psx.SystemVidStandard; using var dlg = new PSXOptions(config, dialogParent.DialogController, settable, s, ss, vidStandard, vidSize);
var size = psx.CurrentVideoSize;
using var dlg = new PSXOptions(config, dialogParent.DialogController, settable, s, ss, vid, size);
return dialogParent.ShowDialogAsChild(dlg); return dialogParent.ShowDialogAsChild(dlg);
} }