Remove the CheckHotkey concept as I have decided it was overengineering, but move hotkey stuff to its own subform of MainForm

This commit is contained in:
adelikat 2014-01-16 16:32:34 +00:00
parent b342e6a195
commit 510c49fd01
4 changed files with 400 additions and 232 deletions

View File

@ -381,7 +381,6 @@
<Compile Include="DisplayManager\Filters\Hq2x.cs" />
<Compile Include="DisplayManager\Filters\Scanlines.cs" />
<Compile Include="GlobalWin.cs" />
<Compile Include="HotkeyActions.cs" />
<Compile Include="Input\GamePad.cs" Condition=" '$(OS)' == 'Windows_NT' " />
<Compile Include="Input\GamePad360.cs" />
<Compile Include="Input\Input.cs" />
@ -393,6 +392,10 @@
<Compile Include="LogWindow.Designer.cs">
<DependentUpon>LogWindow.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.Hotkey.cs">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Movie.cs">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Form</SubType>

View File

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
namespace BizHawk.Client.EmuHawk
{
public class HotkeyActions
{
private MainForm _mf;
private Dictionary<string, Action> _hotkeys = new Dictionary<string, Action>();
public HotkeyActions(MainForm mf)
{
_mf = mf;
_hotkeys = new System.Collections.Generic.Dictionary<string,Action>
{
{ "Pause", _mf.TogglePause },
{ "Soft Reset", _mf.SoftReset },
{ "Hard Reset", _mf.HardReset },
{ "Clear Autohold", _mf.ClearAutohold },
};
}
public bool CheckHotkey(string key)
{
if (_hotkeys.ContainsKey(key))
{
_hotkeys[key]();
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,393 @@
using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk
{
public partial class MainForm
{
private bool CheckHotkey(string trigger)
{
switch (trigger)
{
default:
return false;
// General
case "Pause":
TogglePause();
break;
case "Toggle Throttle":
_unthrottled ^= true;
GlobalWin.OSD.AddMessage("Unthrottled: " + _unthrottled);
break;
case "Soft Reset":
SoftReset();
break;
case "Hard Reset":
HardReset();
break;
case "Quick Load":
LoadQuickSave("QuickSave" + Global.Config.SaveSlot);
break;
case "Quick Save":
SaveQuickSave("QuickSave" + Global.Config.SaveSlot);
break;
case "Clear Autohold":
ClearAutohold();
break;
case "Screenshot":
TakeScreenshot();
break;
case "Full Screen":
ToggleFullscreen();
break;
case "Open ROM":
OpenRom();
break;
case "Close ROM":
CloseRom();
break;
case "Display FPS":
ToggleFPS();
break;
case "Frame Counter":
ToggleFrameCounter();
break;
case "Lag Counter":
ToggleLagCounter();
break;
case "Input Display":
ToggleInputDisplay();
break;
case "Toggle BG Input":
ToggleBackgroundInput();
break;
case "Toggle Menu":
MainMenuStrip.Visible ^= true;
break;
case "Volume Up":
VolumeUp();
break;
case "Volume Down":
VolumeDown();
break;
case "Record A/V":
RecordAv();
break;
case "Stop A/V":
StopAv();
break;
case "Larger Window":
IncreaseWindowSize();
break;
case "Smaller Window":
DecreaseWIndowSize();
break;
case "Increase Speed":
IncreaseSpeed();
break;
case "Decrease Speed":
DecreaseSpeed();
break;
case "Reboot Core":
bool autoSaveState = Global.Config.AutoSavestates;
Global.Config.AutoSavestates = false;
LoadRom(CurrentlyOpenRom);
Global.Config.AutoSavestates = autoSaveState;
break;
// Save States
case "Save State 0":
SaveQuickSave("QuickSave0");
break;
case "Save State 1":
SaveQuickSave("QuickSave1");
break;
case "Save State 2":
SaveQuickSave("QuickSave2");
break;
case "Save State 3":
SaveQuickSave("QuickSave3");
break;
case "Save State 4":
SaveQuickSave("QuickSave4");
break;
case "Save State 5":
SaveQuickSave("QuickSave5");
break;
case "Save State 6":
SaveQuickSave("QuickSave6");
break;
case "Save State 7":
SaveQuickSave("QuickSave7");
break;
case "Save State 8":
SaveQuickSave("QuickSave8");
break;
case "Save State 9":
SaveQuickSave("QuickSave9");
break;
case "Load State 0":
LoadQuickSave("QuickSave0");
break;
case "Load State 1":
LoadQuickSave("QuickSave1");
break;
case "Load State 2":
LoadQuickSave("QuickSave2");
break;
case "Load State 3":
LoadQuickSave("QuickSave3");
break;
case "Load State 4":
LoadQuickSave("QuickSave4");
break;
case "Load State 5":
LoadQuickSave("QuickSave5");
break;
case "Load State 6":
LoadQuickSave("QuickSave6");
break;
case "Load State 7":
LoadQuickSave("QuickSave7");
break;
case "Load State 8":
LoadQuickSave("QuickSave8");
break;
case "Load State 9":
LoadQuickSave("QuickSave9");
break;
case "Select State 0":
SelectSlot(0);
break;
case "Select State 1":
SelectSlot(1);
break;
case "Select State 2":
SelectSlot(2);
break;
case "Select State 3":
SelectSlot(3);
break;
case "Select State 4":
SelectSlot(4);
break;
case "Select State 5":
SelectSlot(5);
break;
case "Select State 6":
SelectSlot(6);
break;
case "Select State 7":
SelectSlot(7);
break;
case "Select State 8":
SelectSlot(8);
break;
case "Select State 9":
SelectSlot(9);
break;
case "Save Named State":
SaveStateAs();
break;
case "Load Named State":
LoadStateAs();
break;
case "Previous Slot":
PreviousSlot();
break;
case "Next Slot":
NextSlot();
break;
// Movie
case "Toggle read-only":
ToggleReadOnly();
break;
case "Play Movie":
LoadPlayMovieDialog();
break;
case "Record Movie":
LoadRecordMovieDialog();
break;
case "Stop Movie":
StopMovie();
break;
case "Play from beginning":
RestartMovie();
break;
case "Save Movie":
SaveMovie();
break;
case "Toggle MultiTrack":
if (Global.MovieSession.Movie.IsActive)
{
if (Global.Config.VBAStyleMovieLoadState)
{
GlobalWin.OSD.AddMessage("Multi-track can not be used in Full Movie Loadstates mode");
}
else
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
{
GlobalWin.OSD.AddMessage("MultiTrack Enabled");
GlobalWin.OSD.MT = "Recording None";
}
else
{
GlobalWin.OSD.AddMessage("MultiTrack Disabled");
}
Global.MovieSession.MultiTrack.RecordAll = false;
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
}
}
else
{
GlobalWin.OSD.AddMessage("MultiTrack cannot be enabled while not recording.");
}
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Select All":
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = true;
GlobalWin.OSD.MT = "Recording All";
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Select None":
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = false;
GlobalWin.OSD.MT = "Recording None";
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Increment Player":
Global.MovieSession.MultiTrack.CurrentPlayer++;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer > 5) // TODO: Replace with console's maximum or current maximum players??!
{
Global.MovieSession.MultiTrack.CurrentPlayer = 1;
}
GlobalWin.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer;
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Decrement Player":
Global.MovieSession.MultiTrack.CurrentPlayer--;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer < 1)
{
Global.MovieSession.MultiTrack.CurrentPlayer = 5; // TODO: Replace with console's maximum or current maximum players??!
}
GlobalWin.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer;
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "Movie Poke":
ToggleModePokeMode();
break;
// Tools
case "Ram Watch":
GlobalWin.Tools.LoadRamWatch(true);
break;
case "Ram Search":
GlobalWin.Tools.Load<RamSearch>();
break;
case "Hex Editor":
GlobalWin.Tools.Load<HexEditor>();
break;
case "Trace Logger":
GlobalWin.Tools.LoadTraceLogger();
break;
case "Lua Console":
OpenLuaConsole();
break;
case "Cheats":
GlobalWin.Tools.Load<Cheats>();
break;
case "TAStudio":
GlobalWin.Tools.Load<TAStudio>();
break;
case "ToolBox":
GlobalWin.Tools.Load<ToolBox>();
break;
case "Virtual Pad":
GlobalWin.Tools.Load<VirtualPadForm>();
break;
// Ram Search
case "Do Search":
GlobalWin.Tools.RamSearch.DoSearch();
break;
case "New Search":
GlobalWin.Tools.RamSearch.NewSearch();
break;
case "Previous Compare To":
GlobalWin.Tools.RamSearch.NextCompareTo(reverse: true);
break;
case "Next Compare To":
GlobalWin.Tools.RamSearch.NextCompareTo();
break;
case "Previous Operator":
GlobalWin.Tools.RamSearch.NextOperator(reverse: true);
break;
case "Next Operator":
GlobalWin.Tools.RamSearch.NextOperator();
break;
// SNES
case "Toggle BG 1":
SNES_ToggleBG1();
break;
case "Toggle BG 2":
SNES_ToggleBG2();
break;
case "Toggle BG 3":
SNES_ToggleBG3();
break;
case "Toggle BG 4":
SNES_ToggleBG4();
break;
case "Toggle OBJ 1":
SNES_ToggleObj1();
break;
case "Toggle OBJ 2":
SNES_ToggleObj2();
break;
case "Toggle OBJ 3":
SNES_ToggleOBJ3();
break;
case "Toggle OBJ 4":
SNES_ToggleOBJ4();
break;
// Analog
case "Y Up Small":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, Global.Config.Analog_SmallChange);
break;
case "Y Up Large":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, Global.Config.Analog_LargeChange);
break;
case "Y Down Small":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, -(Global.Config.Analog_SmallChange));
break;
case "Y Down Large":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, -(Global.Config.Analog_LargeChange));
break;
case "X Up Small":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(Global.Config.Analog_SmallChange, null);
break;
case "X Up Large":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(Global.Config.Analog_LargeChange, null);
break;
case "X Down Small":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(-(Global.Config.Analog_SmallChange), null);
break;
case "X Down Large":
GlobalWin.Tools.VirtualPad.BumpAnalogValue(-(Global.Config.Analog_LargeChange), null);
break;
}
return true;
}
}
}

View File

@ -46,7 +46,6 @@ namespace BizHawk.Client.EmuHawk
public MainForm(string[] args)
{
GlobalWin.MainForm = this;
_hotkeys = new HotkeyActions(this);
Global.Rewinder = new Rewinder()
{
MessageCallback = GlobalWin.OSD.AddMessage
@ -955,7 +954,6 @@ namespace BizHawk.Client.EmuHawk
private RetainedViewportPanel _captureOsdRvp;
private SysdrawingRenderPanel _captureOsdSrp;
private readonly HotkeyActions _hotkeys;
private object _syncSettingsHack;
#endregion
@ -976,7 +974,7 @@ namespace BizHawk.Client.EmuHawk
HandleToggleLight();
}
public void ClearAutohold()
private static void ClearAutohold()
{
Global.StickyXORAdapter.ClearStickies();
Global.AutofireStickyXORAdapter.ClearStickies();
@ -989,197 +987,6 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.OSD.AddMessage("Autohold keys cleared");
}
private bool CheckHotkey(string trigger)
{
var result = _hotkeys.CheckHotkey(trigger);
if (result)
{
return true;
}
// If Item wasn't in the list, use the legacy switch
switch (trigger)
{
default:
return false;
case "Toggle Throttle":
_unthrottled ^= true;
GlobalWin.OSD.AddMessage("Unthrottled: " + _unthrottled);
break;
case "Quick Load": LoadQuickSave("QuickSave" + Global.Config.SaveSlot); break;
case "Quick Save": SaveQuickSave("QuickSave" + Global.Config.SaveSlot); break;
case "Screenshot": TakeScreenshot(); break;
case "Full Screen": ToggleFullscreen(); break;
case "Open ROM": OpenRom(); break;
case "Close ROM": CloseRom(); break;
case "Display FPS": ToggleFPS(); break;
case "Frame Counter": ToggleFrameCounter(); break;
case "Lag Counter": ToggleLagCounter(); break;
case "Input Display": ToggleInputDisplay(); break;
case "Toggle BG Input": ToggleBackgroundInput(); break;
case "Toggle Menu": MainMenuStrip.Visible ^= true; break;
case "Volume Up": VolumeUp(); break;
case "Volume Down": VolumeDown(); break;
case "Record A/V": RecordAv(); break;
case "Stop A/V": StopAv(); break;
case "Larger Window": IncreaseWindowSize(); break;
case "Smaller Window": DecreaseWIndowSize(); break;
case "Increase Speed": IncreaseSpeed(); break;
case "Decrease Speed": DecreaseSpeed(); break;
case "Reboot Core":
bool autoSaveState = Global.Config.AutoSavestates;
Global.Config.AutoSavestates = false;
LoadRom(CurrentlyOpenRom);
Global.Config.AutoSavestates = autoSaveState;
break;
case "Save State 0": SaveQuickSave("QuickSave0"); break;
case "Save State 1": SaveQuickSave("QuickSave1"); break;
case "Save State 2": SaveQuickSave("QuickSave2"); break;
case "Save State 3": SaveQuickSave("QuickSave3"); break;
case "Save State 4": SaveQuickSave("QuickSave4"); break;
case "Save State 5": SaveQuickSave("QuickSave5"); break;
case "Save State 6": SaveQuickSave("QuickSave6"); break;
case "Save State 7": SaveQuickSave("QuickSave7"); break;
case "Save State 8": SaveQuickSave("QuickSave8"); break;
case "Save State 9": SaveQuickSave("QuickSave9"); break;
case "Load State 0": LoadQuickSave("QuickSave0"); break;
case "Load State 1": LoadQuickSave("QuickSave1"); break;
case "Load State 2": LoadQuickSave("QuickSave2"); break;
case "Load State 3": LoadQuickSave("QuickSave3"); break;
case "Load State 4": LoadQuickSave("QuickSave4"); break;
case "Load State 5": LoadQuickSave("QuickSave5"); break;
case "Load State 6": LoadQuickSave("QuickSave6"); break;
case "Load State 7": LoadQuickSave("QuickSave7"); break;
case "Load State 8": LoadQuickSave("QuickSave8"); break;
case "Load State 9": LoadQuickSave("QuickSave9"); break;
case "Select State 0": SelectSlot(0); break;
case "Select State 1": SelectSlot(1); break;
case "Select State 2": SelectSlot(2); break;
case "Select State 3": SelectSlot(3); break;
case "Select State 4": SelectSlot(4); break;
case "Select State 5": SelectSlot(5); break;
case "Select State 6": SelectSlot(6); break;
case "Select State 7": SelectSlot(7); break;
case "Select State 8": SelectSlot(8); break;
case "Select State 9": SelectSlot(9); break;
case "Save Named State": SaveStateAs(); break;
case "Load Named State": LoadStateAs(); break;
case "Previous Slot": PreviousSlot(); break;
case "Next Slot": NextSlot(); break;
case "Toggle read-only": ToggleReadOnly(); break;
case "Play Movie": LoadPlayMovieDialog(); break;
case "Record Movie": LoadRecordMovieDialog(); break;
case "Stop Movie": StopMovie(); break;
case "Play from beginning": RestartMovie(); break;
case "Save Movie": SaveMovie(); break;
case "Toggle MultiTrack":
if (Global.MovieSession.Movie.IsActive)
{
if (Global.Config.VBAStyleMovieLoadState)
{
GlobalWin.OSD.AddMessage("Multi-track can not be used in Full Movie Loadstates mode");
}
else
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
{
GlobalWin.OSD.AddMessage("MultiTrack Enabled");
GlobalWin.OSD.MT = "Recording None";
}
else
{
GlobalWin.OSD.AddMessage("MultiTrack Disabled");
}
Global.MovieSession.MultiTrack.RecordAll = false;
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
}
}
else
{
GlobalWin.OSD.AddMessage("MultiTrack cannot be enabled while not recording.");
}
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Select All":
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = true;
GlobalWin.OSD.MT = "Recording All";
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Select None":
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = false;
GlobalWin.OSD.MT = "Recording None";
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Increment Player":
Global.MovieSession.MultiTrack.CurrentPlayer++;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer > 5) // TODO: Replace with console's maximum or current maximum players??!
{
Global.MovieSession.MultiTrack.CurrentPlayer = 1;
}
GlobalWin.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer;
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "MT Decrement Player":
Global.MovieSession.MultiTrack.CurrentPlayer--;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer < 1)
{
Global.MovieSession.MultiTrack.CurrentPlayer = 5; // TODO: Replace with console's maximum or current maximum players??!
}
GlobalWin.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer;
GlobalWin.DisplayManager.NeedsToPaint = true;
break;
case "Movie Poke": ToggleModePokeMode(); break;
case "Ram Watch": GlobalWin.Tools.LoadRamWatch(true); break;
case "Ram Search": GlobalWin.Tools.Load<RamSearch>(); break;
case "Hex Editor": GlobalWin.Tools.Load<HexEditor>(); break;
case "Trace Logger": GlobalWin.Tools.LoadTraceLogger(); break;
case "Lua Console": OpenLuaConsole(); break;
case "Cheats": GlobalWin.Tools.Load<Cheats>(); break;
case "TAStudio": GlobalWin.Tools.Load<TAStudio>(); break;
case "ToolBox": GlobalWin.Tools.Load<ToolBox>(); break;
case "Virtual Pad": GlobalWin.Tools.Load<VirtualPadForm>(); break;
case "Do Search": GlobalWin.Tools.RamSearch.DoSearch(); break;
case "New Search": GlobalWin.Tools.RamSearch.NewSearch(); break;
case "Previous Compare To": GlobalWin.Tools.RamSearch.NextCompareTo(reverse: true); break;
case "Next Compare To": GlobalWin.Tools.RamSearch.NextCompareTo(); break;
case "Previous Operator": GlobalWin.Tools.RamSearch.NextOperator(reverse: true); break;
case "Next Operator": GlobalWin.Tools.RamSearch.NextOperator(); break;
case "Toggle BG 1": SNES_ToggleBG1(); break;
case "Toggle BG 2": SNES_ToggleBG2(); break;
case "Toggle BG 3": SNES_ToggleBG3(); break;
case "Toggle BG 4": SNES_ToggleBG4(); break;
case "Toggle OBJ 1": SNES_ToggleObj1(); break;
case "Toggle OBJ 2": SNES_ToggleObj2(); break;
case "Toggle OBJ 3": SNES_ToggleOBJ3(); break;
case "Toggle OBJ 4": SNES_ToggleOBJ4(); break;
case "Y Up Small": GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, Global.Config.Analog_SmallChange); break;
case "Y Up Large": GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, Global.Config.Analog_LargeChange); break;
case "Y Down Small": GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, -(Global.Config.Analog_SmallChange)); break;
case "Y Down Large": GlobalWin.Tools.VirtualPad.BumpAnalogValue(null, -(Global.Config.Analog_LargeChange)); break;
case "X Up Small": GlobalWin.Tools.VirtualPad.BumpAnalogValue(Global.Config.Analog_SmallChange, null); break;
case "X Up Large": GlobalWin.Tools.VirtualPad.BumpAnalogValue(Global.Config.Analog_LargeChange, null); break;
case "X Down Small": GlobalWin.Tools.VirtualPad.BumpAnalogValue(-(Global.Config.Analog_SmallChange), null); break;
case "X Down Large": GlobalWin.Tools.VirtualPad.BumpAnalogValue(-(Global.Config.Analog_LargeChange), null); break;
}
return true;
}
private void UpdateDumpIcon()
{
DumpStatusButton.Image = Properties.Resources.Blank;
@ -1998,7 +1805,7 @@ namespace BizHawk.Client.EmuHawk
GlobalWin.OSD.AddMessage("Volume " + Global.Config.SoundVolume);
}
public void SoftReset()
private static void SoftReset()
{
// is it enough to run this for one frame? maybe..
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset"))
@ -2011,7 +1818,7 @@ namespace BizHawk.Client.EmuHawk
}
}
public void HardReset()
private static void HardReset()
{
// is it enough to run this for one frame? maybe..
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Power"))