Mainform - cleanups, remove unused code, typos, C#7isms

This commit is contained in:
adelikat 2019-10-27 11:42:05 -05:00
parent 69edada441
commit 3e64051c7d
4 changed files with 941 additions and 957 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,21 +6,18 @@ using System.Collections.Generic;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Common.IEmulatorExtensions;
using BizHawk.Emulation.Cores.Atari.A7800Hawk;
using BizHawk.Emulation.Cores.Calculators;
using BizHawk.Emulation.Cores.ColecoVision;
using BizHawk.Emulation.Cores.Nintendo.NES;
using BizHawk.Emulation.Cores.Nintendo.SubNESHawk;
using BizHawk.Emulation.Cores.Nintendo.N64;
using BizHawk.Emulation.Cores.Nintendo.SNES;
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
using BizHawk.Emulation.Cores.PCEngine;
using BizHawk.Emulation.Cores.Sega.MasterSystem;
using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES;
using BizHawk.Client.Common;
using BizHawk.Client.EmuHawk.CustomControls;
using BizHawk.Client.EmuHawk.WinFormExtensions;
using BizHawk.Client.EmuHawk.ToolExtensions;
using BizHawk.Emulation.Cores.Computers.AppleII;
@ -468,8 +465,8 @@ namespace BizHawk.Client.EmuHawk
{
var result = MessageBox.Show(
this,
"Thanks for using Bizhawk! The emulation core you have selected " +
"is currently BETA-status. We appreciate your help in testing Bizhawk. " +
"Thanks for using BizHawk! The emulation core you have selected " +
"is currently BETA-status. We appreciate your help in testing BizHawk. " +
"You can record a movie on this core if you'd like to, but expect to " +
"encounter bugs and sync problems. Continue?", "BizHawk", MessageBoxButtons.YesNo);
@ -614,7 +611,7 @@ namespace BizHawk.Client.EmuHawk
private void RecordAVMenuItem_Click(object sender, EventArgs e)
{
RecordAv(null, null); // force unattended, but allow tradtional setup
RecordAv(null, null); // force unattended, but allow traditional setup
}
private void StopAVMenuItem_Click(object sender, EventArgs e)
@ -979,9 +976,8 @@ namespace BizHawk.Client.EmuHawk
private void FirmwaresMenuItem_Click(object sender, EventArgs e)
{
if (e is RomLoader.RomErrorArgs)
if (e is RomLoader.RomErrorArgs args)
{
var args = (RomLoader.RomErrorArgs)e;
var result = new FirmwaresConfig(true, args.RomPath).ShowDialog();
args.Retry = result == DialogResult.Retry;
}
@ -1401,7 +1397,7 @@ namespace BizHawk.Client.EmuHawk
externalToolToolStripMenuItem.DropDownItems.Add(item);
}
if (externalToolToolStripMenuItem.DropDownItems.Count == 0)
{
externalToolToolStripMenuItem.DropDownItems.Add("None");
@ -1430,7 +1426,7 @@ namespace BizHawk.Client.EmuHawk
if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows)
{
// this is apparently needed for weird mono-forms-on-different-thread issues
// dont do .Show() within Load<T>() for RamSearch - instead put an instance of it here on MainForm, then show here
// don't do .Show() within Load<T>() for RamSearch - instead put an instance of it here on MainForm, then show here
// the mono winforms implementation is.... weird and buggy
ramSearch.Show();
}
@ -1540,7 +1536,7 @@ namespace BizHawk.Client.EmuHawk
VSControlsMenuItem.Enabled =
VSSettingsMenuItem.Enabled =
Emulator is NES && ((NES)Emulator).IsVS;
Emulator is NES nes && nes.IsVS;
NESSoundChannelsMenuItem.Enabled = GlobalWin.Tools.IsAvailable<NESSoundConfig>();
MovieSettingsMenuItem.Enabled = Emulator is NES && !Global.MovieSession.Movie.IsActive;
@ -1616,7 +1612,7 @@ namespace BizHawk.Client.EmuHawk
private void VsSettingsMenuItem_Click(object sender, EventArgs e)
{
if (Emulator is NES && ((NES)Emulator).IsVS)
if (Emulator is NES nes && nes.IsVS)
{
new NesVsSettings().ShowHawkDialog();
}
@ -1633,7 +1629,7 @@ namespace BizHawk.Client.EmuHawk
private void VsInsertCoinP1MenuItem_Click(object sender, EventArgs e)
{
if (Emulator is NES && ((NES)Emulator).IsVS)
if (Emulator is NES nes && nes.IsVS)
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
@ -1645,7 +1641,7 @@ namespace BizHawk.Client.EmuHawk
private void VsInsertCoinP2MenuItem_Click(object sender, EventArgs e)
{
if (Emulator is NES && ((NES)Emulator).IsVS)
if (Emulator is NES nes && nes.IsVS)
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
@ -1657,7 +1653,7 @@ namespace BizHawk.Client.EmuHawk
private void VsServiceSwitchMenuItem_Click(object sender, EventArgs e)
{
if (Emulator is NES && ((NES)Emulator).IsVS)
if (Emulator is NES nes && nes.IsVS)
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
@ -1797,7 +1793,7 @@ namespace BizHawk.Client.EmuHawk
SMSDisplayOverscanMenuItem.Visible =
Global.Game.System == "SMS" || Global.Game.System == "SG";
SMSOverclockMenuItem.Visible =
SMSForceStereoMenuItem.Visible =
SMSdisplayToolStripMenuItem.Visible =
@ -1968,7 +1964,7 @@ namespace BizHawk.Client.EmuHawk
s.ControllerType = "Sports Pad";
PutCoreSyncSettings(s);
}
private void SMSControllerKeyboardToolStripMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSyncSettings();
@ -2074,7 +2070,7 @@ namespace BizHawk.Client.EmuHawk
{
GBPrefs.DoGBPrefsDialog(this);
}
else // sameboy
else // SameBoy
{
GenericCoreConfig.DoDialog(this, "Gameboy Settings");
}
@ -2104,6 +2100,11 @@ namespace BizHawk.Client.EmuHawk
#region GBA
private void GBACoreSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "Gameboy Advance Settings");
}
private void GbaGpuViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GBAGPUView>();
@ -2123,14 +2124,8 @@ namespace BizHawk.Client.EmuHawk
private void GBACoreSelectionSubMenu_DropDownOpened(object sender, EventArgs e)
{
GBAmGBAMenuItem.Checked = Global.Config.GBA_UsemGBA == true;
GBAVBANextMenuItem.Checked = Global.Config.GBA_UsemGBA == false;
}
private void GbaWithmGBAMenuItem_Click(object sender, EventArgs e)
{
Global.Config.GBA_UsemGBA ^= true;
FlagNeedsReboot();
GBAmGBAMenuItem.Checked = Global.Config.GBA_UsemGBA;
GBAVBANextMenuItem.Checked = !Global.Config.GBA_UsemGBA;
}
#endregion
@ -2211,6 +2206,11 @@ namespace BizHawk.Client.EmuHawk
SNESOptions.DoSettingsDialog(this);
}
private void Snes9xSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "Snes9x Settings");
}
#endregion
#region Coleco
@ -2272,7 +2272,7 @@ namespace BizHawk.Client.EmuHawk
}
else
{
// Do nothing, Reboot is being flagged already if they chaned anything
// Do nothing, Reboot is being flagged already if they changed anything
}
}
else
@ -2398,7 +2398,7 @@ namespace BizHawk.Client.EmuHawk
#region Wondersawn
private void WondersawnSettingsMenuItem_Click(object sender, EventArgs e)
private void WonderSwanSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "WonderSwan Settings");
}
@ -2424,9 +2424,8 @@ namespace BizHawk.Client.EmuHawk
{
AppleDisksSubMenu.DropDownItems.Clear();
if (Emulator is AppleII)
if (Emulator is AppleII appleII)
{
var appleII = (AppleII)Emulator;
for (int i = 0; i < appleII.DiskCount; i++)
{
var menuItem = new ToolStripMenuItem
@ -2463,9 +2462,8 @@ namespace BizHawk.Client.EmuHawk
{
C64DisksSubMenu.DropDownItems.Clear();
if (Emulator is C64)
if (Emulator is C64 c64)
{
var c64 = (C64)Emulator;
for (int i = 0; i < c64.DiskCount; i++)
{
var menuItem = new ToolStripMenuItem
@ -2495,7 +2493,7 @@ namespace BizHawk.Client.EmuHawk
#region Intv
private void IntvSubMenu_DropDownOpened(object sender, EventArgs e)
private void IntVSubMenu_DropDownOpened(object sender, EventArgs e)
{
IntVControllerSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
}
@ -2505,260 +2503,271 @@ namespace BizHawk.Client.EmuHawk
new IntvControllerSettings().ShowDialog();
}
#endregion
#endregion
#region ZXSpectrum
#region VirtualBoy
private void VirtualBoySettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "VirtualBoy Settings");
}
private void zXSpectrumToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
#endregion
}
#region NeoGeoPocket
private void preferencesToolStripMenuItem4_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "ZXSpectrum Settings");
}
private void NeoGeoSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "NeoPop Settings");
}
private void ZXSpectrumControllerConfigurationMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumJoystickSettings().ShowDialog();
}
#endregion
private void ZXSpectrumCoreEmulationSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumCoreEmulationSettings().ShowDialog();
}
#region PC-FX
private void ZXSpectrumNonSyncSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumNonSyncSettings().ShowDialog();
}
private void PCFXSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "PC-FX Settings");
}
private void ZXSpectrumAudioSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumAudioSettings().ShowDialog();
}
#endregion
private void ZXSpectrumPokeMemoryMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumPokeMemory().ShowDialog();
}
#region ZXSpectrum
private void ZXSpectrumMediaMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is ZXSpectrum)
{
ZXSpectrumTapesSubMenu.Enabled = ((ZXSpectrum)Emulator)._tapeInfo.Count > 0;
ZXSpectrumDisksSubMenu.Enabled = ((ZXSpectrum)Emulator)._diskInfo.Count > 0;
}
}
private void ZXSpectrumControllerConfigurationMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumJoystickSettings().ShowDialog();
}
private void ZXSpectrumTapesSubMenu_DropDownOpened(object sender, EventArgs e)
{
ZXSpectrumTapesSubMenu.DropDownItems.Clear();
private void ZXSpectrumCoreEmulationSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumCoreEmulationSettings().ShowDialog();
}
List<ToolStripMenuItem> items = new List<ToolStripMenuItem>();
private void ZXSpectrumNonSyncSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumNonSyncSettings().ShowDialog();
}
if (Emulator is ZXSpectrum)
{
var speccy = (ZXSpectrum)Emulator;
var currSel = speccy._machine.TapeMediaIndex;
private void ZXSpectrumAudioSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumAudioSettings().ShowDialog();
}
for (int i = 0; i < speccy._tapeInfo.Count; i++)
{
string name = speccy._tapeInfo[i].Name;
private void ZXSpectrumPokeMemoryMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumPokeMemory().ShowDialog();
}
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = currSel == i
};
private void ZXSpectrumMediaMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is ZXSpectrum)
{
ZXSpectrumTapesSubMenu.Enabled = ((ZXSpectrum)Emulator)._tapeInfo.Count > 0;
ZXSpectrumDisksSubMenu.Enabled = ((ZXSpectrum)Emulator)._diskInfo.Count > 0;
}
}
int dummy = i;
menuItem.Click += (o, ev) =>
{
speccy._machine.TapeMediaIndex = dummy;
};
items.Add(menuItem);
}
}
ZXSpectrumTapesSubMenu.DropDownItems.AddRange(items.ToArray());
}
private void ZXSpectrumDisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
ZXSpectrumDisksSubMenu.DropDownItems.Clear();
List<ToolStripMenuItem> items = new List<ToolStripMenuItem>();
if (Emulator is ZXSpectrum)
{
var speccy = (ZXSpectrum)Emulator;
var currSel = speccy._machine.DiskMediaIndex;
for (int i = 0; i < speccy._diskInfo.Count; i++)
{
string name = speccy._diskInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = currSel == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
speccy._machine.DiskMediaIndex = dummy;
};
items.Add(menuItem);
}
}
ZXSpectrumDisksSubMenu.DropDownItems.AddRange(items.ToArray());
}
private void ZXSpectrumExportSnapshotMenuItemMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog zxSnapExpDialog = new SaveFileDialog();
zxSnapExpDialog.RestoreDirectory = true;
zxSnapExpDialog.Title = "EXPERIMENTAL - Export 3rd party snapshot formats";
zxSnapExpDialog.DefaultExt = "szx";
zxSnapExpDialog.Filter = "ZX-State files (*.szx)|*.szx";
zxSnapExpDialog.SupportMultiDottedExtensions = true;
try
{
var res = zxSnapExpDialog.ShowDialog();
if (res == DialogResult.OK)
{
var speccy = (ZXSpectrum)Emulator;
var snap = speccy.GetSZXSnapshot();
File.WriteAllBytes(zxSnapExpDialog.FileName, snap);
//File.WriteAllText(zxSnapExpDialog.FileName, snap);
}
}
catch (Exception ex)
{
var ee = ex;
}
}
#endregion
#region AmstradCPC
private void amstradCPCCoreEmulationSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCCoreEmulationSettings().ShowDialog();
}
private void AmstradCPCAudioSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCAudioSettings().ShowDialog();
}
private void AmstradCPCPokeMemoryToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCPokeMemory().ShowDialog();
}
private void AmstradCPCMediaToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is AmstradCPC)
{
AmstradCPCTapesSubMenu.Enabled = ((AmstradCPC)Emulator)._tapeInfo.Count > 0;
AmstradCPCDisksSubMenu.Enabled = ((AmstradCPC)Emulator)._diskInfo.Count > 0;
}
}
private void AmstradCPCTapesSubMenu_DropDownOpened(object sender, EventArgs e)
{
AmstradCPCTapesSubMenu.DropDownItems.Clear();
private void ZXSpectrumTapesSubMenu_DropDownOpened(object sender, EventArgs e)
{
ZXSpectrumTapesSubMenu.DropDownItems.Clear();
List<ToolStripMenuItem> items = new List<ToolStripMenuItem>();
if (Emulator is AmstradCPC)
{
var ams = (AmstradCPC)Emulator;
var currSel = ams._machine.TapeMediaIndex;
if (Emulator is ZXSpectrum speccy)
{
var tapeMediaIndex = speccy._machine.TapeMediaIndex;
for (int i = 0; i < ams._tapeInfo.Count; i++)
{
string name = ams._tapeInfo[i].Name;
for (int i = 0; i < speccy._tapeInfo.Count; i++)
{
string name = speccy._tapeInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = currSel == i
};
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = tapeMediaIndex == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
ams._machine.TapeMediaIndex = dummy;
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
speccy._machine.TapeMediaIndex = dummy;
};
items.Add(menuItem);
}
}
}
ZXSpectrumTapesSubMenu.DropDownItems.AddRange(items.ToArray());
}
private void ZXSpectrumDisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
ZXSpectrumDisksSubMenu.DropDownItems.Clear();
var items = new List<ToolStripMenuItem>();
if (Emulator is ZXSpectrum speccy)
{
var diskMediaIndex = speccy._machine.DiskMediaIndex;
for (int i = 0; i < speccy._diskInfo.Count; i++)
{
string name = speccy._diskInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = diskMediaIndex == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
speccy._machine.DiskMediaIndex = dummy;
};
items.Add(menuItem);
}
}
ZXSpectrumDisksSubMenu.DropDownItems.AddRange(items.ToArray());
}
private void ZXSpectrumExportSnapshotMenuItemMenuItem_Click(object sender, EventArgs e)
{
var zxSnapExpDialog = new SaveFileDialog
{
RestoreDirectory = true
, Title = "EXPERIMENTAL - Export 3rd party snapshot formats"
, DefaultExt = "szx"
, Filter = "ZX-State files (*.szx)|*.szx"
, SupportMultiDottedExtensions = true
};
try
{
var res = zxSnapExpDialog.ShowDialog();
if (res == DialogResult.OK)
{
var speccy = (ZXSpectrum)Emulator;
var snap = speccy.GetSZXSnapshot();
File.WriteAllBytes(zxSnapExpDialog.FileName, snap);
}
}
catch (Exception ex)
{
var ee = ex;
}
}
#endregion
#region AmstradCPC
private void amstradCPCCoreEmulationSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCCoreEmulationSettings().ShowDialog();
}
private void AmstradCPCAudioSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCAudioSettings().ShowDialog();
}
private void AmstradCPCPokeMemoryToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCPokeMemory().ShowDialog();
}
private void AmstradCPCMediaToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is AmstradCPC)
{
AmstradCPCTapesSubMenu.Enabled = ((AmstradCPC)Emulator)._tapeInfo.Count > 0;
AmstradCPCDisksSubMenu.Enabled = ((AmstradCPC)Emulator)._diskInfo.Count > 0;
}
}
private void AmstradCPCTapesSubMenu_DropDownOpened(object sender, EventArgs e)
{
AmstradCPCTapesSubMenu.DropDownItems.Clear();
var items = new List<ToolStripMenuItem>();
if (Emulator is AmstradCPC ams)
{
var tapeMediaIndex = ams._machine.TapeMediaIndex;
for (int i = 0; i < ams._tapeInfo.Count; i++)
{
string name = ams._tapeInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = tapeMediaIndex == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
ams._machine.TapeMediaIndex = dummy;
};
items.Add(menuItem);
}
}
AmstradCPCTapesSubMenu.DropDownItems.AddRange(items.ToArray());
}
private void AmstradCPCDisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
private void AmstradCPCDisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
AmstradCPCDisksSubMenu.DropDownItems.Clear();
List<ToolStripMenuItem> items = new List<ToolStripMenuItem>();
var items = new List<ToolStripMenuItem>();
if (Emulator is AmstradCPC)
{
var ams = (AmstradCPC)Emulator;
var currSel = ams._machine.DiskMediaIndex;
if (Emulator is AmstradCPC ams)
{
var diskMediaIndex = ams._machine.DiskMediaIndex;
for (int i = 0; i < ams._diskInfo.Count; i++)
{
string name = ams._diskInfo[i].Name;
for (int i = 0; i < ams._diskInfo.Count; i++)
{
string name = ams._diskInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = currSel == i
};
var menuItem = new ToolStripMenuItem
{
Name = $"{i}_{name}",
Text = $"{i}: {name}",
Checked = diskMediaIndex == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
ams._machine.DiskMediaIndex = dummy;
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
ams._machine.DiskMediaIndex = dummy;
};
items.Add(menuItem);
}
}
}
AmstradCPCDisksSubMenu.DropDownItems.AddRange(items.ToArray());
}
private void AmstradCPCNonSyncSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCNonSyncSettings().ShowDialog();
}
private void AmstradCPCNonSyncSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new AmstradCPCNonSyncSettings().ShowDialog();
}
#endregion
#endregion
#region Help
#region Help
private void HelpSubMenu_DropDownOpened(object sender, EventArgs e)
private void HelpSubMenu_DropDownOpened(object sender, EventArgs e)
{
FeaturesMenuItem.Visible = VersionInfo.DeveloperBuild;
}
@ -2808,9 +2817,9 @@ namespace BizHawk.Client.EmuHawk
showMenuVisible = true; // need to always be able to restore this as an emergency measure
}
if (argParser._chromeless)
if (_argParser._chromeless)
{
showMenuVisible = true; // I decided this was always possible in chromeless mode, we'll see what they think
showMenuVisible = true; // I decided this was always possible in chrome-less mode, we'll see what they think
}
ShowMenuContextMenuItem.Visible =

View File

@ -25,7 +25,6 @@ using BizHawk.Emulation.Cores.Nintendo.NES;
using BizHawk.Emulation.Cores.Nintendo.SNES;
using BizHawk.Emulation.Cores.Nintendo.N64;
using BizHawk.Emulation.Cores.Nintendo.GBHawkLink;
using BizHawk.Emulation.Cores.Sega.GGHawkLink;
using BizHawk.Client.EmuHawk.WinFormExtensions;
using BizHawk.Client.EmuHawk.ToolExtensions;
@ -34,7 +33,6 @@ using BizHawk.Client.ApiHawk;
using BizHawk.Emulation.Common.Base_Implementations;
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
using BizHawk.Emulation.Cores.Consoles.SNK;
using BizHawk.Emulation.Cores.Consoles.Sega.PicoDrive;
using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy;
namespace BizHawk.Client.EmuHawk
@ -47,11 +45,11 @@ namespace BizHawk.Client.EmuHawk
{
SetWindowText();
// Hide Status bar icons and general statusbar prep
// Hide Status bar icons and general StatusBar prep
MainStatusBar.Padding = new Padding(MainStatusBar.Padding.Left, MainStatusBar.Padding.Top, MainStatusBar.Padding.Left, MainStatusBar.Padding.Bottom); // Workaround to remove extra padding on right
PlayRecordStatusButton.Visible = false;
AVIStatusLabel.Visible = false;
SetPauseStatusbarIcon();
SetPauseStatusBarIcon();
ToolFormBase.UpdateCheatRelatedTools(null, null);
RebootStatusBarIcon.Visible = false;
UpdateNotification.Visible = false;
@ -83,20 +81,19 @@ namespace BizHawk.Client.EmuHawk
static MainForm()
{
// If this isnt here, then our assemblyresolving hacks wont work due to the check for MainForm.INTERIM
// its.. weird. dont ask.
// If this isn't here, then our assembly resolving hacks wont work due to the check for MainForm.INTERIM
// its.. weird. don't ask.
}
private CoreComm CreateCoreComm()
{
CoreComm ret = new CoreComm(ShowMessageCoreComm, NotifyCoreComm)
return new CoreComm(ShowMessageCoreComm, NotifyCoreComm)
{
ReleaseGLContext = o => GlobalWin.GLManager.ReleaseGLContext(o),
RequestGLContext = (major, minor, forward) => GlobalWin.GLManager.CreateGLContext(major, minor, forward),
ActivateGLContext = gl => GlobalWin.GLManager.Activate((GLManager.ContextRef)gl),
DeactivateGLContext = () => GlobalWin.GLManager.Deactivate()
};
return ret;
}
public MainForm(string[] args)
@ -157,13 +154,13 @@ namespace BizHawk.Client.EmuHawk
};
try
{
argParser.ParseArguments(args);
_argParser.ParseArguments(args);
}
catch (ArgParserException e)
{
MessageBox.Show(e.Message);
}
Database.LoadDatabase(Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "gamedb.txt"));
@ -281,14 +278,14 @@ namespace BizHawk.Client.EmuHawk
Location = new Point(Global.Config.MainWndx, Global.Config.MainWndy);
}
if (argParser.cmdRom != null)
if (_argParser.cmdRom != null)
{
// Commandline should always override auto-load
var ioa = OpenAdvancedSerializer.ParseWithLegacy(argParser.cmdRom);
LoadRom(argParser.cmdRom, new LoadRomArgs { OpenAdvanced = ioa });
var ioa = OpenAdvancedSerializer.ParseWithLegacy(_argParser.cmdRom);
LoadRom(_argParser.cmdRom, new LoadRomArgs { OpenAdvanced = ioa });
if (Global.Game == null)
{
MessageBox.Show($"Failed to load {argParser.cmdRom} specified on commandline");
MessageBox.Show($"Failed to load {_argParser.cmdRom} specified on commandline");
}
}
else if (Global.Config.RecentRoms.AutoLoad && !Global.Config.RecentRoms.Empty)
@ -296,14 +293,14 @@ namespace BizHawk.Client.EmuHawk
LoadRomFromRecent(Global.Config.RecentRoms.MostRecent);
}
if (argParser.audiosync.HasValue)
if (_argParser.audiosync.HasValue)
{
Global.Config.VideoWriterAudioSync = argParser.audiosync.Value;
Global.Config.VideoWriterAudioSync = _argParser.audiosync.Value;
}
if (argParser.cmdMovie != null)
if (_argParser.cmdMovie != null)
{
_supressSyncSettingsWarning = true; // We dont' want to be nagged if we are attempting to automate
_suppressSyncSettingsWarning = true; // We don't want to be nagged if we are attempting to automate
if (Global.Game == null)
{
OpenRom();
@ -312,21 +309,19 @@ namespace BizHawk.Client.EmuHawk
// If user picked a game, then do the commandline logic
if (!Global.Game.IsNullInstance)
{
var movie = MovieService.Get(argParser.cmdMovie);
var movie = MovieService.Get(_argParser.cmdMovie);
Global.MovieSession.ReadOnly = true;
// if user is dumping and didnt supply dump length, make it as long as the loaded movie
if (argParser._autoDumpLength == 0)
// if user is dumping and didn't supply dump length, make it as long as the loaded movie
if (_argParser._autoDumpLength == 0)
{
argParser._autoDumpLength = movie.InputLogLength;
_argParser._autoDumpLength = movie.InputLogLength;
}
// Copy pasta from drag & drop
if (MovieImport.IsValidMovieExtension(Path.GetExtension(argParser.cmdMovie)))
if (MovieImport.IsValidMovieExtension(Path.GetExtension(_argParser.cmdMovie)))
{
string errorMsg;
string warningMsg;
var imported = MovieImport.ImportFile(argParser.cmdMovie, out errorMsg, out warningMsg);
var imported = MovieImport.ImportFile(_argParser.cmdMovie, out var errorMsg, out var warningMsg);
if (!string.IsNullOrEmpty(errorMsg))
{
MessageBox.Show(errorMsg, "Conversion error", MessageBoxButtons.OK, MessageBoxIcon.Error);
@ -344,10 +339,10 @@ namespace BizHawk.Client.EmuHawk
else
{
StartNewMovie(movie, false);
Global.Config.RecentMovies.Add(argParser.cmdMovie);
Global.Config.RecentMovies.Add(_argParser.cmdMovie);
}
_supressSyncSettingsWarning = false;
_suppressSyncSettingsWarning = false;
}
}
else if (Global.Config.RecentMovies.AutoLoad && !Global.Config.RecentMovies.Empty)
@ -371,20 +366,20 @@ namespace BizHawk.Client.EmuHawk
}
}
if (argParser.startFullscreen || Global.Config.StartFullscreen)
if (_argParser.startFullscreen || Global.Config.StartFullscreen)
{
_needsFullscreenOnLoad = true;
}
if (!Global.Game.IsNullInstance)
{
if (argParser.cmdLoadState != null)
if (_argParser.cmdLoadState != null)
{
LoadState(argParser.cmdLoadState, Path.GetFileName(argParser.cmdLoadState));
LoadState(_argParser.cmdLoadState, Path.GetFileName(_argParser.cmdLoadState));
}
else if (argParser.cmdLoadSlot != null)
else if (_argParser.cmdLoadSlot != null)
{
LoadQuickSave($"QuickSave{argParser.cmdLoadSlot}");
LoadQuickSave($"QuickSave{_argParser.cmdLoadSlot}");
}
else if (Global.Config.AutoLoadLastSaveSlot)
{
@ -393,14 +388,14 @@ namespace BizHawk.Client.EmuHawk
}
//start Lua Console if requested in the command line arguments
if (argParser.luaConsole)
if (_argParser.luaConsole)
{
GlobalWin.Tools.Load<LuaConsole>();
}
//load Lua Script if requested in the command line arguments
if (argParser.luaScript != null)
if (_argParser.luaScript != null)
{
GlobalWin.Tools.LuaConsole.LoadLuaFile(argParser.luaScript);
GlobalWin.Tools.LuaConsole.LoadLuaFile(_argParser.luaScript);
}
GlobalWin.Tools.AutoLoad();
@ -421,11 +416,11 @@ namespace BizHawk.Client.EmuHawk
{
PauseEmulator();
}
// start dumping, if appropriate
if (argParser.cmdDumpType != null && argParser.cmdDumpName != null)
if (_argParser.cmdDumpType != null && _argParser.cmdDumpName != null)
{
RecordAv(argParser.cmdDumpType, argParser.cmdDumpName);
RecordAv(_argParser.cmdDumpType, _argParser.cmdDumpName);
}
SetMainformMovieInfo();
@ -438,7 +433,7 @@ namespace BizHawk.Client.EmuHawk
};
}
private readonly bool _supressSyncSettingsWarning;
private readonly bool _suppressSyncSettingsWarning;
public int ProgramRunLoop()
{
@ -461,7 +456,7 @@ namespace BizHawk.Client.EmuHawk
InitializeFpsData();
for (;;)
for (; ; )
{
Input.Instance.Update();
@ -551,10 +546,7 @@ namespace BizHawk.Client.EmuHawk
private bool _emulatorPaused;
public bool EmulatorPaused
{
get
{
return _emulatorPaused;
}
get => _emulatorPaused;
private set
{
@ -578,7 +570,7 @@ namespace BizHawk.Client.EmuHawk
Paused = paused;
}
public bool Paused { get; private set; }
public bool Paused { get; }
}
#endregion
@ -601,15 +593,12 @@ namespace BizHawk.Client.EmuHawk
private int? _pauseOnFrame;
public int? PauseOnFrame // If set, upon completion of this frame, the client wil pause
{
get
{
return _pauseOnFrame;
}
get => _pauseOnFrame;
set
{
_pauseOnFrame = value;
SetPauseStatusbarIcon();
SetPauseStatusBarIcon();
if (value == null) // TODO: make an Event handler instead, but the logic here is that after turbo seeking, tools will want to do a real update when the emulator finally pauses
{
@ -660,8 +649,7 @@ namespace BizHawk.Client.EmuHawk
// even more special logic for TAStudio:
// TODO - implement by event filter in TAStudio
var maybeTAStudio = ActiveForm as TAStudio;
if (maybeTAStudio != null)
if (ActiveForm is TAStudio maybeTAStudio)
{
if (yieldAlt || maybeTAStudio.IsInMenuLoop)
{
@ -691,10 +679,7 @@ namespace BizHawk.Client.EmuHawk
// This is a quick hack to reduce the dependency on Global.Emulator
private IEmulator Emulator
{
get
{
return Global.Emulator;
}
get => Global.Emulator;
set
{
@ -722,9 +707,9 @@ namespace BizHawk.Client.EmuHawk
private void ProcessInput()
{
ControllerInputCoalescer conInput = (ControllerInputCoalescer)Global.ControllerInputCoalescer;
var conInput = (ControllerInputCoalescer)Global.ControllerInputCoalescer;
for (;;)
for (; ; )
{
// loop through all available events
var ie = Input.Instance.DequeueEvent();
@ -760,11 +745,11 @@ namespace BizHawk.Client.EmuHawk
}
}
// ordinarily, an alt release with nothing else would move focus to the menubar. but that is sort of useless, and hard to implement exactly right.
// ordinarily, an alt release with nothing else would move focus to the MenuBar. but that is sort of useless, and hard to implement exactly right.
}
// zero 09-sep-2012 - all input is eligible for controller input. not sure why the above was done.
// maybe because it doesnt make sense to me to bind hotkeys and controller inputs to the same keystrokes
// maybe because it doesn't make sense to me to bind hotkeys and controller inputs to the same keystrokes
// adelikat 02-dec-2012 - implemented options for how to handle controller vs hotkey conflicts. This is primarily motivated by computer emulation and thus controller being nearly the entire keyboard
bool handled;
@ -780,14 +765,14 @@ namespace BizHawk.Client.EmuHawk
handled = triggers.Aggregate(handled, (current, trigger) => current | CheckHotkey(trigger));
}
// hotkeys which arent handled as actions get coalesced as pollable virtual client buttons
// hotkeys which aren't handled as actions get coalesced as pollable virtual client buttons
if (!handled)
{
_hotkeyCoalescer.Receive(ie);
}
break;
case 1: // Input overrides Hokeys
case 1: // Input overrides Hotkeys
conInput.Receive(ie);
if (!Global.ActiveController.HasBinding(ie.LogicalButton.ToString()))
{
@ -797,7 +782,7 @@ namespace BizHawk.Client.EmuHawk
handled = triggers.Aggregate(handled, (current, trigger) => current | CheckHotkey(trigger));
}
// hotkeys which arent handled as actions get coalesced as pollable virtual client buttons
// hotkeys which aren't handled as actions get coalesced as pollable virtual client buttons
if (!handled)
{
_hotkeyCoalescer.Receive(ie);
@ -812,12 +797,12 @@ namespace BizHawk.Client.EmuHawk
handled = triggers.Aggregate(handled, (current, trigger) => current | CheckHotkey(trigger));
}
// hotkeys which arent handled as actions get coalesced as pollable virtual client buttons
// hotkeys which aren't handled as actions get coalesced as pollable virtual client buttons
if (!handled)
{
_hotkeyCoalescer.Receive(ie);
// Check for hotkeys that may not be handled through Checkhotkey() method, reject controller input mapped to these
// Check for hotkeys that may not be handled through CheckHotkey() method, reject controller input mapped to these
if (!triggers.Any(IsInternalHotkey))
{
conInput.Receive(ie);
@ -859,19 +844,19 @@ namespace BizHawk.Client.EmuHawk
public void PauseEmulator()
{
EmulatorPaused = true;
SetPauseStatusbarIcon();
SetPauseStatusBarIcon();
}
public void UnpauseEmulator()
{
EmulatorPaused = false;
SetPauseStatusbarIcon();
SetPauseStatusBarIcon();
}
public void TogglePause()
{
EmulatorPaused ^= true;
SetPauseStatusbarIcon();
SetPauseStatusBarIcon();
// TODO: have tastudio set a pause status change callback, or take control over pause
if (GlobalWin.Tools.Has<TAStudio>())
@ -1015,15 +1000,15 @@ namespace BizHawk.Client.EmuHawk
{
// TODO - maybe apply a hack tracked during fullscreen here to override it
FormBorderStyle = FormBorderStyle.None;
MainMenuStrip.Visible = Global.Config.DispChrome_MenuFullscreen && !argParser._chromeless;
MainStatusBar.Visible = Global.Config.DispChrome_StatusBarFullscreen && !argParser._chromeless;
MainMenuStrip.Visible = Global.Config.DispChrome_MenuFullscreen && !_argParser._chromeless;
MainStatusBar.Visible = Global.Config.DispChrome_StatusBarFullscreen && !_argParser._chromeless;
}
else
{
MainStatusBar.Visible = Global.Config.DispChrome_StatusBarWindowed && !argParser._chromeless;
MainMenuStrip.Visible = Global.Config.DispChrome_MenuWindowed && !argParser._chromeless;
MaximizeBox = MinimizeBox = Global.Config.DispChrome_CaptionWindowed && !argParser._chromeless;
if (Global.Config.DispChrome_FrameWindowed == 0 || argParser._chromeless)
MainStatusBar.Visible = Global.Config.DispChrome_StatusBarWindowed && !_argParser._chromeless;
MainMenuStrip.Visible = Global.Config.DispChrome_MenuWindowed && !_argParser._chromeless;
MaximizeBox = MinimizeBox = Global.Config.DispChrome_CaptionWindowed && !_argParser._chromeless;
if (Global.Config.DispChrome_FrameWindowed == 0 || _argParser._chromeless)
{
FormBorderStyle = FormBorderStyle.None;
}
@ -1058,17 +1043,17 @@ namespace BizHawk.Client.EmuHawk
// Work around an AMD driver bug in >= vista:
// It seems windows will activate opengl fullscreen mode when a GL control is occupying the exact space of a screen (0,0 and dimensions=screensize)
// AMD cards manifest a problem under these circumstances, flickering other monitors.
// It isnt clear whether nvidia cards are failing to employ this optimization, or just not flickering.
// (this could be determined with more work; other side affects of the fullscreen mode include: corrupted taskbar, no modal boxes on top of GL control, no screenshots)
// It isn't clear whether nvidia cards are failing to employ this optimization, or just not flickering.
// (this could be determined with more work; other side affects of the fullscreen mode include: corrupted TaskBar, no modal boxes on top of GL control, no screenshots)
// At any rate, we can solve this by adding a 1px black border around the GL control
// Please note: It is important to do this before resizing things, otherwise momentarily a GL control without WS_BORDER will be at the magic dimensions and cause the flakeout
if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows
&& Global.Config.DispFullscreenHacks
&& Global.Config.DispMethod == Config.EDispMethod.OpenGL)
{
//ATTENTION: this causes the statusbar to not work well, since the backcolor is now set to black instead of SystemColors.Control.
//It seems that some statusbar elements composite with the backcolor.
//Maybe we could add another control under the statusbar. with a different backcolor
// ATTENTION: this causes the StatusBar to not work well, since the backcolor is now set to black instead of SystemColors.Control.
// It seems that some StatusBar elements composite with the backcolor.
// Maybe we could add another control under the StatusBar. with a different backcolor
Padding = new Padding(1);
BackColor = Color.Black;
@ -1093,11 +1078,11 @@ namespace BizHawk.Client.EmuHawk
if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows)
{
// do this even if DispFullscreenHacks arent enabled, to restore it in case it changed underneath us or something
// do this even if DispFullscreenHacks aren't enabled, to restore it in case it changed underneath us or something
Padding = new Padding(0);
// it's important that we set the form color back to this, because the statusbar icons blend onto the mainform, not onto the statusbar--
// so we need the statusbar and mainform backdrop color to match
// it's important that we set the form color back to this, because the StatusBar icons blend onto the mainform, not onto the StatusBar--
// so we need the StatusBar and mainform backdrop color to match
BackColor = SystemColors.Control;
}
@ -1188,8 +1173,6 @@ namespace BizHawk.Client.EmuHawk
}
}
private LibsnesCore AsSNES => Emulator as LibsnesCore;
private void SNES_ToggleBg(int layer)
{
if (!(Emulator is LibsnesCore) && !(Emulator is Snes9x))
@ -1351,7 +1334,7 @@ namespace BizHawk.Client.EmuHawk
private AutofireController _autofireNullControls;
// Sound refator TODO: we can enforce async mode here with a property that gets/sets this but does an async check
// Sound refactor TODO: we can enforce async mode here with a property that gets/sets this but does an async check
private ISoundProvider _aviSoundInputAsync; // Note: This sound provider must be in async mode!
private SimpleSyncSoundProvider _dumpProxy; // an audio proxy used for dumping
@ -1392,7 +1375,7 @@ namespace BizHawk.Client.EmuHawk
private int _lastOpenRomFilter;
private ArgParser argParser = new ArgParser();
private readonly ArgParser _argParser = new ArgParser();
// Resources
private Bitmap _statusBarDiskLightOnImage;
@ -1407,7 +1390,7 @@ namespace BizHawk.Client.EmuHawk
public PresentationPanel PresentationPanel { get; }
//countdown for saveram autoflushing
// countdown for saveram autoflushing
public int AutoFlushSaveRamIn { get; set; }
#endregion
@ -1462,7 +1445,7 @@ namespace BizHawk.Client.EmuHawk
}
}
if (!Global.Config.DispChrome_CaptionWindowed || argParser._chromeless)
if (!Global.Config.DispChrome_CaptionWindowed || _argParser._chromeless)
{
str = "";
}
@ -1495,11 +1478,7 @@ namespace BizHawk.Client.EmuHawk
DumpStatusButton.Image = Properties.Resources.Blank;
DumpStatusButton.ToolTipText = "";
if (Emulator.IsNull())
{
return;
}
else if (Global.Game == null)
if (Emulator.IsNull() || Global.Game == null)
{
return;
}
@ -1551,10 +1530,10 @@ namespace BizHawk.Client.EmuHawk
{
annotation = Emulator.CoreComm.RomStatusAnnotation;
if (annotation == "Multi-disk bundler")
{
DumpStatusButton.Image = Properties.Resources.RetroQuestion;
}
if (annotation == "Multi-disk bundler")
{
DumpStatusButton.Image = Properties.Resources.RetroQuestion;
}
}
DumpStatusButton.ToolTipText = annotation;
@ -1586,8 +1565,8 @@ namespace BizHawk.Client.EmuHawk
}
else
{
var oldram = Emulator.AsSaveRam().CloneSaveRam();
if (oldram == null)
var oldRam = Emulator.AsSaveRam().CloneSaveRam();
if (oldRam == null)
{
// we're eating this one now. The possible negative consequence is that a user could lose
// their saveram and not know why
@ -1596,7 +1575,7 @@ namespace BizHawk.Client.EmuHawk
}
// why do we silently truncate\pad here instead of warning\erroring?
sram = new byte[oldram.Length];
sram = new byte[oldRam.Length];
using (var reader = new BinaryReader(
new FileStream(PathManager.SaveRamPath(Global.Game), FileMode.Open, FileAccess.Read)))
{
@ -1612,7 +1591,7 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.OSD.AddMessage("An error occurred while loading Sram");
}
}
}
}
public bool FlushSaveRAM(bool autosave = false)
{
@ -1635,15 +1614,15 @@ namespace BizHawk.Client.EmuHawk
var backupFile = new FileInfo(backupPath);
if (file.Directory != null && !file.Directory.Exists)
{
try
{
file.Directory.Create();
}
catch
{
GlobalWin.OSD.AddMessage($"Unable to flush SaveRAM to: {newFile.Directory}");
return false;
}
try
{
file.Directory.Create();
}
catch
{
GlobalWin.OSD.AddMessage($"Unable to flush SaveRAM to: {newFile.Directory}");
return false;
}
}
var writer = new BinaryWriter(new FileStream(newPath, FileMode.Create, FileAccess.Write));
@ -1675,7 +1654,7 @@ namespace BizHawk.Client.EmuHawk
newFile.MoveTo(path);
}
return true;
return true;
}
private void RewireSound()
@ -1729,8 +1708,8 @@ namespace BizHawk.Client.EmuHawk
sNESToolStripMenuItem.Visible = false;
neoGeoPocketToolStripMenuItem.Visible = false;
pCFXToolStripMenuItem.Visible = false;
zXSpectrumToolStripMenuItem.Visible = false;
amstradCPCToolStripMenuItem.Visible = false;
zXSpectrumToolStripMenuItem.Visible = false;
amstradCPCToolStripMenuItem.Visible = false;
VectrexSubMenu.Visible = false;
switch (system)
@ -1810,7 +1789,7 @@ namespace BizHawk.Client.EmuHawk
else
{
DGBSubMenu.Visible = true;
}
}
break;
case "WSWAN":
wonderSwanToolStripMenuItem.Visible = true;
@ -1833,17 +1812,17 @@ namespace BizHawk.Client.EmuHawk
case "PCFX":
pCFXToolStripMenuItem.Visible = true;
break;
case "ZXSpectrum":
zXSpectrumToolStripMenuItem.Visible = true;
case "ZXSpectrum":
zXSpectrumToolStripMenuItem.Visible = true;
#if DEBUG
ZXSpectrumExportSnapshotMenuItemMenuItem.Visible = true;
ZXSpectrumExportSnapshotMenuItemMenuItem.Visible = true;
#else
ZXSpectrumExportSnapshotMenuItemMenuItem.Visible = false;
ZXSpectrumExportSnapshotMenuItemMenuItem.Visible = false;
#endif
break;
case "AmstradCPC":
amstradCPCToolStripMenuItem.Visible = true;
break;
break;
case "AmstradCPC":
amstradCPCToolStripMenuItem.Visible = true;
break;
case "GGL":
GGLSubMenu.Visible = true;
break;
@ -1909,7 +1888,7 @@ namespace BizHawk.Client.EmuHawk
}
}
private void SetPauseStatusbarIcon()
private void SetPauseStatusBarIcon()
{
if (EmulatorPaused)
{
@ -2031,8 +2010,8 @@ namespace BizHawk.Client.EmuHawk
private void SaveSlotSelectedMessage()
{
int slot = Global.Config.SaveSlot;
string emptypart = _stateSlots.HasSlot(slot) ? "" : " (empty)";
string message = $"Slot {slot}{emptypart} selected.";
string emptyPart = _stateSlots.HasSlot(slot) ? "" : " (empty)";
string message = $"Slot {slot}{emptyPart} selected.";
GlobalWin.OSD.AddMessage(message);
}
@ -2047,19 +2026,18 @@ namespace BizHawk.Client.EmuHawk
Size currVideoSize = new Size(video.BufferWidth, video.BufferHeight);
Size currVirtualSize = new Size(video.VirtualWidth, video.VirtualHeight);
bool resizeFramebuffer = false;
if (currVideoSize != _lastVideoSize || currVirtualSize != _lastVirtualSize)
resizeFramebuffer = true;
bool isZero = false;
if (currVideoSize.Width == 0 || currVideoSize.Height == 0 || currVirtualSize.Width == 0 || currVirtualSize.Height == 0)
isZero = true;
bool resizeFramebuffer = currVideoSize != _lastVideoSize || currVirtualSize != _lastVirtualSize;
bool isZero = currVideoSize.Width == 0 || currVideoSize.Height == 0 || currVirtualSize.Width == 0 || currVirtualSize.Height == 0;
//don't resize if the new size is 0 somehow; we'll wait until we have a sensible size
if(isZero)
if (isZero)
{
resizeFramebuffer = false;
}
if(resizeFramebuffer)
if (resizeFramebuffer)
{
_lastVideoSize = currVideoSize;
_lastVirtualSize = currVirtualSize;
@ -2068,7 +2046,7 @@ namespace BizHawk.Client.EmuHawk
//rendering flakes out egregiously if we have a zero size
//can we fix it later not to?
if(isZero)
if (isZero)
GlobalWin.DisplayManager.Blank();
else
GlobalWin.DisplayManager.UpdateSource(video);
@ -2142,8 +2120,8 @@ namespace BizHawk.Client.EmuHawk
new FileFilterEntry("Atari 2600", "*.a26;%ARCH%", developerFilters: "*.bin"),
new FileFilterEntry("Atari 7800", "*.a78;%ARCH%", developerFilters: "*.bin"),
new FileFilterEntry("Atari Lynx", "*.lnx;%ARCH%"),
new FileFilterEntry("Colecovision", "*.col;%ARCH%"),
new FileFilterEntry("Intellivision", "*.int;*.bin;*.rom;%ARCH%"),
new FileFilterEntry("ColecoVision", "*.col;%ARCH%"),
new FileFilterEntry("IntelliVision", "*.int;*.bin;*.rom;%ARCH%"),
new FileFilterEntry("TI-83", "*.rom;%ARCH%"),
new FileFilterEntry("Archive Files", "%ARCH%"),
new FileFilterEntry("Genesis", "*.gen;*.md;*.smd;*.32x;*.bin;*.cue;*.ccd;%ARCH%"),
@ -2219,8 +2197,8 @@ namespace BizHawk.Client.EmuHawk
{
e.Settings = Global.Config.GetCoreSyncSettings(e.Core);
// adelikat: only show this nag if the core actually has sync settings, not all cores do
if (e.Settings != null && !_supressSyncSettingsWarning)
// Only show this nag if the core actually has sync settings, not all cores do
if (e.Settings != null && !_suppressSyncSettingsWarning)
{
MessageBox.Show(
"No sync settings found, using currently configured settings for this core.",
@ -2687,22 +2665,22 @@ namespace BizHawk.Client.EmuHawk
var attributes = Emulator.Attributes();
CoreNameStatusBarButton.Text = Emulator.DisplayName();
CoreNameStatusBarButton.Image = Emulator.Icon();
CoreNameStatusBarButton.ToolTipText = attributes.Ported ? "(ported) " : "";
CoreNameStatusBarButton.Image = Emulator.Icon();
CoreNameStatusBarButton.ToolTipText = attributes.Ported ? "(ported) " : "";
if (Emulator.SystemId == "ZXSpectrum")
{
var core = (Emulation.Cores.Computers.SinclairSpectrum.ZXSpectrum)Emulator as Emulation.Cores.Computers.SinclairSpectrum.ZXSpectrum;
CoreNameStatusBarButton.ToolTipText = core.GetMachineType();
}
if (Emulator.SystemId == "ZXSpectrum")
{
var core = (Emulation.Cores.Computers.SinclairSpectrum.ZXSpectrum)Emulator;
CoreNameStatusBarButton.ToolTipText = core.GetMachineType();
}
if (Emulator.SystemId == "AmstradCPC")
{
var core = (Emulation.Cores.Computers.AmstradCPC.AmstradCPC)Emulator as Emulation.Cores.Computers.AmstradCPC.AmstradCPC;
CoreNameStatusBarButton.ToolTipText = core.GetMachineType();
}
}
if (Emulator.SystemId == "AmstradCPC")
{
var core = (Emulation.Cores.Computers.AmstradCPC.AmstradCPC)Emulator;
CoreNameStatusBarButton.ToolTipText = core.GetMachineType();
}
}
private void ToggleKeyPriority()
{
@ -2819,8 +2797,7 @@ namespace BizHawk.Client.EmuHawk
runFrame = true;
}
bool returnToRecording;
bool isRewinding = Rewind(ref runFrame, currentTimestamp, out returnToRecording);
bool isRewinding = Rewind(ref runFrame, currentTimestamp, out var returnToRecording);
float atten = 0;
@ -2894,7 +2871,7 @@ namespace BizHawk.Client.EmuHawk
FlushSaveRAM(true);
}
}
// why not skip audio if the user doesnt want sound
// why not skip audio if the user doesn't want sound
bool renderSound = (Global.Config.SoundEnabled && !IsTurboing) || (_currAviWriter?.UsesAudio ?? false);
if (!renderSound)
{
@ -3046,11 +3023,11 @@ namespace BizHawk.Client.EmuHawk
/// <summary>
/// start AVI recording, unattended
/// </summary>
/// <param name="videowritername">match the short name of an <seealso cref="IVideoWriter"/></param>
/// <param name="videoWriterName">match the short name of an <seealso cref="IVideoWriter"/></param>
/// <param name="filename">filename to save to</param>
private void RecordAv(string videowritername, string filename)
private void RecordAv(string videoWriterName, string filename)
{
RecordAvBase(videowritername, filename, true);
RecordAvBase(videoWriterName, filename, true);
}
/// <summary>
@ -3064,7 +3041,7 @@ namespace BizHawk.Client.EmuHawk
/// <summary>
/// start AV recording
/// </summary>
private void RecordAvBase(string videowritername, string filename, bool unattended)
private void RecordAvBase(string videoWriterName, string filename, bool unattended)
{
if (_currAviWriter != null)
{
@ -3074,15 +3051,15 @@ namespace BizHawk.Client.EmuHawk
// select IVideoWriter to use
IVideoWriter aw;
if (string.IsNullOrEmpty(videowritername) && !string.IsNullOrEmpty(Global.Config.VideoWriter))
if (string.IsNullOrEmpty(videoWriterName) && !string.IsNullOrEmpty(Global.Config.VideoWriter))
{
videowritername = Global.Config.VideoWriter;
videoWriterName = Global.Config.VideoWriter;
}
_dumpaudiosync = Global.Config.VideoWriterAudioSync;
if (unattended && !string.IsNullOrEmpty(videowritername))
if (unattended && !string.IsNullOrEmpty(videoWriterName))
{
aw = VideoWriterInventory.GetVideoWriter(videowritername);
aw = VideoWriterInventory.GetVideoWriter(videoWriterName);
}
else
{
@ -3093,7 +3070,7 @@ namespace BizHawk.Client.EmuHawk
if (aw == null)
{
GlobalWin.OSD.AddMessage(
unattended ? $"Couldn't start video writer \"{videowritername}\"" : "A/V capture canceled.");
unattended ? $"Couldn't start video writer \"{videoWriterName}\"" : "A/V capture canceled.");
return;
}
@ -3176,7 +3153,7 @@ namespace BizHawk.Client.EmuHawk
var sfd = new SaveFileDialog();
if (Global.Game != null)
{
sfd.FileName = $"{PathManager.FilesystemSafeName(Global.Game)}.{ext}"; // dont use Path.ChangeExtension, it might wreck game names with dots in them
sfd.FileName = $"{PathManager.FilesystemSafeName(Global.Game)}.{ext}"; // don't use Path.ChangeExtension, it might wreck game names with dots in them
sfd.InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.AvPathFragment, null);
}
else
@ -3285,9 +3262,9 @@ namespace BizHawk.Client.EmuHawk
try
{
// is this the best time to handle this? or deeper inside?
if (argParser._currAviWriterFrameList != null)
if (_argParser._currAviWriterFrameList != null)
{
if (!argParser._currAviWriterFrameList.Contains(Emulator.Frame))
if (!_argParser._currAviWriterFrameList.Contains(Emulator.Frame))
{
goto HANDLE_AUTODUMP;
}
@ -3369,14 +3346,14 @@ namespace BizHawk.Client.EmuHawk
AbortAv();
}
HANDLE_AUTODUMP:
if (argParser._autoDumpLength > 0)
HANDLE_AUTODUMP:
if (_argParser._autoDumpLength > 0)
{
argParser._autoDumpLength--;
if (argParser._autoDumpLength == 0) // finish
_argParser._autoDumpLength--;
if (_argParser._autoDumpLength == 0) // finish
{
StopAv();
if (argParser._autoCloseOnDump)
if (_argParser._autoCloseOnDump)
{
_exitRequestPending = true;
}
@ -3385,7 +3362,7 @@ namespace BizHawk.Client.EmuHawk
}
}
private int? LoadArhiveChooser(HawkFile file)
private int? LoadArchiveChooser(HawkFile file)
{
var ac = new ArchiveChooser(file);
if (ac.ShowDialog(this) == DialogResult.OK)
@ -3467,11 +3444,11 @@ namespace BizHawk.Client.EmuHawk
if (!LoadRomInternal(path, args))
return false;
//what's the meaning of the last rom path when opening an archive? based on the archive file location
// what's the meaning of the last rom path when opening an archive? based on the archive file location
if (args.OpenAdvanced is OpenAdvanced_OpenRom)
{
var leftpart = path.Split('|')[0];
Global.Config.LastRomPath = Path.GetFullPath(Path.GetDirectoryName(leftpart));
var leftPart = path.Split('|')[0];
Global.Config.LastRomPath = Path.GetFullPath(Path.GetDirectoryName(leftPart));
}
return true;
@ -3505,7 +3482,7 @@ namespace BizHawk.Client.EmuHawk
// if the core is managing its own DE through SyncSettings a 'deterministic' bool can be passed into the core's constructor
// it is then up to the core itself to override its own local DeterministicEmulation setting
bool deterministic = args.Deterministic ?? Global.MovieSession.QueuedMovie != null;
if (!GlobalWin.Tools.AskSave())
{
return false;
@ -3515,7 +3492,7 @@ namespace BizHawk.Client.EmuHawk
var loader = new RomLoader
{
ChooseArchive = LoadArhiveChooser,
ChooseArchive = LoadArchiveChooser,
ChoosePlatform = ChoosePlatformForRom,
Deterministic = deterministic,
MessageCallback = GlobalWin.OSD.AddMessage,
@ -3544,7 +3521,7 @@ namespace BizHawk.Client.EmuHawk
if (ioa_retro != null)
{
// prepare a core specification
// if it wasnt already specified, use the current default
// if it wasn't already specified, use the current default
if (ioa_retro.CorePath == null)
{
ioa_retro.CorePath = Global.Config.LibretroCore;
@ -3560,7 +3537,7 @@ namespace BizHawk.Client.EmuHawk
if (oa_openrom != null)
{
// path already has the right value, while ioa.Path is null (interestingly, these are swapped below)
// I doubt null is meant to be assigned here, and it just prevents gameload
// I doubt null is meant to be assigned here, and it just prevents game load
//path = ioa_openrom.Path;
}
@ -3568,7 +3545,7 @@ namespace BizHawk.Client.EmuHawk
var result = loader.LoadRom(path, nextComm);
// we need to replace the path in the OpenAdvanced with the canonical one the user chose.
// It can't be done until loder.LoadRom happens (for CanonicalFullPath)
// It can't be done until loader.LoadRom happens (for CanonicalFullPath)
// i'm not sure this needs to be more abstractly engineered yet until we have more OpenAdvanced examples
if (oa_retro != null)
{
@ -3588,7 +3565,7 @@ namespace BizHawk.Client.EmuHawk
CoreFileProvider.SyncCoreCommInputSignals(nextComm);
InputManager.SyncControls();
if (oa_openrom != null && Path.GetExtension(oa_openrom.Path.Replace("|","")).ToLowerInvariant() == ".xml" && !(Emulator is LibsnesCore))
if (oa_openrom != null && Path.GetExtension(oa_openrom.Path.Replace("|", "")).ToLowerInvariant() == ".xml" && !(Emulator is LibsnesCore))
{
// this is a multi-disk bundler file
// determine the xml assets and create RomStatusDetails for all of them
@ -3625,9 +3602,8 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.Tools.Load<TI83KeyPad>();
}
if (loader.LoadedEmulator is NES)
if (loader.LoadedEmulator is NES nes)
{
var nes = (NES)loader.LoadedEmulator;
if (!string.IsNullOrWhiteSpace(nes.GameName))
{
Global.Game.Name = nes.GameName;
@ -3635,9 +3611,8 @@ namespace BizHawk.Client.EmuHawk
Global.Game.Status = nes.RomStatus;
}
else if (loader.LoadedEmulator is QuickNES)
else if (loader.LoadedEmulator is QuickNES qns)
{
var qns = (QuickNES)loader.LoadedEmulator;
if (!string.IsNullOrWhiteSpace(qns.BootGodName))
{
Global.Game.Name = qns.BootGodName;
@ -3804,15 +3779,15 @@ namespace BizHawk.Client.EmuHawk
else if (Emulator.HasSaveRam() && Emulator.AsSaveRam().SaveRamModified)
{
if (!FlushSaveRAM())
{
var msgRes = MessageBox.Show("Failed flushing the game's Save RAM to your disk.\nClose without flushing Save RAM?",
"Directory IO Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
{
var msgRes = MessageBox.Show("Failed flushing the game's Save RAM to your disk.\nClose without flushing Save RAM?",
"Directory IO Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
if (msgRes != DialogResult.Yes)
{
return;
}
}
if (msgRes != DialogResult.Yes)
{
return;
}
}
}
StopAv();
@ -3918,7 +3893,7 @@ namespace BizHawk.Client.EmuHawk
return int.Parse(slot.Substring(slot.Length - 1, 1));
}
public void LoadState(string path, string userFriendlyStateName, bool fromLua = false, bool supressOSD = false) // Move to client.common
public void LoadState(string path, string userFriendlyStateName, bool fromLua = false, bool suppressOSD = false) // Move to client.common
{
if (!Emulator.HasSavestates())
{
@ -3960,7 +3935,7 @@ namespace BizHawk.Client.EmuHawk
ClearRewindData();
}
if (!supressOSD)
if (!suppressOSD)
{
GlobalWin.OSD.AddMessage($"Loaded state: {userFriendlyStateName}");
}
@ -3973,15 +3948,14 @@ namespace BizHawk.Client.EmuHawk
Global.MovieSession.Movie.IsCountingRerecords = wasCountingRerecords;
}
public void LoadQuickSave(string quickSlotName, bool fromLua = false, bool supressOSD = false)
public void LoadQuickSave(string quickSlotName, bool fromLua = false, bool suppressOSD = false)
{
if (!Emulator.HasSavestates())
{
return;
}
bool handled;
ClientApi.OnBeforeQuickLoad(this, quickSlotName, out handled);
ClientApi.OnBeforeQuickLoad(this, quickSlotName, out var handled);
if (handled)
{
return;
@ -4001,7 +3975,7 @@ namespace BizHawk.Client.EmuHawk
return;
}
LoadState(path, quickSlotName, fromLua, supressOSD);
LoadState(path, quickSlotName, fromLua, suppressOSD);
}
public void SaveState(string path, string userFriendlyStateName, bool fromLua)
@ -4268,11 +4242,6 @@ namespace BizHawk.Client.EmuHawk
}
}
private void GBAcoresettingsToolStripMenuItem1_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "Gameboy Advance Settings");
}
private void CaptureRewind(bool suppressCaptureRewind)
{
if (IsRewindSlave)
@ -4285,26 +4254,6 @@ namespace BizHawk.Client.EmuHawk
}
}
private void preferencesToolStripMenuItem1_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "VirtualBoy Settings");
}
private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "Snes9x Settings");
}
private void preferencesToolStripMenuItem2_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "NeoPop Settings");
}
private void preferencesToolStripMenuItem3_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "PC-FX Settings");
}
private bool Rewind(ref bool runFrame, long currentTimestamp, out bool returnToRecording)
{
var isRewinding = false;
@ -4332,7 +4281,7 @@ namespace BizHawk.Client.EmuHawk
_frameRewindWasPaused = false;
}
// if we're freely running, there's no need for reverse frame progress semantics (that may be debateable though)
// if we're freely running, there's no need for reverse frame progress semantics (that may be debatable though)
if (!EmulatorPaused)
{
isRewinding = true;

View File

@ -179,15 +179,22 @@
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=addr/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=amstrad/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Autofire/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=autoflushing/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=autohold/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=autoload/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=autorestore/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Autosave/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=backcolor/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=botting/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=bsnes/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Bundler/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=chromeless/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Coalescer/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Coleco/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=colesced/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=curr/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=dearchive/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Dega/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Disasm/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=disassembly/@EntryIndexedValue">True</s:Boolean>
@ -199,13 +206,19 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=frameadvance/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=FCEUX/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=feos/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Framebuffer/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Frameskip/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Frameskipping/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Gameboy/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=gamedb/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=greenzone/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=greenzoned/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Homebrew/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hotkey/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hotkeys/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Intelli/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=INTV/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Libretro/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Loadstate/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Loadstates/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=lsmv/@EntryIndexedValue">True</s:Boolean>
@ -215,26 +228,40 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mednafen/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Multidisk/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mupen/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nametable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nintendulator/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=nvidia/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=opengl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Overdump/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Overscan/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=PCFX/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=PCSX/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Phaser/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pollable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=saveram/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=savestate/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=savestates/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Screenshot/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Screensize/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=speccy/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sram/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=sSeeki/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Statable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Syncless/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=taseditor/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=tasproj/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tastudio/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Turboing/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=unpause/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=unpaused/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unpausing/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unthrottle/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unthrottled/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Vectrex/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Virtua/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Vsync/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=winforms/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=WSWAN/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Xjin/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Yabause/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ZSNES/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>