1 // Copyright 2015 Dolphin Emulator Project 2 // Licensed under GPLv2+ 3 // Refer to the license.txt file included. 4 5 #pragma once 6 7 #include <array> 8 #include <string> 9 10 #include "Common/CommonTypes.h" 11 #include "InputCommon/ControllerEmu/ControllerEmu.h" 12 #include "InputCommon/InputConfig.h" 13 14 namespace ControllerEmu 15 { 16 class ControllerEmu; 17 class Buttons; 18 } // namespace ControllerEmu 19 20 enum Hotkey 21 { 22 HK_OPEN, 23 HK_CHANGE_DISC, 24 HK_EJECT_DISC, 25 HK_REFRESH_LIST, 26 HK_PLAY_PAUSE, 27 HK_STOP, 28 HK_RESET, 29 HK_FULLSCREEN, 30 HK_SCREENSHOT, 31 HK_EXIT, 32 HK_ACTIVATE_CHAT, 33 HK_REQUEST_GOLF_CONTROL, 34 35 HK_VOLUME_DOWN, 36 HK_VOLUME_UP, 37 HK_VOLUME_TOGGLE_MUTE, 38 39 HK_DECREASE_EMULATION_SPEED, 40 HK_INCREASE_EMULATION_SPEED, 41 HK_TOGGLE_THROTTLE, 42 43 HK_FRAME_ADVANCE, 44 HK_FRAME_ADVANCE_DECREASE_SPEED, 45 HK_FRAME_ADVANCE_INCREASE_SPEED, 46 HK_FRAME_ADVANCE_RESET_SPEED, 47 48 HK_START_RECORDING, 49 HK_PLAY_RECORDING, 50 HK_EXPORT_RECORDING, 51 HK_READ_ONLY_MODE, 52 53 HK_STEP, 54 HK_STEP_OVER, 55 HK_STEP_OUT, 56 HK_SKIP, 57 58 HK_SHOW_PC, 59 HK_SET_PC, 60 61 HK_BP_TOGGLE, 62 HK_BP_ADD, 63 HK_MBP_ADD, 64 65 HK_TRIGGER_SYNC_BUTTON, 66 HK_WIIMOTE1_CONNECT, 67 HK_WIIMOTE2_CONNECT, 68 HK_WIIMOTE3_CONNECT, 69 HK_WIIMOTE4_CONNECT, 70 HK_BALANCEBOARD_CONNECT, 71 HK_TOGGLE_SD_CARD, 72 HK_TOGGLE_USB_KEYBOARD, 73 74 HK_NEXT_WIIMOTE_PROFILE_1, 75 HK_PREV_WIIMOTE_PROFILE_1, 76 HK_NEXT_GAME_WIIMOTE_PROFILE_1, 77 HK_PREV_GAME_WIIMOTE_PROFILE_1, 78 HK_NEXT_WIIMOTE_PROFILE_2, 79 HK_PREV_WIIMOTE_PROFILE_2, 80 HK_NEXT_GAME_WIIMOTE_PROFILE_2, 81 HK_PREV_GAME_WIIMOTE_PROFILE_2, 82 HK_NEXT_WIIMOTE_PROFILE_3, 83 HK_PREV_WIIMOTE_PROFILE_3, 84 HK_NEXT_GAME_WIIMOTE_PROFILE_3, 85 HK_PREV_GAME_WIIMOTE_PROFILE_3, 86 HK_NEXT_WIIMOTE_PROFILE_4, 87 HK_PREV_WIIMOTE_PROFILE_4, 88 HK_NEXT_GAME_WIIMOTE_PROFILE_4, 89 HK_PREV_GAME_WIIMOTE_PROFILE_4, 90 91 HK_TOGGLE_CROP, 92 HK_TOGGLE_AR, 93 HK_TOGGLE_EFBCOPIES, 94 HK_TOGGLE_XFBCOPIES, 95 HK_TOGGLE_IMMEDIATE_XFB, 96 HK_TOGGLE_FOG, 97 HK_TOGGLE_DUMPTEXTURES, 98 HK_TOGGLE_TEXTURES, 99 100 HK_INCREASE_IR, 101 HK_DECREASE_IR, 102 103 HK_FREELOOK_DECREASE_SPEED, 104 HK_FREELOOK_INCREASE_SPEED, 105 HK_FREELOOK_RESET_SPEED, 106 HK_FREELOOK_UP, 107 HK_FREELOOK_DOWN, 108 HK_FREELOOK_LEFT, 109 HK_FREELOOK_RIGHT, 110 HK_FREELOOK_ZOOM_IN, 111 HK_FREELOOK_ZOOM_OUT, 112 HK_FREELOOK_RESET, 113 HK_FREELOOK_TOGGLE, 114 HK_FREELOOK_INCREASE_FOV_X, 115 HK_FREELOOK_DECREASE_FOV_X, 116 HK_FREELOOK_INCREASE_FOV_Y, 117 HK_FREELOOK_DECREASE_FOV_Y, 118 119 HK_TOGGLE_STEREO_SBS, 120 HK_TOGGLE_STEREO_TAB, 121 HK_TOGGLE_STEREO_ANAGLYPH, 122 123 HK_DECREASE_DEPTH, 124 HK_INCREASE_DEPTH, 125 HK_DECREASE_CONVERGENCE, 126 HK_INCREASE_CONVERGENCE, 127 128 HK_LOAD_STATE_SLOT_1, 129 HK_LOAD_STATE_SLOT_2, 130 HK_LOAD_STATE_SLOT_3, 131 HK_LOAD_STATE_SLOT_4, 132 HK_LOAD_STATE_SLOT_5, 133 HK_LOAD_STATE_SLOT_6, 134 HK_LOAD_STATE_SLOT_7, 135 HK_LOAD_STATE_SLOT_8, 136 HK_LOAD_STATE_SLOT_9, 137 HK_LOAD_STATE_SLOT_10, 138 HK_LOAD_STATE_SLOT_SELECTED, 139 140 HK_SAVE_STATE_SLOT_1, 141 HK_SAVE_STATE_SLOT_2, 142 HK_SAVE_STATE_SLOT_3, 143 HK_SAVE_STATE_SLOT_4, 144 HK_SAVE_STATE_SLOT_5, 145 HK_SAVE_STATE_SLOT_6, 146 HK_SAVE_STATE_SLOT_7, 147 HK_SAVE_STATE_SLOT_8, 148 HK_SAVE_STATE_SLOT_9, 149 HK_SAVE_STATE_SLOT_10, 150 HK_SAVE_STATE_SLOT_SELECTED, 151 152 HK_SELECT_STATE_SLOT_1, 153 HK_SELECT_STATE_SLOT_2, 154 HK_SELECT_STATE_SLOT_3, 155 HK_SELECT_STATE_SLOT_4, 156 HK_SELECT_STATE_SLOT_5, 157 HK_SELECT_STATE_SLOT_6, 158 HK_SELECT_STATE_SLOT_7, 159 HK_SELECT_STATE_SLOT_8, 160 HK_SELECT_STATE_SLOT_9, 161 HK_SELECT_STATE_SLOT_10, 162 163 HK_LOAD_LAST_STATE_1, 164 HK_LOAD_LAST_STATE_2, 165 HK_LOAD_LAST_STATE_3, 166 HK_LOAD_LAST_STATE_4, 167 HK_LOAD_LAST_STATE_5, 168 HK_LOAD_LAST_STATE_6, 169 HK_LOAD_LAST_STATE_7, 170 HK_LOAD_LAST_STATE_8, 171 HK_LOAD_LAST_STATE_9, 172 HK_LOAD_LAST_STATE_10, 173 174 HK_SAVE_FIRST_STATE, 175 HK_UNDO_LOAD_STATE, 176 HK_UNDO_SAVE_STATE, 177 HK_SAVE_STATE_FILE, 178 HK_LOAD_STATE_FILE, 179 180 NUM_HOTKEYS, 181 }; 182 183 enum HotkeyGroup : int 184 { 185 HKGP_GENERAL, 186 HKGP_VOLUME, 187 HKGP_SPEED, 188 HKGP_FRAME_ADVANCE, 189 HKGP_MOVIE, 190 HKGP_STEPPING, 191 HKGP_PC, 192 HKGP_BREAKPOINT, 193 HKGP_WII, 194 HKGP_CONTROLLER_PROFILE_1, 195 HKGP_CONTROLLER_PROFILE_2, 196 HKGP_CONTROLLER_PROFILE_3, 197 HKGP_CONTROLLER_PROFILE_4, 198 HKGP_GRAPHICS_TOGGLES, 199 HKGP_IR, 200 HKGP_FREELOOK, 201 HKGP_3D_TOGGLE, 202 HKGP_3D_DEPTH, 203 HKGP_LOAD_STATE, 204 HKGP_SAVE_STATE, 205 HKGP_SELECT_STATE, 206 HKGP_LOAD_LAST_STATE, 207 HKGP_STATE_MISC, 208 209 NUM_HOTKEY_GROUPS, 210 }; 211 212 struct HotkeyStatus 213 { 214 std::array<u32, NUM_HOTKEY_GROUPS> button; 215 s8 err; 216 }; 217 218 class HotkeyManager : public ControllerEmu::EmulatedController 219 { 220 public: 221 HotkeyManager(); 222 ~HotkeyManager(); 223 224 void GetInput(HotkeyStatus* const hk); 225 std::string GetName() const override; 226 ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group) const; 227 int FindGroupByID(int id) const; 228 int GetIndexForGroup(int group, int id) const; 229 void LoadDefaults(const ControllerInterface& ciface) override; 230 231 private: 232 std::array<ControllerEmu::Buttons*, NUM_HOTKEY_GROUPS> m_keys; 233 std::array<ControllerEmu::ControlGroup*, NUM_HOTKEY_GROUPS> m_hotkey_groups; 234 }; 235 236 namespace HotkeyManagerEmu 237 { 238 void Initialize(); 239 void Shutdown(); 240 void LoadConfig(); 241 242 InputConfig* GetConfig(); 243 ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group); 244 void GetStatus(); 245 bool IsEnabled(); 246 void Enable(bool enable_toggle); 247 bool IsPressed(int Id, bool held); 248 } // namespace HotkeyManagerEmu 249