From 510c49fd017273869b41ab600039c7fc25d04691 Mon Sep 17 00:00:00 2001 From: adelikat Date: Thu, 16 Jan 2014 16:32:34 +0000 Subject: [PATCH] Remove the CheckHotkey concept as I have decided it was overengineering, but move hotkey stuff to its own subform of MainForm --- .../BizHawk.Client.EmuHawk.csproj | 5 +- BizHawk.Client.EmuHawk/HotkeyActions.cs | 35 -- BizHawk.Client.EmuHawk/MainForm.Hotkey.cs | 393 ++++++++++++++++++ BizHawk.Client.EmuHawk/MainForm.cs | 199 +-------- 4 files changed, 400 insertions(+), 232 deletions(-) delete mode 100644 BizHawk.Client.EmuHawk/HotkeyActions.cs create mode 100644 BizHawk.Client.EmuHawk/MainForm.Hotkey.cs diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index d86b5f31fe..59a93b3be6 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -381,7 +381,6 @@ - @@ -393,6 +392,10 @@ LogWindow.cs + + MainForm.cs + Form + MainForm.cs Form diff --git a/BizHawk.Client.EmuHawk/HotkeyActions.cs b/BizHawk.Client.EmuHawk/HotkeyActions.cs deleted file mode 100644 index 9910936636..0000000000 --- a/BizHawk.Client.EmuHawk/HotkeyActions.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace BizHawk.Client.EmuHawk -{ - public class HotkeyActions - { - private MainForm _mf; - private Dictionary _hotkeys = new Dictionary(); - - public HotkeyActions(MainForm mf) - { - _mf = mf; - - _hotkeys = new System.Collections.Generic.Dictionary - { - { "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; - } - } -} diff --git a/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs b/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs new file mode 100644 index 0000000000..4d995e805e --- /dev/null +++ b/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs @@ -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(); + break; + case "Hex Editor": + GlobalWin.Tools.Load(); + break; + case "Trace Logger": + GlobalWin.Tools.LoadTraceLogger(); + break; + case "Lua Console": + OpenLuaConsole(); + break; + case "Cheats": + GlobalWin.Tools.Load(); + break; + case "TAStudio": + GlobalWin.Tools.Load(); + break; + case "ToolBox": + GlobalWin.Tools.Load(); + break; + case "Virtual Pad": + GlobalWin.Tools.Load(); + 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; + } + } +} diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 1917dd093e..733b07eb86 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -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(); break; - case "Hex Editor": GlobalWin.Tools.Load(); break; - case "Trace Logger": GlobalWin.Tools.LoadTraceLogger(); break; - case "Lua Console": OpenLuaConsole(); break; - case "Cheats": GlobalWin.Tools.Load(); break; - case "TAStudio": GlobalWin.Tools.Load(); break; - case "ToolBox": GlobalWin.Tools.Load(); break; - case "Virtual Pad": GlobalWin.Tools.Load(); 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"))