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