Clean up `MainForm.CheckHotkey`

This commit is contained in:
YoshiRulz 2022-09-11 14:29:11 +10:00
parent d7c79a5f03
commit 728f393eb1
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
1 changed files with 121 additions and 368 deletions

View File

@ -10,6 +10,36 @@ namespace BizHawk.Client.EmuHawk
{
private bool CheckHotkey(string trigger)
{
void SelectAndSaveToSlot(int slot)
{
SaveQuickSave($"QuickSave{slot}");
Config.SaveSlot = slot;
UpdateStatusSlots();
}
void SelectAndLoadFromSlot(int slot)
{
LoadQuickSave($"QuickSave{slot}");
Config.SaveSlot = slot;
UpdateStatusSlots();
}
void ToggleGambatteSyncSetting(
string name,
Func<Gameboy.GambatteSyncSettings, bool> getter,
Action<Gameboy.GambatteSyncSettings, bool> setter)
{
if (Emulator is not Gameboy gb) return;
if (gb.DeterministicEmulation)
{
AddOnScreenMessage($"{name} cannot be toggled during movie recording.");
return;
}
var ss = gb.GetSyncSettings();
var newState = !getter(ss);
setter(ss, newState);
gb.PutSyncSettings(ss);
AddOnScreenMessage($"{name} toggled {(newState ? "on" : "off")}");
}
switch (trigger)
{
default:
@ -48,12 +78,7 @@ namespace BizHawk.Client.EmuHawk
case "Screen Raw to Clipboard":
// Ctrl+C clash. any tool that has such acc must check this.
// maybe check if mainform has focus instead?
if (Tools.IsLoaded<TAStudio>() && Tools.Get<TAStudio>().ContainsFocus)
{
break;
}
TakeScreenshotToClipboard();
if (!(Tools.IsLoaded<TAStudio>() && Tools.Get<TAStudio>().ContainsFocus)) TakeScreenshotToClipboard();
break;
case "Screen Client to Clipboard":
TakeScreenshotClientToClipboard();
@ -80,11 +105,7 @@ namespace BizHawk.Client.EmuHawk
ToggleFrameCounter();
break;
case "Lag Counter":
if (Emulator.CanPollInput())
{
ToggleLagCounter();
}
if (Emulator.CanPollInput()) ToggleLagCounter();
break;
case "Input Display":
ToggleInputDisplay();
@ -141,104 +162,64 @@ namespace BizHawk.Client.EmuHawk
// Save States
case "Save State 0":
SaveQuickSave("QuickSave0");
Config.SaveSlot = 0;
UpdateStatusSlots();
SelectAndSaveToSlot(0);
break;
case "Save State 1":
SaveQuickSave("QuickSave1");
Config.SaveSlot = 1;
UpdateStatusSlots();
SelectAndSaveToSlot(1);
break;
case "Save State 2":
SaveQuickSave("QuickSave2");
Config.SaveSlot = 2;
UpdateStatusSlots();
SelectAndSaveToSlot(2);
break;
case "Save State 3":
SaveQuickSave("QuickSave3");
Config.SaveSlot = 3;
UpdateStatusSlots();
SelectAndSaveToSlot(3);
break;
case "Save State 4":
SaveQuickSave("QuickSave4");
Config.SaveSlot = 4;
UpdateStatusSlots();
SelectAndSaveToSlot(4);
break;
case "Save State 5":
SaveQuickSave("QuickSave5");
Config.SaveSlot = 5;
UpdateStatusSlots();
SelectAndSaveToSlot(5);
break;
case "Save State 6":
SaveQuickSave("QuickSave6");
Config.SaveSlot = 6;
UpdateStatusSlots();
SelectAndSaveToSlot(6);
break;
case "Save State 7":
SaveQuickSave("QuickSave7");
Config.SaveSlot = 7;
UpdateStatusSlots();
SelectAndSaveToSlot(7);
break;
case "Save State 8":
SaveQuickSave("QuickSave8");
Config.SaveSlot = 8;
UpdateStatusSlots();
SelectAndSaveToSlot(8);
break;
case "Save State 9":
SaveQuickSave("QuickSave9");
Config.SaveSlot = 9;
UpdateStatusSlots();
SelectAndSaveToSlot(9);
break;
case "Load State 0":
LoadQuickSave("QuickSave0");
Config.SaveSlot = 0;
UpdateStatusSlots();
SelectAndLoadFromSlot(0);
break;
case "Load State 1":
LoadQuickSave("QuickSave1");
Config.SaveSlot = 1;
UpdateStatusSlots();
SelectAndLoadFromSlot(1);
break;
case "Load State 2":
LoadQuickSave("QuickSave2");
Config.SaveSlot = 2;
UpdateStatusSlots();
SelectAndLoadFromSlot(2);
break;
case "Load State 3":
LoadQuickSave("QuickSave3");
Config.SaveSlot = 3;
UpdateStatusSlots();
SelectAndLoadFromSlot(3);
break;
case "Load State 4":
LoadQuickSave("QuickSave4");
Config.SaveSlot = 4;
UpdateStatusSlots();
SelectAndLoadFromSlot(4);
break;
case "Load State 5":
LoadQuickSave("QuickSave5");
Config.SaveSlot = 5;
UpdateStatusSlots();
SelectAndLoadFromSlot(5);
break;
case "Load State 6":
LoadQuickSave("QuickSave6");
Config.SaveSlot = 6;
UpdateStatusSlots();
SelectAndLoadFromSlot(6);
break;
case "Load State 7":
LoadQuickSave("QuickSave7");
Config.SaveSlot = 7;
UpdateStatusSlots();
SelectAndLoadFromSlot(7);
break;
case "Load State 8":
LoadQuickSave("QuickSave8");
Config.SaveSlot = 8;
UpdateStatusSlots();
SelectAndLoadFromSlot(8);
break;
case "Load State 9":
LoadQuickSave("QuickSave9");
Config.SaveSlot = 9;
UpdateStatusSlots();
SelectAndLoadFromSlot(9);
break;
case "Select State 0":
@ -347,314 +328,119 @@ namespace BizHawk.Client.EmuHawk
// RAM Search
case "Do Search":
if (Tools.IsLoaded<RamSearch>())
{
Tools.RamSearch.DoSearch();
}
else
{
return false;
}
if (!Tools.IsLoaded<RamSearch>()) return false;
Tools.RamSearch.DoSearch();
break;
case "New Search":
if (Tools.IsLoaded<RamSearch>())
{
Tools.RamSearch.NewSearch();
}
else
{
return false;
}
if (!Tools.IsLoaded<RamSearch>()) return false;
Tools.RamSearch.NewSearch();
break;
case "Previous Compare To":
if (Tools.IsLoaded<RamSearch>())
{
Tools.RamSearch.NextCompareTo(reverse: true);
}
else
{
return false;
}
if (!Tools.IsLoaded<RamSearch>()) return false;
Tools.RamSearch.NextCompareTo(reverse: true);
break;
case "Next Compare To":
if (Tools.IsLoaded<RamSearch>())
{
Tools.RamSearch.NextCompareTo();
}
else
{
return false;
}
if (!Tools.IsLoaded<RamSearch>()) return false;
Tools.RamSearch.NextCompareTo();
break;
case "Previous Operator":
if (Tools.IsLoaded<RamSearch>())
{
Tools.RamSearch.NextOperator(reverse: true);
}
else
{
return false;
}
if (!Tools.IsLoaded<RamSearch>()) return false;
Tools.RamSearch.NextOperator(reverse: true);
break;
case "Next Operator":
if (Tools.IsLoaded<RamSearch>())
{
Tools.RamSearch.NextOperator();
}
else
{
return false;
}
if (!Tools.IsLoaded<RamSearch>()) return false;
Tools.RamSearch.NextOperator();
break;
// TAStudio
case "Add Branch":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AddBranchExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AddBranchExternal();
break;
case "Delete Branch":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.RemoveBranchExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.RemoveBranchExternal();
break;
case "Show Cursor":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.SetVisibleFrame();
Tools.TAStudio.RefreshDialog();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.SetVisibleFrame();
Tools.TAStudio.RefreshDialog();
break;
case "Toggle Follow Cursor":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.TasPlaybackBox.FollowCursor ^= true;
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.TasPlaybackBox.FollowCursor ^= true;
break;
case "Toggle Auto-Restore":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.TasPlaybackBox.AutoRestore ^= true;
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.TasPlaybackBox.AutoRestore ^= true;
break;
case "Toggle Turbo Seek":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.TasPlaybackBox.TurboSeek ^= true;
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.TasPlaybackBox.TurboSeek ^= true;
break;
case "Undo":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.UndoExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.UndoExternal();
break;
case "Redo":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.RedoExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.RedoExternal();
break;
case "Sel. bet. Markers":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.SelectBetweenMarkersExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.SelectBetweenMarkersExternal();
break;
case "Select All":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.SelectAllExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.SelectAllExternal();
break;
case "Reselect Clip.":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.ReselectClipboardExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.ReselectClipboardExternal();
break;
case "Clear Frames":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.ClearFramesExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.ClearFramesExternal();
break;
case "Insert Frame":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.InsertFrameExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.InsertFrameExternal();
break;
case "Insert # Frames":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.InsertNumFramesExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.InsertNumFramesExternal();
break;
case "Delete Frames":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.DeleteFramesExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.DeleteFramesExternal();
break;
case "Clone Frames":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.CloneFramesExternal();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.CloneFramesExternal();
break;
case "Analog Increment":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AnalogIncrementByOne();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AnalogIncrementByOne();
break;
case "Analog Decrement":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AnalogDecrementByOne();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AnalogDecrementByOne();
break;
case "Analog Incr. by 10":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AnalogIncrementByTen();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AnalogIncrementByTen();
break;
case "Analog Decr. by 10":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AnalogDecrementByTen();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AnalogDecrementByTen();
break;
case "Analog Maximum":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AnalogMax();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AnalogMax();
break;
case "Analog Minimum":
if (Tools.IsLoaded<TAStudio>())
{
Tools.TAStudio.AnalogMin();
}
else
{
return false;
}
if (!Tools.IsLoaded<TAStudio>()) return false;
Tools.TAStudio.AnalogMin();
break;
// SNES
@ -685,55 +471,22 @@ namespace BizHawk.Client.EmuHawk
// GB
case "GB Toggle BG":
if (Emulator is Gameboy gb)
{
if (!gb.DeterministicEmulation)
{
var ss = gb.GetSyncSettings();
ss.DisplayBG ^= true;
gb.PutSyncSettings(ss);
AddOnScreenMessage($"BG toggled {(ss.DisplayBG ? "on" : "off")}");
}
else
{
AddOnScreenMessage($"BG cannot be toggled during movie recording.");
}
}
ToggleGambatteSyncSetting(
"BG",
static ss => ss.DisplayBG,
static (ss, newState) => ss.DisplayBG = newState);
break;
case "GB Toggle Obj":
if (Emulator is Gameboy gb2)
{
if (!gb2.DeterministicEmulation)
{
var ss = gb2.GetSyncSettings();
ss.DisplayOBJ ^= true;
gb2.PutSyncSettings(ss);
AddOnScreenMessage($"OBJ toggled {(ss.DisplayOBJ ? "on" : "off")}");
}
else
{
AddOnScreenMessage($"OBJ cannot be toggled during movie recording.");
}
}
ToggleGambatteSyncSetting(
"OBJ",
static ss => ss.DisplayOBJ,
static (ss, newState) => ss.DisplayOBJ = newState);
break;
case "GB Toggle Window":
if (Emulator is Gameboy gb3)
{
if (!gb3.DeterministicEmulation)
{
var ss = gb3.GetSyncSettings();
ss.DisplayWindow ^= true;
gb3.PutSyncSettings(ss);
AddOnScreenMessage($"WIN toggled {(ss.DisplayWindow ? "on" : "off")}");
}
else
{
AddOnScreenMessage($"WIN cannot be toggled during movie recording.");
}
}
ToggleGambatteSyncSetting(
"WIN",
static ss => ss.DisplayWindow,
static (ss, newState) => ss.DisplayWindow = newState);
break;
// Analog