1 // VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator.
2 // Copyright (C) 1999-2003 Forgotten
3 // Copyright (C) 2004 Forgotten and the VBA development team
4
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2, or(at your option)
8 // any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 #include "stdafx.h"
20 #include "AcceleratorManager.h"
21 #include "resource.h"
22 #include <afxres.h>
23
24 #include <afxtempl.h> // MFC Templates extension
25 #ifndef CMapStringToWord
26 typedef CMap< CString, LPCSTR, WORD, WORD& > CMapStringToWord;
27 #endif
28
29 static CMapStringToWord winAccelStrings;
30 static bool initialized = false;
31
32 struct {
33 const char *command;
34 WORD id;
35 } winAccelCommands[] = {
36 { "FileOpen", ID_FILE_OPEN },
37 { "FileOpenGameboy", ID_FILE_OPENGAMEBOY },
38 { "FileLoad", ID_FILE_LOAD },
39 { "FileSave", ID_FILE_SAVE },
40 { "FileLoadGame01", ID_FILE_LOADGAME_SLOT1 },
41 { "FileLoadGame02", ID_FILE_LOADGAME_SLOT2 },
42 { "FileLoadGame03", ID_FILE_LOADGAME_SLOT3 },
43 { "FileLoadGame04", ID_FILE_LOADGAME_SLOT4 },
44 { "FileLoadGame05", ID_FILE_LOADGAME_SLOT5 },
45 { "FileLoadGame06", ID_FILE_LOADGAME_SLOT6 },
46 { "FileLoadGame07", ID_FILE_LOADGAME_SLOT7 },
47 { "FileLoadGame08", ID_FILE_LOADGAME_SLOT8 },
48 { "FileLoadGame09", ID_FILE_LOADGAME_SLOT9 },
49 { "FileLoadGame10", ID_FILE_LOADGAME_SLOT10 },
50 { "FileLoadGameAutoLoad", ID_FILE_LOADGAME_AUTOLOADMOSTRECENT },
51 { "FileLoadGameRecent", ID_FILE_LOADGAME_MOSTRECENT },
52 { "FileSaveGame01", ID_FILE_SAVEGAME_SLOT1 },
53 { "FileSaveGame02", ID_FILE_SAVEGAME_SLOT2 },
54 { "FileSaveGame03", ID_FILE_SAVEGAME_SLOT3 },
55 { "FileSaveGame04", ID_FILE_SAVEGAME_SLOT4 },
56 { "FileSaveGame05", ID_FILE_SAVEGAME_SLOT5 },
57 { "FileSaveGame06", ID_FILE_SAVEGAME_SLOT6 },
58 { "FileSaveGame07", ID_FILE_SAVEGAME_SLOT7 },
59 { "FileSaveGame08", ID_FILE_SAVEGAME_SLOT8 },
60 { "FileSaveGame09", ID_FILE_SAVEGAME_SLOT9 },
61 { "FileSaveGame10", ID_FILE_SAVEGAME_SLOT10 },
62 { "FileSaveGameOldest", ID_FILE_SAVEGAME_OLDESTSLOT },
63 { "FileRecentReset", ID_FILE_RECENT_RESET },
64 { "FileRecentFreeze", ID_FILE_RECENT_FREEZE },
65 { "FileRecent01", ID_FILE_MRU_FILE1 },
66 { "FileRecent02", ID_FILE_MRU_FILE2 },
67 { "FileRecent03", ID_FILE_MRU_FILE3 },
68 { "FileRecent04", ID_FILE_MRU_FILE4 },
69 { "FileRecent05", ID_FILE_MRU_FILE5 },
70 { "FileRecent06", ID_FILE_MRU_FILE6 },
71 { "FileRecent07", ID_FILE_MRU_FILE7 },
72 { "FileRecent08", ID_FILE_MRU_FILE8 },
73 { "FileRecent09", ID_FILE_MRU_FILE9 },
74 { "FileRecent10", ID_FILE_MRU_FILE10 },
75 { "FilePause", ID_FILE_PAUSE },
76 { "FileReset", ID_FILE_RESET },
77 { "FileImportBatteryFile", ID_FILE_IMPORT_BATTERYFILE },
78 { "FileImportGamesharkCodeFile", ID_FILE_IMPORT_GAMESHARKCODEFILE },
79 { "FileImportGamesharkSnapshot", ID_FILE_IMPORT_GAMESHARKSNAPSHOT },
80 { "FileExportBatteryFile", ID_FILE_EXPORT_BATTERYFILE },
81 { "FileExportGamesharkSnapshot", ID_FILE_EXPORT_GAMESHARKSNAPSHOT },
82 { "FileScreenCapture", ID_FILE_SCREENCAPTURE },
83 { "FileRomInformation", ID_FILE_ROMINFORMATION },
84 { "FileToggleMenu", ID_FILE_TOGGLEMENU },
85 { "FileClose", ID_FILE_CLOSE },
86 { "FileExit", ID_FILE_EXIT },
87 { "OptionsFrameSkip0", ID_OPTIONS_VIDEO_FRAMESKIP_0 },
88 { "OptionsFrameSkip1", ID_OPTIONS_VIDEO_FRAMESKIP_1 },
89 { "OptionsFrameSkip2", ID_OPTIONS_VIDEO_FRAMESKIP_2 },
90 { "OptionsFrameSkip3", ID_OPTIONS_VIDEO_FRAMESKIP_3 },
91 { "OptionsFrameSkip4", ID_OPTIONS_VIDEO_FRAMESKIP_4 },
92 { "OptionsFrameSkip5", ID_OPTIONS_VIDEO_FRAMESKIP_5 },
93 { "OptionsFrameSkip6", ID_OPTIONS_VIDEO_FRAMESKIP_6 },
94 { "OptionsFrameSkip7", ID_OPTIONS_VIDEO_FRAMESKIP_7 },
95 { "OptionsFrameSkip8", ID_OPTIONS_VIDEO_FRAMESKIP_8 },
96 { "OptionsFrameSkip9", ID_OPTIONS_VIDEO_FRAMESKIP_9 },
97 { "OptionsThrottleNone", ID_OPTIONS_FRAMESKIP_THROTTLE_NOTHROTTLE },
98 { "OptionsThrottle025%", ID_OPTIONS_FRAMESKIP_THROTTLE_25 },
99 { "OptionsThrottle050%", ID_OPTIONS_FRAMESKIP_THROTTLE_50 },
100 { "OptionsThrottle100%", ID_OPTIONS_FRAMESKIP_THROTTLE_100 },
101 { "OptionsThrottle150%", ID_OPTIONS_FRAMESKIP_THROTTLE_150 },
102 { "OptionsThrottle200%", ID_OPTIONS_FRAMESKIP_THROTTLE_200 },
103 { "OptionsThrottleOther", ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER },
104 { "OptionsVideoRenderGDI", ID_OPTIONS_VIDEO_RENDERMETHOD_GDI },
105 { "OptionsVideoRenderDDRAW", ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECTDRAW },
106 { "OptionsVideoRenderD3D", ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D },
107 { "OptionsVideoRenderOGL", ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL },
108 { "OptionsVideoRenderSelectSkin", ID_OPTIONS_VIDEO_RENDEROPTIONS_SELECTSKIN },
109 { "OptionsVideoRenderSkin", ID_OPTIONS_VIDEO_RENDEROPTIONS_SKIN },
110 { "OptionsVideoVsync", ID_OPTIONS_VIDEO_VSYNC },
111 { "OptionsVideoX1", ID_OPTIONS_VIDEO_X1 },
112 { "OptionsVideoX2", ID_OPTIONS_VIDEO_X2 },
113 { "OptionsVideoX3", ID_OPTIONS_VIDEO_X3 },
114 { "OptionsVideoX4", ID_OPTIONS_VIDEO_X4 },
115 { "OptionsVideo320x240", ID_OPTIONS_VIDEO_FULLSCREEN320X240 },
116 { "OptionsVideo640x480", ID_OPTIONS_VIDEO_FULLSCREEN640X480 },
117 { "OptionsVideo800x600", ID_OPTIONS_VIDEO_FULLSCREEN800X600 },
118 { "OptionsVideoFullscreen", ID_OPTIONS_VIDEO_FULLSCREEN },
119 { "OptionsVideoFullscreenMaxScale", ID_OPTIONS_VIDEO_FULLSCREENMAXSCALE },
120 { "OptionsVideoLayersBg0", ID_OPTIONS_VIDEO_LAYERS_BG0 },
121 { "OptionsVideoLayersBg1", ID_OPTIONS_VIDEO_LAYERS_BG1 },
122 { "OptionsVideoLayersBg2", ID_OPTIONS_VIDEO_LAYERS_BG2 },
123 { "OptionsVideoLayersBg3", ID_OPTIONS_VIDEO_LAYERS_BG3 },
124 { "OptionsVideoLayersOBJ", ID_OPTIONS_VIDEO_LAYERS_OBJ },
125 { "OptionsVideoLayersWIN0", ID_OPTIONS_VIDEO_LAYERS_WIN0 },
126 { "OptionsVideoLayersWIN1", ID_OPTIONS_VIDEO_LAYERS_WIN1 },
127 { "OptionsVideoLayersOBJWIN", ID_OPTIONS_VIDEO_LAYERS_OBJWIN },
128 { "OptionsEmulatorAssociate", ID_OPTIONS_EMULATOR_ASSOCIATE },
129 { "OptionsEmulatorDirectories", ID_OPTIONS_EMULATOR_DIRECTORIES },
130 { "OptionsEmulatorSelectBIOS", ID_OPTIONS_EMULATOR_SELECTBIOSFILE },
131 { "OptionsEmulatorUseBIOS", ID_OPTIONS_EMULATOR_USEBIOSFILE },
132 { "OptionsEmulatorSkipBIOS", ID_OPTIONS_EMULATOR_SKIPBIOS },
133 { "OptionsEmulatorShowSpeedNone", ID_OPTIONS_EMULATOR_SHOWSPEED_NONE },
134 { "OptionsEmulatorShowSpeedPercentage", ID_OPTIONS_EMULATOR_SHOWSPEED_PERCENTAGE },
135 { "OptionsEmulatorShowSpeedDetailed", ID_OPTIONS_EMULATOR_SHOWSPEED_DETAILED },
136 { "OptionsEmulatorShowSpeedTransparent", ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT },
137 { "OptionsEmulatorSpeedupToggle", ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE },
138 { "OptionsEmulatorRemoveIntros", ID_OPTIONS_EMULATOR_REMOVEINTROSGBA },
139 { "OptionsEmulatorAutoHideMenu", ID_OPTIONS_EMULATOR_AUTOHIDEMENU },
140 { "OptionsEmulatorSaveAuto", ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC },
141 { "OptionsEmulatorSaveEEPROM", ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM },
142 { "OptionsEmulatorSaveSRAM", ID_OPTIONS_EMULATOR_SAVETYPE_SRAM },
143 { "OptionsEmulatorSaveFLASH", ID_OPTIONS_EMULATOR_SAVETYPE_FLASH },
144 { "OptionsEmulatorSaveEEPROMSensor", ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR },
145 { "OptionsEmulatorSaveFlash64K", ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K },
146 { "OptionsEmulatorSaveFlash128K", ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M },
147 { "OptionsEmulatorAutoIPSPatch", ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH },
148 { "OptionsEmulatorAGBPrint", ID_OPTIONS_EMULATOR_AGBPRINT },
149 { "OptionsEmulatorRTC", ID_OPTIONS_EMULATOR_REALTIMECLOCK },
150 { "OptionsEmulatorRewindInterval", ID_OPTIONS_EMULATOR_REWINDINTERVAL },
151 { "OptionsSoundOff", ID_OPTIONS_SOUND_OFF },
152 { "OptionsSoundMute", ID_OPTIONS_SOUND_MUTE },
153 { "OptionsSoundOn", ID_OPTIONS_SOUND_ON },
154 { "OptionsSoundChannel1", ID_OPTIONS_SOUND_CHANNEL1 },
155 { "OptionsSoundChannel2", ID_OPTIONS_SOUND_CHANNEL2 },
156 { "OptionsSoundChannel3", ID_OPTIONS_SOUND_CHANNEL3 },
157 { "OptionsSoundChannel4", ID_OPTIONS_SOUND_CHANNEL4 },
158 { "OptionsSoundDirectSoundA", ID_OPTIONS_SOUND_DIRECTSOUNDA },
159 { "OptionsSoundDirectSoundB", ID_OPTIONS_SOUND_DIRECTSOUNDB },
160 { "OptionsSound11Khz", ID_OPTIONS_SOUND_11KHZ },
161 { "OptionsSound22Khz", ID_OPTIONS_SOUND_22KHZ },
162 { "OptionsSound44Khz", ID_OPTIONS_SOUND_44KHZ },
163 { "OptionsSoundEcho", ID_OPTIONS_SOUND_ECHO },
164 { "OptionsSoundLowPassFilter", ID_OPTIONS_SOUND_LOWPASSFILTER },
165 { "OptionsSoundReverseStereo", ID_OPTIONS_SOUND_REVERSESTEREO },
166 { "OptionsSoundVolume1x", ID_OPTIONS_SOUND_VOLUME_1X },
167 { "OptionsSoundVolume2x", ID_OPTIONS_SOUND_VOLUME_2X },
168 { "OptionsSoundVolume3x", ID_OPTIONS_SOUND_VOLUME_3X },
169 { "OptionsSoundVolume4x", ID_OPTIONS_SOUND_VOLUME_4X },
170 { "OptionsGameboyBorder", ID_OPTIONS_GAMEBOY_BORDER },
171 { "OptionsGameboyBorderAutomatic", ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC },
172 { "OptionsGameboyColors", ID_OPTIONS_GAMEBOY_COLORS },
173 { "OptionsFilterNormal", ID_OPTIONS_FILTER_NORMAL },
174 { "OptionsFilterTVMode", ID_OPTIONS_FILTER_TVMODE },
175 { "OptionsFilter2xSaI", ID_OPTIONS_FILTER_2XSAI },
176 { "OptionsFilterSuper2xSaI", ID_OPTIONS_FILTER_SUPER2XSAI },
177 { "OptionsFilterSuperEagle", ID_OPTIONS_FILTER_SUPEREAGLE },
178 { "OptionsFilterPixelate", ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL },
179 { "OptionsFilterMotionBlur", ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL },
180 { "OptionsFilterAdMameScale2x", ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X },
181 { "OptionsFilterSimple2x", ID_OPTIONS_FILTER16BIT_SIMPLE2X },
182 { "OptionsFilterBilinear", ID_OPTIONS_FILTER_BILINEAR },
183 { "OptionsFilterBilinearPlus", ID_OPTIONS_FILTER_BILINEARPLUS },
184 { "OptionsFilterScanlines", ID_OPTIONS_FILTER_SCANLINES },
185 { "OptionsFilterHq2x", ID_OPTIONS_FILTER_HQ2X },
186 { "OptionsFilterLq2x", ID_OPTIONS_FILTER_LQ2X },
187 { "OptionsFilterIFBNone", ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE },
188 { "OptionsFilterIFBMotionBlur", ID_OPTIONS_FILTER_INTERFRAMEBLENDING_MOTIONBLUR },
189 { "OptionsFilterIFBSmart", ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART },
190 { "OptionsFilterDisableMMX", ID_OPTIONS_FILTER_DISABLEMMX },
191 { "OptionsJoypadConfigure1", ID_OPTIONS_JOYPAD_CONFIGURE_1 },
192 { "OptionsJoypadConfigure2", ID_OPTIONS_JOYPAD_CONFIGURE_2 },
193 { "OptionsJoypadConfigure3", ID_OPTIONS_JOYPAD_CONFIGURE_3 },
194 { "OptionsJoypadConfigure4", ID_OPTIONS_JOYPAD_CONFIGURE_4 },
195 { "OptionsJoypadMotionConfigure", ID_OPTIONS_JOYPAD_MOTIONCONFIGURE },
196 { "OptionsJoypadAutofireA", ID_OPTIONS_JOYPAD_AUTOFIRE_A },
197 { "OptionsJoypadAutofireB", ID_OPTIONS_JOYPAD_AUTOFIRE_B },
198 { "OptionsJoypadAutofireL", ID_OPTIONS_JOYPAD_AUTOFIRE_L },
199 { "OptionsJoypadAutofireR", ID_OPTIONS_JOYPAD_AUTOFIRE_R },
200 { "CheatsSearch", ID_CHEATS_SEARCHFORCHEATS },
201 { "CheatsList", ID_CHEATS_CHEATLIST },
202 { "CheatsLoad", ID_CHEATS_LOADCHEATLIST },
203 { "CheatsSave", ID_CHEATS_SAVECHEATLIST },
204 { "CheatsDisable", ID_CHEATS_DISABLECHEATS },
205 { "ToolsDebugGDB", ID_TOOLS_DEBUG_GDB },
206 { "ToolsDebugGDBLoad", ID_TOOLS_DEBUG_LOADANDWAIT },
207 { "ToolsDebugGDBBreak", ID_TOOLS_DEBUG_BREAK },
208 { "ToolsDebugGDBDisconnect", ID_TOOLS_DEBUG_DISCONNECT },
209 { "ToolsDisassemble", ID_TOOLS_DISASSEMBLE },
210 { "ToolsIOViewer", ID_TOOLS_IOVIEWER },
211 { "ToolsLogging", ID_TOOLS_LOGGING },
212 { "ToolsMapViewer", ID_TOOLS_MAPVIEW },
213 { "ToolsMemoryViewer", ID_TOOLS_MEMORYVIEWER },
214 { "ToolsOAMViewer", ID_TOOLS_OAMVIEWER },
215 { "ToolsPaletteViewer", ID_TOOLS_PALETTEVIEW },
216 { "ToolsTileViewer", ID_TOOLS_TILEVIEWER },
217 { "ToolsNextFrame", ID_DEBUG_NEXTFRAME },
218 { "ToolsRecordSoundStartRecording", ID_OPTIONS_SOUND_STARTRECORDING },
219 { "ToolsRecordSoundStopRecording", ID_OPTIONS_SOUND_STOPRECORDING },
220 { "ToolsRecordAVIStartRecording", ID_TOOLS_RECORD_STARTAVIRECORDING },
221 { "ToolsRecordAVIStopRecording", ID_TOOLS_RECORD_STOPAVIRECORDING },
222 { "ToolsRecordMovieStartRecording", ID_TOOLS_RECORD_STARTMOVIERECORDING },
223 { "ToolsRecordMovieStopRecording", ID_TOOLS_RECORD_STOPMOVIERECORDING },
224 { "ToolsPlayMovieStartPlaying", ID_TOOLS_PLAY_STARTMOVIEPLAYING },
225 { "ToolsPlayMovieStopPlaying", ID_TOOLS_PLAY_STOPMOVIEPLAYING },
226 { "ToolsRewind", ID_TOOLS_REWIND },
227 { "ToolsCustomize", ID_TOOLS_CUSTOMIZE },
228 { "HelpBugReport", ID_HELP_BUGREPORT },
229 { "HelpFAQ", ID_HELP_FAQ },
230 { "HelpAbout", ID_HELP_ABOUT },
231 { "SystemMinimize", ID_SYSTEM_MINIMIZE }
232 };
233
winAccelGetID(const char * command,WORD & id)234 bool winAccelGetID(const char *command, WORD& id)
235 {
236 if(!initialized) {
237 int count = sizeof(winAccelCommands)/sizeof(winAccelCommands[0]);
238
239 for(int i = 0; i < count; i++) {
240 winAccelStrings.SetAt(winAccelCommands[i].command, winAccelCommands[i].id);
241 }
242 initialized = true;
243 }
244
245 return winAccelStrings.Lookup(command, id) ? true : false;
246 }
247
winAccelAddCommands(CAcceleratorManager & mgr)248 void winAccelAddCommands(CAcceleratorManager& mgr)
249 {
250 int count = sizeof(winAccelCommands)/sizeof(winAccelCommands[0]);
251
252 for(int i = 0; i < count; i++) {
253 if(!mgr.AddCommandAccel(winAccelCommands[i].id, winAccelCommands[i].command, false))
254 mgr.CreateEntry(winAccelCommands[i].id, winAccelCommands[i].command);
255 }
256
257 }
258