Refactor `PutCore{S,SyncS}ettings` call chain
This commit is contained in:
parent
3f090e47a5
commit
5b403f9c2a
|
@ -10,9 +10,5 @@ namespace BizHawk.Client.EmuHawk
|
|||
/// <exception cref="InvalidOperationException">loaded emulator is not instance of <typeparamref name="T"/></exception>
|
||||
SettingsAdapter GetSettingsAdapterForLoadedCore<T>()
|
||||
where T : IEmulator;
|
||||
|
||||
void PutCoreSettings(object o, SettingsAdapter settable);
|
||||
|
||||
void PutCoreSyncSettings(object o, SettingsAdapter settable);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -152,8 +152,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
var ss = ((N64) Emulator!).GetSyncSettings();
|
||||
var glidenSS = ss.GLideN64Plugin;
|
||||
foreach (var pi in props) pi.SetValue(obj: glidenSS, value: RandomElem(propDict[pi], rng));
|
||||
var mf = (MainForm) MainForm;
|
||||
mf.PutCoreSyncSettings(ss, mf.GetSettingsAdapterForLoadedCore<N64>());
|
||||
((MainForm) MainForm).GetSettingsAdapterForLoadedCore<N64>().PutCoreSyncSettings(ss);
|
||||
}
|
||||
SzButtonEx btnLightFuzz = new() { Size = new(200, 23), Text = "--> randomise some props" };
|
||||
btnLightFuzz.Click += (_, _) => Fuzz(limit: true);
|
||||
|
|
|
@ -1732,7 +1732,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var ss = coleco.GetSyncSettings();
|
||||
ss.SkipBiosIntro ^= true;
|
||||
PutCoreSyncSettings(ss, GetSettingsAdapterForLoadedCore<ColecoVision>());
|
||||
GetSettingsAdapterForLoadedCore<ColecoVision>().PutCoreSyncSettings(ss);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1742,7 +1742,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var ss = coleco.GetSyncSettings();
|
||||
ss.UseSGM ^= true;
|
||||
PutCoreSyncSettings(ss, GetSettingsAdapterForLoadedCore<ColecoVision>());
|
||||
GetSettingsAdapterForLoadedCore<ColecoVision>().PutCoreSyncSettings(ss);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2408,38 +2408,25 @@ namespace BizHawk.Client.EmuHawk
|
|||
e.Settings = Config.GetCoreSettings(e.Core, e.SettingsType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// send core settings to emu, setting reboot flag if needed
|
||||
/// </summary>
|
||||
public void PutCoreSettings(object o, SettingsAdapter settable)
|
||||
private void HandlePutCoreSettings(PutSettingsDirtyBits dirty)
|
||||
{
|
||||
if (!settable.HasSettings)
|
||||
return;
|
||||
var dirty = settable.PutSettings(o);
|
||||
if(dirty.HasFlag(PutSettingsDirtyBits.RebootCore))
|
||||
FlagNeedsReboot();
|
||||
if (dirty.HasFlag(PutSettingsDirtyBits.ScreenLayoutChanged))
|
||||
FrameBufferResized();
|
||||
if (dirty.HasFlag(PutSettingsDirtyBits.RebootCore)) FlagNeedsReboot();
|
||||
if (dirty.HasFlag(PutSettingsDirtyBits.ScreenLayoutChanged)) FrameBufferResized();
|
||||
}
|
||||
|
||||
// TODO: Get/Put settings/sync settings methods could become a service we instantiate and use and pass to other forms
|
||||
/// <summary>
|
||||
/// send core sync settings to emu, setting reboot flag if needed
|
||||
/// </summary>
|
||||
public void PutCoreSyncSettings(object o, SettingsAdapter settable)
|
||||
private bool MayPutCoreSyncSettings()
|
||||
{
|
||||
if (MovieSession.Movie.IsActive())
|
||||
{
|
||||
AddOnScreenMessage("Attempt to change sync-relevant settings while recording BLOCKED.");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!settable.HasSyncSettings)
|
||||
return;
|
||||
var dirty = settable.PutSyncSettings(o);
|
||||
if(dirty.HasFlag(PutSettingsDirtyBits.RebootCore))
|
||||
FlagNeedsReboot();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void HandlePutCoreSyncSettings(PutSettingsDirtyBits dirty)
|
||||
{
|
||||
if (dirty.HasFlag(PutSettingsDirtyBits.RebootCore)) FlagNeedsReboot();
|
||||
}
|
||||
|
||||
public SettingsAdapter GetSettingsAdapterForLoadedCore<T>()
|
||||
|
@ -2450,7 +2437,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
|
||||
public SettingsAdapter GetSettingsAdapterForLoadedCoreUntyped()
|
||||
=> new(Emulator);
|
||||
=> new(Emulator, static () => true, HandlePutCoreSettings, MayPutCoreSyncSettings, HandlePutCoreSyncSettings);
|
||||
|
||||
private void SaveConfig(string path = "")
|
||||
{
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString();
|
||||
_syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString();
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<A7800Hawk>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<A7800Hawk>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
if (changed)
|
||||
{
|
||||
_syncSettings.Filter = Port1ComboBox.SelectedItem.ToString();
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<A7800Hawk>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<A7800Hawk>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_settings.TapeVolume = tapeVolumetrackBar.Value;
|
||||
_settings.AYVolume = ayVolumetrackBar.Value;
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>().PutCoreSettings(_settings);
|
||||
}
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.DeterministicEmulation = determEmucheckBox1.Checked;
|
||||
_syncSettings.AutoStartStopTape = autoLoadcheckBox1.Checked;
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>().PutCoreSyncSettings(_syncSettings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
_settings.OSDMessageVerbosity = (AmstradCPC.OSDVerbosity)Enum.Parse(typeof(AmstradCPC.OSDVerbosity), osdMessageVerbositycomboBox1.SelectedItem.ToString());
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>().PutCoreSettings(_settings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString();
|
||||
_syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString();
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<ColecoVision>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<ColecoVision>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
gambatte.PutSettings(s);
|
||||
if (dlg.SyncSettingsChanged)
|
||||
{
|
||||
mainForm.PutCoreSyncSettings(ss, mainForm.GetSettingsAdapterForLoadedCore<GambatteLink>());
|
||||
mainForm.GetSettingsAdapterForLoadedCore<GambatteLink>().PutCoreSyncSettings(ss);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
gb.PutSettings(s);
|
||||
if (dlg.gbPrefControl1.SyncSettingsChanged)
|
||||
{
|
||||
mainForm.PutCoreSyncSettings(ss, mainForm.GetSettingsAdapterForLoadedCore<Gameboy>());
|
||||
mainForm.GetSettingsAdapterForLoadedCore<Gameboy>().PutCoreSyncSettings(ss);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -316,7 +316,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
_settings.SetCustomPalette(colors);
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<Sameboy>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<Sameboy>().PutCoreSettings(_settings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -10,7 +10,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
private readonly SettingsAdapter _settable;
|
||||
|
||||
private readonly IMainFormForConfig _mainForm;
|
||||
private object _s;
|
||||
private object _ss;
|
||||
private bool _syncSettingsChanged;
|
||||
|
@ -23,9 +22,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
bool ignoreSyncSettings = false)
|
||||
{
|
||||
InitializeComponent();
|
||||
_mainForm = mainForm;
|
||||
|
||||
_settable = ((MainForm) _mainForm).GetSettingsAdapterForLoadedCoreUntyped(); //HACK
|
||||
_settable = ((MainForm) mainForm).GetSettingsAdapterForLoadedCoreUntyped(); //HACK
|
||||
|
||||
if (_settable.HasSettings && !ignoreSettings) _s = _settable.GetSettings();
|
||||
|
||||
|
@ -61,12 +59,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (_s != null && _settingsChanged)
|
||||
{
|
||||
_mainForm.PutCoreSettings(_s, _settable);
|
||||
_settable.PutCoreSettings(_s);
|
||||
}
|
||||
|
||||
if (_ss != null && _syncSettingsChanged)
|
||||
{
|
||||
_mainForm.PutCoreSyncSettings(_ss, _settable);
|
||||
_settable.PutCoreSyncSettings(_ss);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString();
|
||||
_syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString();
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<Intellivision>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<Intellivision>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -52,7 +52,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.Controllers[c.ControllerNumber - 1].PakType = c.PakType;
|
||||
});
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<N64>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<N64>().PutCoreSyncSettings(_syncSettings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -124,8 +124,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
if (_emulator is N64)
|
||||
{
|
||||
var settable = _mainForm.GetSettingsAdapterForLoadedCore<N64>();
|
||||
_mainForm.PutCoreSettings(_s, settable);
|
||||
_mainForm.PutCoreSyncSettings(_ss, settable);
|
||||
settable.PutCoreSettings(_s);
|
||||
settable.PutCoreSyncSettings(_ss);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -149,7 +149,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_settings.BackgroundColor &= 0x00FFFFFF;
|
||||
}
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<NES>().PutCoreSettings(_settings);
|
||||
Close();
|
||||
}
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
DialogResult = DialogResult.OK;
|
||||
if (changed)
|
||||
{
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<NES>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_settings.VSDipswitches.Dip_Switch_7 = Dipswitch7CheckBox.Checked;
|
||||
_settings.VSDipswitches.Dip_Switch_8 = Dipswitch8CheckBox.Checked;
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<NES>().PutCoreSyncSettings(_settings);
|
||||
Close();
|
||||
}
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
if (changed)
|
||||
{
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<NES>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -106,7 +106,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void ButtonOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<QuickNES>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<QuickNES>().PutCoreSettings(_settings);
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
private void BtnOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
_syncSettings.FIOConfig = UserConfigFromGui();
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<Octoshock>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<Octoshock>().PutCoreSyncSettings(_syncSettings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -126,8 +126,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
SyncSettingsFromGui(_settings, _syncSettings);
|
||||
_settings.Validate();
|
||||
var settable = _mainForm.GetSettingsAdapterForLoadedCore<Octoshock>();
|
||||
_mainForm.PutCoreSettings(_settings, settable);
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, settable);
|
||||
settable.PutCoreSettings(_settings);
|
||||
settable.PutCoreSyncSettings(_syncSettings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -257,7 +257,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (_emulator is TEmulator)
|
||||
{
|
||||
_mainForm.PutCoreSyncSettings(o, _mainForm.GetSettingsAdapterForLoadedCore<TEmulator>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<TEmulator>().PutCoreSyncSettings(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.RightPort = (BsnesApi.BSNES_INPUT_DEVICE) Port2ComboBox.SelectedIndex;
|
||||
_syncSettings.LimitAnalogChangeSensitivity = LimitAnalogChangeCheckBox.Checked;
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<BsnesCore>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<BsnesCore>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -66,8 +66,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
s.ShowBG4_1 = dlg.ShowBg4_1;
|
||||
|
||||
var settable = mainForm.GetSettingsAdapterForLoadedCore<BsnesCore>();
|
||||
mainForm.PutCoreSettings(s, settable);
|
||||
mainForm.PutCoreSyncSettings(ss, settable);
|
||||
settable.PutCoreSettings(s);
|
||||
settable.PutCoreSyncSettings(ss);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.RightPort = (LibsnesControllerDeck.ControllerType)Enum.Parse(typeof(LibsnesControllerDeck.ControllerType), Port2ComboBox.SelectedItem.ToString());
|
||||
_syncSettings.LimitAnalogChangeSensitivity = LimitAnalogChangeCheckBox.Checked;
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<LibsnesCore>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<LibsnesCore>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
|
|
|
@ -49,8 +49,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
s.ShowBG4_0 = s.ShowBG4_1 = dlg.ShowBg4;
|
||||
|
||||
var settable = mainForm.GetSettingsAdapterForLoadedCore<LibsnesCore>();
|
||||
mainForm.PutCoreSettings(s, settable);
|
||||
mainForm.PutCoreSyncSettings(ss, settable);
|
||||
settable.PutCoreSettings(s);
|
||||
settable.PutCoreSyncSettings(ss);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_settings.BGColor = (uint)BackgroundPanel.BackColor.ToArgb();
|
||||
_settings.ForeColor = (uint)ForeGroundPanel.BackColor.ToArgb();
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<TI83>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<TI83>().PutCoreSettings(_settings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_settings.EarVolume = earVolumetrackBar.Value;
|
||||
_settings.AYVolume = ayVolumetrackBar.Value;
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>().PutCoreSettings(_settings);
|
||||
}
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -61,7 +61,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.DeterministicEmulation = determEmucheckBox1.Checked;
|
||||
_syncSettings.AutoLoadTape = autoLoadcheckBox1.Checked;
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>().PutCoreSyncSettings(_syncSettings);
|
||||
}
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_syncSettings.JoystickType2 = (JoystickType)Enum.Parse(typeof(JoystickType), Port2ComboBox.SelectedItem.ToString());
|
||||
_syncSettings.JoystickType3 = (JoystickType)Enum.Parse(typeof(JoystickType), Port3ComboBox.SelectedItem.ToString());
|
||||
|
||||
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>().PutCoreSyncSettings(_syncSettings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -58,7 +58,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_settings.BackgroundColor = _bgColor;
|
||||
_settings.UseCoreBorderForBackground = checkBoxShowCoreBrdColor.Checked;
|
||||
|
||||
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
|
||||
_mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>().PutCoreSettings(_settings);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
|
|
|
@ -71,8 +71,26 @@ namespace BizHawk.Emulation.Common
|
|||
/// </summary>
|
||||
public class SettingsAdapter
|
||||
{
|
||||
public SettingsAdapter(IEmulator emulator)
|
||||
private readonly Action<PutSettingsDirtyBits> _handlePutCoreSettings;
|
||||
|
||||
private readonly Action<PutSettingsDirtyBits> _handlePutCoreSyncSettings;
|
||||
|
||||
private readonly Func<bool> _mayPutCoreSettings;
|
||||
|
||||
private readonly Func<bool> _mayPutCoreSyncSettings;
|
||||
|
||||
public SettingsAdapter(
|
||||
IEmulator emulator,
|
||||
Func<bool> mayPutCoreSettings,
|
||||
Action<PutSettingsDirtyBits> handlePutCoreSettings,
|
||||
Func<bool> mayPutCoreSyncSettings,
|
||||
Action<PutSettingsDirtyBits> handlePutCoreSyncSettings)
|
||||
{
|
||||
_handlePutCoreSettings = handlePutCoreSettings;
|
||||
_handlePutCoreSyncSettings = handlePutCoreSyncSettings;
|
||||
_mayPutCoreSettings = mayPutCoreSettings;
|
||||
_mayPutCoreSyncSettings = mayPutCoreSyncSettings;
|
||||
|
||||
var settableType = emulator.ServiceProvider.AvailableServices
|
||||
.SingleOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(ISettable<,>));
|
||||
if (settableType == null)
|
||||
|
@ -139,26 +157,24 @@ namespace BizHawk.Emulation.Common
|
|||
return _getss.Invoke(_settable, Empty);
|
||||
}
|
||||
|
||||
/// <exception cref="InvalidOperationException">does not have non-sync settings</exception>
|
||||
public PutSettingsDirtyBits PutSettings(object o)
|
||||
public void PutCoreSettings(object s)
|
||||
{
|
||||
if (!HasSettings)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
if (HasSettings && _mayPutCoreSettings()) _handlePutCoreSettings(DoPutSettings(s));
|
||||
}
|
||||
|
||||
public void PutCoreSyncSettings(object ss)
|
||||
{
|
||||
if (HasSyncSettings && _mayPutCoreSyncSettings()) _handlePutCoreSyncSettings(DoPutSyncSettings(ss));
|
||||
}
|
||||
|
||||
private PutSettingsDirtyBits DoPutSettings(object o)
|
||||
{
|
||||
_tempObject[0] = o;
|
||||
return (PutSettingsDirtyBits)_puts.Invoke(_settable, _tempObject);
|
||||
}
|
||||
|
||||
/// <exception cref="InvalidOperationException">does not have sync settings</exception>
|
||||
public PutSettingsDirtyBits PutSyncSettings(object o)
|
||||
private PutSettingsDirtyBits DoPutSyncSettings(object o)
|
||||
{
|
||||
if (!HasSyncSettings)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
|
||||
_tempObject[0] = o;
|
||||
return (PutSettingsDirtyBits)_putss.Invoke(_settable, _tempObject);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue