Mercurial > vba-clojure
comparison src/win32/MainWnd.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // MainWnd.cpp : implementation file | |
2 // | |
3 | |
4 #include "stdafx.h" | |
5 #include <winsock.h> | |
6 | |
7 #include "resource.h" | |
8 #include "MainWnd.h" | |
9 | |
10 #include "CmdAccelOb.h" | |
11 #include "FileDlg.h" | |
12 #include "ModeConfirm.h" | |
13 #include "Reg.h" | |
14 #include "WinResUtil.h" | |
15 #include "WinMiscUtil.h" | |
16 #include "Input.h" | |
17 #include "7zip/7zip.h" | |
18 #include "7zip/OpenArchive.h" | |
19 #include "LuaOpenDialog.h" | |
20 #include "ram_search.h" | |
21 #include "ramwatch.h" | |
22 #include "Sound.h" | |
23 #include "VBA.h" | |
24 | |
25 #include "../version.h" | |
26 #include "../common/Util.h" | |
27 #include "../common/movie.h" | |
28 #include "../common/vbalua.h" | |
29 #include "../gba/GBASound.h" | |
30 #include "../gba/GBAGlobals.h" | |
31 #include "../gb/gbGlobals.h" | |
32 | |
33 #define VBA_CONFIRM_MODE WM_APP + 100 | |
34 | |
35 ///////////////////////////////////////////////////////////////////////////// | |
36 // MainWnd | |
37 | |
38 MainWnd::MainWnd() | |
39 { | |
40 m_hAccelTable = NULL; | |
41 arrow = LoadCursor(NULL, IDC_ARROW); | |
42 | |
43 InitDecoder(); | |
44 } | |
45 | |
46 MainWnd::~MainWnd() | |
47 { | |
48 CleanupDecoder(); | |
49 } | |
50 | |
51 BEGIN_MESSAGE_MAP(MainWnd, CWnd) | |
52 //{{AFX_MSG_MAP(MainWnd) | |
53 ON_WM_MOVE() | |
54 ON_WM_SIZE() | |
55 ON_WM_CLOSE() | |
56 ON_WM_INITMENUPOPUP() | |
57 ON_WM_INITMENU() | |
58 ON_WM_CONTEXTMENU() | |
59 ON_WM_MOUSEMOVE() | |
60 ON_WM_ACTIVATE() | |
61 ON_WM_ACTIVATEAPP() | |
62 ON_WM_DROPFILES() | |
63 ON_WM_PAINT() | |
64 | |
65 ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout) | |
66 ON_COMMAND(ID_HELP_FAQ, OnHelpFaq) | |
67 ON_COMMAND(ID_FILE_OPEN, OnFileOpen) | |
68 ON_COMMAND(ID_FILE_OPENGAMEBOY, OnFileOpenGBx) | |
69 ON_COMMAND(ID_FILE_PAUSE, OnFilePause) | |
70 ON_UPDATE_COMMAND_UI(ID_FILE_PAUSE, OnUpdateFilePause) | |
71 ON_COMMAND(ID_FILE_RESET, OnFileReset) | |
72 ON_UPDATE_COMMAND_UI(ID_FILE_RESET, OnUpdateFileReset) | |
73 ON_UPDATE_COMMAND_UI(ID_FILE_RECENT_FREEZE, OnUpdateFileRecentFreeze) | |
74 ON_COMMAND(ID_FILE_RECENT_RESET, OnFileRecentReset) | |
75 ON_COMMAND(ID_FILE_RECENT_FREEZE, OnFileRecentFreeze) | |
76 ON_COMMAND(ID_FILE_EXIT, OnFileExit) | |
77 ON_COMMAND(ID_FILE_CLOSE, OnFileClose) | |
78 ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose) | |
79 ON_COMMAND(ID_FILE_LOAD, OnFileLoad) | |
80 ON_UPDATE_COMMAND_UI(ID_FILE_LOAD, OnUpdateFileLoad) | |
81 ON_COMMAND(ID_FILE_SAVE, OnFileSave) | |
82 ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave) | |
83 ON_COMMAND(ID_FILE_IMPORT_BATTERYFILE, OnFileImportBatteryfile) | |
84 ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_BATTERYFILE, OnUpdateFileImportBatteryfile) | |
85 ON_COMMAND(ID_FILE_IMPORT_GAMESHARKCODEFILE, OnFileImportGamesharkcodefile) | |
86 ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_GAMESHARKCODEFILE, OnUpdateFileImportGamesharkcodefile) | |
87 ON_COMMAND(ID_FILE_IMPORT_GAMESHARKSNAPSHOT, OnFileImportGamesharksnapshot) | |
88 ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_GAMESHARKSNAPSHOT, OnUpdateFileImportGamesharksnapshot) | |
89 ON_COMMAND(ID_FILE_EXPORT_BATTERYFILE, OnFileExportBatteryfile) | |
90 ON_UPDATE_COMMAND_UI(ID_FILE_EXPORT_BATTERYFILE, OnUpdateFileExportBatteryfile) | |
91 ON_COMMAND(ID_FILE_EXPORT_GAMESHARKSNAPSHOT, OnFileExportGamesharksnapshot) | |
92 ON_UPDATE_COMMAND_UI(ID_FILE_EXPORT_GAMESHARKSNAPSHOT, OnUpdateFileExportGamesharksnapshot) | |
93 ON_COMMAND(ID_FILE_QUICKSCREENCAPTURE, OnFileQuickScreencapture) | |
94 ON_COMMAND(ID_FILE_SCREENCAPTURE, OnFileScreencapture) | |
95 ON_UPDATE_COMMAND_UI(ID_FILE_SCREENCAPTURE, OnUpdateFileScreencapture) | |
96 ON_COMMAND(ID_FILE_ROMINFORMATION, OnFileRominformation) | |
97 ON_UPDATE_COMMAND_UI(ID_FILE_ROMINFORMATION, OnUpdateFileRominformation) | |
98 ON_COMMAND(ID_FILE_TOGGLEMENU, OnFileTogglemenu) | |
99 ON_UPDATE_COMMAND_UI(ID_FILE_TOGGLEMENU, OnUpdateFileTogglemenu) | |
100 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_6, OnUpdateOptionsFrameskipThrottle6) | |
101 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_15, OnUpdateOptionsFrameskipThrottle15) | |
102 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_25, OnUpdateOptionsFrameskipThrottle25) | |
103 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_50, OnUpdateOptionsFrameskipThrottle50) | |
104 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_75, OnUpdateOptionsFrameskipThrottle75) | |
105 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_100, OnUpdateOptionsFrameskipThrottle100) | |
106 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_125, OnUpdateOptionsFrameskipThrottle125) | |
107 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_150, OnUpdateOptionsFrameskipThrottle150) | |
108 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_200, OnUpdateOptionsFrameskipThrottle200) | |
109 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_300, OnUpdateOptionsFrameskipThrottle300) | |
110 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_400, OnUpdateOptionsFrameskipThrottle400) | |
111 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_600, OnUpdateOptionsFrameskipThrottle600) | |
112 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_1000, OnUpdateOptionsFrameskipThrottle1000) | |
113 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER, OnUpdateOptionsFrameskipThrottleOther) | |
114 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_INCREASE, OnUpdateOptionsFrameskipThrottleIncrease) | |
115 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_DECREASE, OnUpdateOptionsFrameskipThrottleDecrease) | |
116 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_6, OnOptionsFrameskipThrottle6) | |
117 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_15, OnOptionsFrameskipThrottle15) | |
118 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_25, OnOptionsFrameskipThrottle25) | |
119 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_50, OnOptionsFrameskipThrottle50) | |
120 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_75, OnOptionsFrameskipThrottle75) | |
121 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_100, OnOptionsFrameskipThrottle100) | |
122 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_125, OnOptionsFrameskipThrottle125) | |
123 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_150, OnOptionsFrameskipThrottle150) | |
124 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_200, OnOptionsFrameskipThrottle200) | |
125 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_300, OnOptionsFrameskipThrottle300) | |
126 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_400, OnOptionsFrameskipThrottle400) | |
127 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_600, OnOptionsFrameskipThrottle600) | |
128 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_1000, OnOptionsFrameskipThrottle1000) | |
129 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER, OnOptionsFrameskipThrottleOther) | |
130 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_INCREASE, OnOptionsFrameskipThrottleIncrease) | |
131 ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_DECREASE, OnOptionsFrameskipThrottleDecrease) | |
132 ON_COMMAND(ID_OPTIONS_FRAMESKIP_ACCURATEPITCH, OnOptionsFrameskipAccuratePitch) | |
133 ON_COMMAND(ID_OPTIONS_FRAMESKIP_ACCURATESPEED, OnOptionsFrameskipAccurateSpeed) | |
134 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_ACCURATEPITCH, OnUpdateOptionsFrameskipAccuratePitch) | |
135 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_ACCURATESPEED, OnUpdateOptionsFrameskipAccurateSpeed) | |
136 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_0, OnUpdateOptionsVideoFrameskip0) | |
137 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_1, OnUpdateOptionsVideoFrameskip1) | |
138 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_2, OnUpdateOptionsVideoFrameskip2) | |
139 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_3, OnUpdateOptionsVideoFrameskip3) | |
140 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_4, OnUpdateOptionsVideoFrameskip4) | |
141 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_5, OnUpdateOptionsVideoFrameskip5) | |
142 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_6, OnUpdateOptionsVideoFrameskip6) | |
143 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_7, OnUpdateOptionsVideoFrameskip7) | |
144 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_8, OnUpdateOptionsVideoFrameskip8) | |
145 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_9, OnUpdateOptionsVideoFrameskip9) | |
146 ON_COMMAND(ID_OPTIONS_VIDEO_VSYNC, OnOptionsVideoVsync) | |
147 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_VSYNC, OnUpdateOptionsVideoVsync) | |
148 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X1, OnUpdateOptionsVideoX1) | |
149 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X2, OnUpdateOptionsVideoX2) | |
150 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X3, OnUpdateOptionsVideoX3) | |
151 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X4, OnUpdateOptionsVideoX4) | |
152 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN320X240, OnUpdateOptionsVideoFullscreen320x240) | |
153 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN640X480, OnUpdateOptionsVideoFullscreen640x480) | |
154 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN800X600, OnUpdateOptionsVideoFullscreen800x600) | |
155 ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN320X240, OnOptionsVideoFullscreen320x240) | |
156 ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN640X480, OnOptionsVideoFullscreen640x480) | |
157 ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN800X600, OnOptionsVideoFullscreen800x600) | |
158 ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN, OnOptionsVideoFullscreen) | |
159 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN, OnUpdateOptionsVideoFullscreen) | |
160 ON_COMMAND(ID_OPTIONS_VIDEO_DISABLESFX, OnOptionsVideoDisablesfx) | |
161 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DISABLESFX, OnUpdateOptionsVideoDisablesfx) | |
162 ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREENSTRETCHTOFIT, OnOptionsVideoFullscreenstretchtofit) | |
163 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREENSTRETCHTOFIT, OnUpdateOptionsVideoFullscreenstretchtofit) | |
164 ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_GDI, OnOptionsVideoRendermethodGdi) | |
165 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_GDI, OnUpdateOptionsVideoRendermethodGdi) | |
166 ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECTDRAW, OnOptionsVideoRendermethodDirectdraw) | |
167 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECTDRAW, OnUpdateOptionsVideoRendermethodDirectdraw) | |
168 ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D, OnOptionsVideoRendermethodDirect3d) | |
169 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D, OnUpdateOptionsVideoRendermethodDirect3d) | |
170 ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL, OnOptionsVideoRendermethodOpengl) | |
171 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL, OnUpdateOptionsVideoRendermethodOpengl) | |
172 ON_COMMAND(ID_OPTIONS_VIDEO_TRIPLEBUFFERING, OnOptionsVideoTriplebuffering) | |
173 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_TRIPLEBUFFERING, OnUpdateOptionsVideoTriplebuffering) | |
174 ON_COMMAND(ID_OPTIONS_VIDEO_DDRAWEMULATIONONLY, OnOptionsVideoDdrawemulationonly) | |
175 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DDRAWEMULATIONONLY, OnUpdateOptionsVideoDdrawemulationonly) | |
176 ON_COMMAND(ID_OPTIONS_VIDEO_DDRAWUSEVIDEOMEMORY, OnOptionsVideoDdrawusevideomemory) | |
177 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DDRAWUSEVIDEOMEMORY, OnUpdateOptionsVideoDdrawusevideomemory) | |
178 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DNOFILTER, OnOptionsVideoRenderoptionsD3dnofilter) | |
179 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DNOFILTER, OnUpdateOptionsVideoRenderoptionsD3dnofilter) | |
180 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DBILINEAR, OnOptionsVideoRenderoptionsD3dbilinear) | |
181 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DBILINEAR, OnUpdateOptionsVideoRenderoptionsD3dbilinear) | |
182 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLNEAREST, OnOptionsVideoRenderoptionsGlnearest) | |
183 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLNEAREST, OnUpdateOptionsVideoRenderoptionsGlnearest) | |
184 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLBILINEAR, OnOptionsVideoRenderoptionsGlbilinear) | |
185 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLBILINEAR, OnUpdateOptionsVideoRenderoptionsGlbilinear) | |
186 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLTRIANGLE, OnOptionsVideoRenderoptionsGltriangle) | |
187 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLTRIANGLE, OnUpdateOptionsVideoRenderoptionsGltriangle) | |
188 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLQUADS, OnOptionsVideoRenderoptionsGlquads) | |
189 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLQUADS, OnUpdateOptionsVideoRenderoptionsGlquads) | |
190 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_SELECTSKIN, OnOptionsVideoRenderoptionsSelectskin) | |
191 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_SELECTSKIN, OnUpdateOptionsVideoRenderoptionsSelectskin) | |
192 ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_SKIN, OnOptionsVideoRenderoptionsSkin) | |
193 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_SKIN, OnUpdateOptionsVideoRenderoptionsSkin) | |
194 ON_COMMAND(ID_OPTIONS_EMULATOR_ASSOCIATE, OnOptionsEmulatorAssociate) | |
195 ON_COMMAND(ID_OPTIONS_EMULATOR_DIRECTORIES, OnOptionsEmulatorDirectories) | |
196 ON_COMMAND_RANGE(ID_OPTIONS_PREFER_ARCHIVE_NAME, ID_OPTIONS_PREFER_ROM_NAME, OnOptionsEmulatorFilenamePreference) | |
197 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_PREFER_ARCHIVE_NAME, ID_OPTIONS_PREFER_ROM_NAME, OnUpdateOptionsEmulatorFilenamePreference) | |
198 ON_COMMAND(ID_OPTIONS_VIDEO_DISABLESTATUSMESSAGES, OnOptionsVideoDisablestatusmessages) | |
199 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DISABLESTATUSMESSAGES, OnUpdateOptionsVideoDisablestatusmessages) | |
200 ON_COMMAND(ID_OPTIONS_EMULATOR_SYNCHRONIZE, OnOptionsEmulatorSynchronize) | |
201 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SYNCHRONIZE, OnUpdateOptionsEmulatorSynchronize) | |
202 | |
203 ON_COMMAND(ID_OPTIONS_EMULATOR_ALWAYSONTOP, OnOptionsEmulatorAlwaysOnTop) | |
204 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_ALWAYSONTOP, OnUpdateOptionsEmulatorAlwaysOnTop) | |
205 ON_COMMAND(ID_OPTIONS_EMULATOR_PAUSEWHENINACTIVE, OnOptionsEmulatorPausewheninactive) | |
206 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_PAUSEWHENINACTIVE, OnUpdateOptionsEmulatorPausewheninactive) | |
207 ON_COMMAND(ID_OPTIONS_EMULATOR_BACKGROUNDINPUT, OnOptionsEmulatorEnableBackgroundInput) | |
208 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_BACKGROUNDINPUT, OnUpdateOptionsEmulatorEnableBackgroundInput) | |
209 ON_COMMAND(ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE, OnOptionsEmulatorSpeeduptoggle) | |
210 | |
211 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE, OnUpdateOptionsEmulatorSpeeduptoggle) | |
212 ON_COMMAND(ID_OPTIONS_EMULATOR_REMOVEINTROSGBA, OnOptionsEmulatorRemoveintrosgba) | |
213 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_REMOVEINTROSGBA, OnUpdateOptionsEmulatorRemoveintrosgba) | |
214 ON_COMMAND(ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH, OnOptionsEmulatorAutomaticallyipspatch) | |
215 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH, OnUpdateOptionsEmulatorAutomaticallyipspatch) | |
216 ON_COMMAND(ID_OPTIONS_EMULATOR_AGBPRINT, OnOptionsEmulatorAgbprint) | |
217 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AGBPRINT, OnUpdateOptionsEmulatorAgbprint) | |
218 ON_COMMAND(ID_OPTIONS_EMULATOR_REALTIMECLOCK, OnOptionsEmulatorRealtimeclock) | |
219 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_REALTIMECLOCK, OnUpdateOptionsEmulatorRealtimeclock) | |
220 ON_COMMAND(ID_OPTIONS_EMULATOR_AUTOHIDEMENU, OnOptionsEmulatorAutohidemenu) | |
221 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AUTOHIDEMENU, OnUpdateOptionsEmulatorAutohidemenu) | |
222 ON_COMMAND(ID_OPTIONS_EMULATOR_REWINDINTERVAL, OnOptionsEmulatorRewindinterval) | |
223 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC, OnOptionsEmulatorSavetypeAutomatic) | |
224 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC, OnUpdateOptionsEmulatorSavetypeAutomatic) | |
225 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM, OnOptionsEmulatorSavetypeEeprom) | |
226 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM, OnUpdateOptionsEmulatorSavetypeEeprom) | |
227 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_SRAM, OnOptionsEmulatorSavetypeSram) | |
228 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_SRAM, OnUpdateOptionsEmulatorSavetypeSram) | |
229 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH, OnOptionsEmulatorSavetypeFlash) | |
230 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH, OnUpdateOptionsEmulatorSavetypeFlash) | |
231 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR, OnOptionsEmulatorSavetypeEepromsensor) | |
232 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR, OnUpdateOptionsEmulatorSavetypeEepromsensor) | |
233 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_NONE, OnOptionsEmulatorSavetypeNone) | |
234 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_NONE, OnUpdateOptionsEmulatorSavetypeNone) | |
235 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K, OnOptionsEmulatorSavetypeFlash512k) | |
236 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K, OnUpdateOptionsEmulatorSavetypeFlash512k) | |
237 ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M, OnOptionsEmulatorSavetypeFlash1m) | |
238 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M, OnUpdateOptionsEmulatorSavetypeFlash1m) | |
239 ON_COMMAND(ID_OPTIONS_EMULATOR_USEBIOSFILE, OnOptionsEmulatorUsebiosfile) | |
240 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_USEBIOSFILE, OnUpdateOptionsEmulatorUsebiosfile) | |
241 ON_COMMAND(ID_OPTIONS_EMULATOR_SKIPBIOS, OnOptionsEmulatorSkipbios) | |
242 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SKIPBIOS, OnUpdateOptionsEmulatorSkipbios) | |
243 ON_COMMAND(ID_OPTIONS_EMULATOR_SELECTBIOSFILE, OnOptionsEmulatorSelectbiosfile) | |
244 | |
245 ON_COMMAND(ID_EMULATOR_USE_OLD_FRAME_TIMING, OnOptionsEmulatorUseOldGBTiming) | |
246 ON_UPDATE_COMMAND_UI(ID_EMULATOR_USE_OLD_FRAME_TIMING, OnUpdateOptionsEmulatorUseOldGBTiming) | |
247 ON_COMMAND(ID_EMULATOR_USE_GB_INPUT_KLUDGE, OnOptionsEmulatorUseGBNullInputKludge) | |
248 ON_UPDATE_COMMAND_UI(ID_EMULATOR_USE_GB_INPUT_KLUDGE, OnUpdateOptionsEmulatorUseGBNullInputKludge) | |
249 ON_COMMAND(ID_EMULATOR_GBALAG, OnOptionsEmulatorGBALag) | |
250 ON_UPDATE_COMMAND_UI(ID_EMULATOR_GBALAG, OnUpdateOptionsEmulatorGBALag) | |
251 | |
252 ON_COMMAND(ID_OPTIONS_EMULATOR_PNGFORMAT, OnOptionsEmulatorPngformat) | |
253 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_PNGFORMAT, OnUpdateOptionsEmulatorPngformat) | |
254 ON_COMMAND(ID_OPTIONS_EMULATOR_BMPFORMAT, OnOptionsEmulatorBmpformat) | |
255 ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_BMPFORMAT, OnUpdateOptionsEmulatorBmpformat) | |
256 ON_COMMAND(ID_OPTIONS_SOUND_DISABLE, OnOptionsSoundDisable) | |
257 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DISABLE, OnUpdateOptionsSoundDisable) | |
258 ON_COMMAND(ID_OPTIONS_SOUND_MUTE, OnOptionsSoundMute) | |
259 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTE, OnUpdateOptionsSoundMute) | |
260 ON_COMMAND(ID_OPTIONS_SOUND_OFF, OnOptionsSoundOff) | |
261 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_OFF, OnUpdateOptionsSoundOff) | |
262 ON_COMMAND(ID_OPTIONS_SOUND_ON, OnOptionsSoundOn) | |
263 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_ON, OnUpdateOptionsSoundOn) | |
264 ON_COMMAND(ID_OPTIONS_SOUND_USEOLDSYNCHRONIZATION, OnOptionsSoundUseoldsynchronization) | |
265 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_USEOLDSYNCHRONIZATION, OnUpdateOptionsSoundUseoldsynchronization) | |
266 ON_COMMAND(ID_OPTIONS_SOUND_ECHO, OnOptionsSoundEcho) | |
267 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_ECHO, OnUpdateOptionsSoundEcho) | |
268 ON_COMMAND(ID_OPTIONS_SOUND_LOWPASSFILTER, OnOptionsSoundLowpassfilter) | |
269 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_LOWPASSFILTER, OnUpdateOptionsSoundLowpassfilter) | |
270 ON_COMMAND(ID_OPTIONS_SOUND_REVERSESTEREO, OnOptionsSoundReversestereo) | |
271 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_REVERSESTEREO, OnUpdateOptionsSoundReversestereo) | |
272 ON_COMMAND(ID_OPTIONS_SOUND_MUTEFRAMEADVANCE, OnOptionsSoundMuteFrameAdvance) | |
273 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTEFRAMEADVANCE, OnUpdateOptionsSoundMuteFrameAdvance) | |
274 ON_COMMAND(ID_OPTIONS_SOUND_MUTEWHENINACTIVE, OnOptionsSoundMuteWhenInactive) | |
275 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTEWHENINACTIVE, OnUpdateOptionsSoundMuteWhenInactive) | |
276 ON_COMMAND(ID_OPTIONS_SOUND_11KHZ, OnOptionsSound11khz) | |
277 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_11KHZ, OnUpdateOptionsSound11khz) | |
278 ON_COMMAND(ID_OPTIONS_SOUND_22KHZ, OnOptionsSound22khz) | |
279 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_22KHZ, OnUpdateOptionsSound22khz) | |
280 ON_COMMAND(ID_OPTIONS_SOUND_44KHZ, OnOptionsSound44khz) | |
281 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_44KHZ, OnUpdateOptionsSound44khz) | |
282 ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL1, OnOptionsSoundChannel1) | |
283 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL1, OnUpdateOptionsSoundChannel1) | |
284 ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL2, OnOptionsSoundChannel2) | |
285 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL2, OnUpdateOptionsSoundChannel2) | |
286 ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL3, OnOptionsSoundChannel3) | |
287 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL3, OnUpdateOptionsSoundChannel3) | |
288 ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL4, OnOptionsSoundChannel4) | |
289 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL4, OnUpdateOptionsSoundChannel4) | |
290 ON_COMMAND(ID_OPTIONS_SOUND_DIRECTSOUNDA, OnOptionsSoundDirectsounda) | |
291 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DIRECTSOUNDA, OnUpdateOptionsSoundDirectsounda) | |
292 ON_COMMAND(ID_OPTIONS_SOUND_DIRECTSOUNDB, OnOptionsSoundDirectsoundb) | |
293 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DIRECTSOUNDB, OnUpdateOptionsSoundDirectsoundb) | |
294 ON_COMMAND(ID_OPTIONS_GAMEBOY_BORDER, OnOptionsGameboyBorder) | |
295 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_BORDER, OnUpdateOptionsGameboyBorder) | |
296 ON_COMMAND(ID_OPTIONS_GAMEBOY_PRINTER, OnOptionsGameboyPrinter) | |
297 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_PRINTER, OnUpdateOptionsGameboyPrinter) | |
298 ON_COMMAND(ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC, OnOptionsGameboyBorderAutomatic) | |
299 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC, OnUpdateOptionsGameboyBorderAutomatic) | |
300 ON_COMMAND(ID_OPTIONS_GAMEBOY_AUTOMATIC, OnOptionsGameboyAutomatic) | |
301 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_AUTOMATIC, OnUpdateOptionsGameboyAutomatic) | |
302 ON_COMMAND(ID_OPTIONS_GAMEBOY_GBA, OnOptionsGameboyGba) | |
303 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GBA, OnUpdateOptionsGameboyGba) | |
304 ON_COMMAND(ID_OPTIONS_GAMEBOY_CGB, OnOptionsGameboyCgb) | |
305 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_CGB, OnUpdateOptionsGameboyCgb) | |
306 ON_COMMAND(ID_OPTIONS_GAMEBOY_SGB, OnOptionsGameboySgb) | |
307 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_SGB, OnUpdateOptionsGameboySgb) | |
308 ON_COMMAND(ID_OPTIONS_GAMEBOY_SGB2, OnOptionsGameboySgb2) | |
309 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_SGB2, OnUpdateOptionsGameboySgb2) | |
310 ON_COMMAND(ID_OPTIONS_GAMEBOY_GB, OnOptionsGameboyGb) | |
311 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GB, OnUpdateOptionsGameboyGb) | |
312 ON_COMMAND(ID_OPTIONS_GAMEBOY_REALCOLORS, OnOptionsGameboyRealcolors) | |
313 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_REALCOLORS, OnUpdateOptionsGameboyRealcolors) | |
314 ON_COMMAND(ID_OPTIONS_GAMEBOY_GAMEBOYCOLORS, OnOptionsGameboyGameboycolors) | |
315 ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GAMEBOYCOLORS, OnUpdateOptionsGameboyGameboycolors) | |
316 ON_COMMAND(ID_OPTIONS_GAMEBOY_COLORS, OnOptionsGameboyColors) | |
317 ON_COMMAND(ID_OPTIONS_FILTER_DISABLEMMX, OnOptionsFilterDisablemmx) | |
318 ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_DISABLEMMX, OnUpdateOptionsFilterDisablemmx) | |
319 ON_COMMAND(ID_OPTIONS_LANGUAGE_SYSTEM, OnOptionsLanguageSystem) | |
320 ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_SYSTEM, OnUpdateOptionsLanguageSystem) | |
321 ON_COMMAND(ID_OPTIONS_LANGUAGE_ENGLISH, OnOptionsLanguageEnglish) | |
322 ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_ENGLISH, OnUpdateOptionsLanguageEnglish) | |
323 ON_COMMAND(ID_OPTIONS_LANGUAGE_OTHER, OnOptionsLanguageOther) | |
324 ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_OTHER, OnUpdateOptionsLanguageOther) | |
325 ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_1, OnOptionsJoypadConfigure1) | |
326 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_1, OnUpdateOptionsJoypadConfigure1) | |
327 ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_2, OnOptionsJoypadConfigure2) | |
328 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_2, OnUpdateOptionsJoypadConfigure2) | |
329 ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_3, OnOptionsJoypadConfigure3) | |
330 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_3, OnUpdateOptionsJoypadConfigure3) | |
331 ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_4, OnOptionsJoypadConfigure4) | |
332 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_4, OnUpdateOptionsJoypadConfigure4) | |
333 ON_COMMAND(ID_OPTIONS_JOYPAD_MOTIONCONFIGURE, OnOptionsJoypadMotionconfigure) | |
334 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_MOTIONCONFIGURE, OnUpdateOptionsJoypadMotionconfigure) | |
335 ON_COMMAND(ID_OPTIONS_JOYPAD_ALLOWLEFTRIGHT, OnOptionsJoypadAllowLeftRight) | |
336 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_ALLOWLEFTRIGHT, OnUpdateOptionsJoypadAllowLeftRight) | |
337 ON_COMMAND(ID_OPTIONS_JOYPAD_AUTOFIRE_ACCOUNTFORLAG, OnOptionsJoypadAutofireAccountForLag) | |
338 ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_AUTOFIRE_ACCOUNTFORLAG, OnUpdateOptionsJoypadAutofireAccountForLag) | |
339 ON_COMMAND(ID_CHEATS_SEARCHFORCHEATS, OnCheatsSearchforcheats) | |
340 ON_UPDATE_COMMAND_UI(ID_CHEATS_SEARCHFORCHEATS, OnUpdateCheatsSearchforcheats) | |
341 ON_COMMAND(ID_CHEATS_CHEATLIST, OnCheatsCheatlist) | |
342 ON_UPDATE_COMMAND_UI(ID_CHEATS_CHEATLIST, OnUpdateCheatsCheatlist) | |
343 ON_COMMAND(ID_CHEATS_AUTOMATICSAVELOADCHEATS, OnCheatsAutomaticsaveloadcheats) | |
344 ON_COMMAND(ID_CHEATS_PAUSEDURINGCHEATSEARCH, OnCheatsPauseDuringCheatSearch) | |
345 ON_COMMAND(ID_CHEATS_LOADCHEATLIST, OnCheatsLoadcheatlist) | |
346 ON_UPDATE_COMMAND_UI(ID_CHEATS_LOADCHEATLIST, OnUpdateCheatsLoadcheatlist) | |
347 ON_COMMAND(ID_CHEATS_SAVECHEATLIST, OnCheatsSavecheatlist) | |
348 ON_UPDATE_COMMAND_UI(ID_CHEATS_SAVECHEATLIST, OnUpdateCheatsSavecheatlist) | |
349 ON_COMMAND(ID_TOOLS_DISASSEMBLE, OnToolsDisassemble) | |
350 ON_UPDATE_COMMAND_UI(ID_TOOLS_DISASSEMBLE, OnUpdateToolsDisassemble) | |
351 ON_COMMAND(ID_TOOLS_LOGGING, OnToolsLogging) | |
352 ON_UPDATE_COMMAND_UI(ID_TOOLS_LOGGING, OnUpdateToolsLogging) | |
353 ON_COMMAND(ID_TOOLS_IOVIEWER, OnToolsIoviewer) | |
354 ON_UPDATE_COMMAND_UI(ID_TOOLS_IOVIEWER, OnUpdateToolsIoviewer) | |
355 ON_COMMAND(ID_TOOLS_MAPVIEW, OnToolsMapview) | |
356 ON_UPDATE_COMMAND_UI(ID_TOOLS_MAPVIEW, OnUpdateToolsMapview) | |
357 ON_COMMAND(ID_TOOLS_MEMORYVIEWER, OnToolsMemoryviewer) | |
358 ON_UPDATE_COMMAND_UI(ID_TOOLS_MEMORYVIEWER, OnUpdateToolsMemoryviewer) | |
359 ON_COMMAND(ID_TOOLS_OAMVIEWER, OnToolsOamviewer) | |
360 ON_UPDATE_COMMAND_UI(ID_TOOLS_OAMVIEWER, OnUpdateToolsOamviewer) | |
361 ON_COMMAND(ID_TOOLS_PALETTEVIEW, OnToolsPaletteview) | |
362 ON_UPDATE_COMMAND_UI(ID_TOOLS_PALETTEVIEW, OnUpdateToolsPaletteview) | |
363 ON_COMMAND(ID_TOOLS_TILEVIEWER, OnToolsTileviewer) | |
364 ON_UPDATE_COMMAND_UI(ID_TOOLS_TILEVIEWER, OnUpdateToolsTileviewer) | |
365 | |
366 ON_COMMAND(ID_DEBUG_NEXTFRAME, OnDebugNextframe) | |
367 ON_UPDATE_COMMAND_UI(ID_DEBUG_NEXTFRAME, OnUpdateDebugNextframe) | |
368 ON_COMMAND(ID_DEBUG_NEXTFRAME_ACCOUNTFORLAG, OnDebugNextframeAccountForLag) | |
369 ON_UPDATE_COMMAND_UI(ID_DEBUG_NEXTFRAME_ACCOUNTFORLAG, OnUpdateDebugNextframeAccountForLag) | |
370 ON_COMMAND(ID_DEBUG_FRAMESEARCH, OnDebugFramesearch) | |
371 ON_UPDATE_COMMAND_UI(ID_DEBUG_FRAMESEARCH, OnUpdateDebugFramesearch) | |
372 ON_COMMAND(ID_DEBUG_FRAMESEARCHPREV, OnDebugFramesearchPrev) | |
373 ON_UPDATE_COMMAND_UI(ID_DEBUG_FRAMESEARCHPREV, OnUpdateDebugFramesearchPrev) | |
374 ON_COMMAND(ID_DEBUG_FRAMESEARCHLOAD, OnDebugFramesearchLoad) | |
375 ON_UPDATE_COMMAND_UI(ID_DEBUG_FRAMESEARCHLOAD, OnUpdateDebugFramesearchLoad) | |
376 ON_UPDATE_COMMAND_UI(ID_CHEATS_AUTOMATICSAVELOADCHEATS, OnUpdateCheatsAutomaticsaveloadcheats) | |
377 ON_UPDATE_COMMAND_UI(ID_CHEATS_PAUSEDURINGCHEATSEARCH, OnUpdateCheatsPauseDuringCheatSearch) | |
378 ON_COMMAND(ID_TOOLS_FRAMECOUNTER, OnToolsFrameCounter) | |
379 ON_UPDATE_COMMAND_UI(ID_TOOLS_FRAMECOUNTER, OnUpdateToolsFrameCounter) | |
380 ON_COMMAND(ID_TOOLS_LAGCOUNTER, OnToolsLagCounter) | |
381 ON_UPDATE_COMMAND_UI(ID_TOOLS_LAGCOUNTER, OnUpdateToolsLagCounter) | |
382 ON_COMMAND(ID_TOOLS_EXTRACOUNTER, OnToolsExtraCounter) | |
383 ON_UPDATE_COMMAND_UI(ID_TOOLS_EXTRACOUNTER, OnUpdateToolsExtraCounter) | |
384 ON_COMMAND(ID_TOOLS_EXTRACOUNTERRESET, OnToolsExtraCounterReset) | |
385 ON_COMMAND(ID_TOOLS_INPUTDISPLAY, OnToolsInputDisplay) | |
386 ON_UPDATE_COMMAND_UI(ID_TOOLS_INPUTDISPLAY, OnUpdateToolsInputDisplay) | |
387 ON_COMMAND(ID_TOOLS_DEBUG_GDB, OnToolsDebugGdb) | |
388 ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_GDB, OnUpdateToolsDebugGdb) | |
389 ON_COMMAND(ID_TOOLS_DEBUG_LOADANDWAIT, OnToolsDebugLoadandwait) | |
390 ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_LOADANDWAIT, OnUpdateToolsDebugLoadandwait) | |
391 ON_COMMAND(ID_TOOLS_DEBUG_BREAK, OnToolsDebugBreak) | |
392 ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_BREAK, OnUpdateToolsDebugBreak) | |
393 ON_COMMAND(ID_TOOLS_DEBUG_DISCONNECT, OnToolsDebugDisconnect) | |
394 ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_DISCONNECT, OnUpdateToolsDebugDisconnect) | |
395 | |
396 ON_COMMAND(ID_TOOLS_SOUNDRECORDING, OnToolsSoundRecording) | |
397 ON_UPDATE_COMMAND_UI(ID_TOOLS_SOUNDRECORDING, OnUpdateToolsSoundRecording) | |
398 ON_COMMAND(ID_TOOLS_AVIRECORDING, OnToolsAVIRecording) | |
399 ON_UPDATE_COMMAND_UI(ID_TOOLS_AVIRECORDING, OnUpdateToolsAVIRecording) | |
400 ON_COMMAND(ID_TOOLS_PAUSEAVIRECORDING, OnToolsPauseAVIRecording) | |
401 ON_UPDATE_COMMAND_UI(ID_TOOLS_PAUSEAVIRECORDING, OnUpdateToolsPauseAVIRecording) | |
402 | |
403 ON_COMMAND(ID_MOVIE_RECORD, OnToolsRecordMovie) | |
404 ON_UPDATE_COMMAND_UI(ID_MOVIE_RECORD, OnUpdateToolsRecordMovie) | |
405 ON_COMMAND(ID_MOVIE_STOP, OnToolsStopMovie) | |
406 ON_UPDATE_COMMAND_UI(ID_MOVIE_STOP, OnUpdateToolsStopMovie) | |
407 ON_COMMAND(ID_MOVIE_PLAY, OnToolsPlayMovie) | |
408 ON_UPDATE_COMMAND_UI(ID_MOVIE_PLAY, OnUpdateToolsPlayMovie) | |
409 ON_COMMAND(ID_MOVIE_READONLY, OnToolsPlayReadOnly) | |
410 ON_UPDATE_COMMAND_UI(ID_MOVIE_READONLY, OnUpdateToolsPlayReadOnly) | |
411 ON_COMMAND(ID_MOVIE_ASSC_WITH_SAVESTATE, OnAsscWithSaveState) | |
412 ON_UPDATE_COMMAND_UI(ID_MOVIE_ASSC_WITH_SAVESTATE, OnUpdateAsscWithSaveState) | |
413 ON_COMMAND(ID_MOVIE_RESUME_RECORD, OnToolsResumeRecord) | |
414 ON_UPDATE_COMMAND_UI(ID_MOVIE_RESUME_RECORD, OnUpdateToolsResumeRecord) | |
415 ON_COMMAND(ID_MOVIE_RESTART_PLAY, OnToolsPlayRestart) | |
416 ON_UPDATE_COMMAND_UI(ID_MOVIE_RESTART_PLAY, OnUpdateToolsPlayRestart) | |
417 | |
418 ON_COMMAND(ID_MOVIE_END_PAUSE, OnToolsOnMovieEndPause) | |
419 ON_UPDATE_COMMAND_UI(ID_MOVIE_END_PAUSE, OnUpdateToolsOnMovieEndPause) | |
420 ON_COMMAND(ID_MOVIE_END_STOP, OnToolsOnMovieEndStop) | |
421 ON_UPDATE_COMMAND_UI(ID_MOVIE_END_STOP, OnUpdateToolsOnMovieEndStop) | |
422 ON_COMMAND(ID_MOVIE_END_RESTART, OnToolsOnMovieEndRestart) | |
423 ON_UPDATE_COMMAND_UI(ID_MOVIE_END_RESTART, OnUpdateToolsOnMovieEndRestart) | |
424 ON_COMMAND(ID_MOVIE_END_APPEND, OnToolsOnMovieEndAppend) | |
425 ON_UPDATE_COMMAND_UI(ID_MOVIE_END_APPEND, OnUpdateToolsOnMovieEndAppend) | |
426 ON_COMMAND(ID_MOVIE_END_KEEP, OnToolsOnMovieEndKeep) | |
427 ON_UPDATE_COMMAND_UI(ID_MOVIE_END_KEEP, OnUpdateToolsOnMovieEndKeep) | |
428 | |
429 ON_COMMAND(ID_MOVIE_TOOL_SET_PAUSE_AT, OnToolsMovieSetPauseAt) | |
430 ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_SET_PAUSE_AT, OnUpdateToolsSetMoviePauseAt) | |
431 ON_COMMAND(ID_MOVIE_TOOL_CONVERT, OnToolsMovieConvertCurrent) | |
432 ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_CONVERT, OnUpdateToolsMovieConvertCurrent) | |
433 ON_COMMAND(ID_MOVIE_TOOL_AUTO_CONVERT, OnToolsMovieAutoConvert) | |
434 ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_AUTO_CONVERT, OnUpdateToolsMovieAutoConvert) | |
435 ON_COMMAND(ID_MOVIE_TOOL_FIX_HEADER, OnToolsMovieFixHeader) | |
436 ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_FIX_HEADER, OnUpdateToolsMovieFixHeader) | |
437 ON_COMMAND(ID_MOVIE_TOOL_TRUNCATE, OnToolsMovieTruncateAtCurrent) | |
438 ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_TRUNCATE, OnUpdateToolsMovieTruncateAtCurrent) | |
439 ON_COMMAND(ID_MOVIE_TOOL_EXTRACT_FROM_SAVEGAME, OnToolsMovieExtractFromSavegame) | |
440 ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_EXTRACT_FROM_SAVEGAME, OnUpdateToolsMovieExtractFromSavegame) | |
441 | |
442 ON_COMMAND(ID_TOOLS_REWIND, OnToolsRewind) | |
443 ON_UPDATE_COMMAND_UI(ID_TOOLS_REWIND, OnUpdateToolsRewind) | |
444 ON_COMMAND(ID_TOOLS_CUSTOMIZE, OnToolsCustomize) | |
445 ON_UPDATE_COMMAND_UI(ID_TOOLS_CUSTOMIZE, OnUpdateToolsCustomize) | |
446 // ON_COMMAND(ID_TOOLS_CUSTOMIZE_COMMON, OnToolsCustomizeCommon) | |
447 // ON_UPDATE_COMMAND_UI(ID_TOOLS_CUSTOMIZE_COMMON, OnUpdateToolsCustomizeCommon) | |
448 ON_COMMAND(ID_HELP_BUGREPORT, OnHelpBugreport) | |
449 | |
450 ON_COMMAND_EX_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE10, OnFileRecentFile) | |
451 ON_COMMAND_EX_RANGE(ID_FILE_LOADGAME_SLOT1, ID_FILE_LOADGAME_SLOT10, OnFileLoadSlot) | |
452 ON_COMMAND_EX_RANGE(ID_FILE_SAVEGAME_SLOT1, ID_FILE_SAVEGAME_SLOT10, OnFileSaveSlot) | |
453 ON_COMMAND_EX_RANGE(ID_SELECT_SLOT1, ID_SELECT_SLOT10, OnSelectSlot) | |
454 ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE10, OnUpdateFileRecentFile) | |
455 ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_LOADGAME_SLOT1, ID_FILE_LOADGAME_SLOT10, OnUpdateFileLoadSlot) | |
456 ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_SAVEGAME_SLOT1, ID_FILE_SAVEGAME_SLOT10, OnUpdateFileSaveSlot) | |
457 ON_UPDATE_COMMAND_UI_RANGE(ID_SELECT_SLOT1, ID_SELECT_SLOT10, OnUpdateSelectSlot) | |
458 | |
459 ON_COMMAND(ID_FILE_SAVEGAME_OLDESTSLOT, OnFileSavegameOldestslot) | |
460 ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_OLDESTSLOT, OnUpdateFileSavegameOldestslot) | |
461 ON_COMMAND(ID_FILE_LOADGAME_MOSTRECENT, OnFileLoadgameMostrecent) | |
462 ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MOSTRECENT, OnUpdateFileLoadgameMostrecent) | |
463 ON_COMMAND(ID_FILE_SAVEGAME_CURRENT, OnFileSavegameCurrent) | |
464 ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_CURRENT, OnUpdateFileSavegameCurrent) | |
465 ON_COMMAND(ID_FILE_LOADGAME_CURRENT, OnFileLoadgameCurrent) | |
466 ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_CURRENT, OnUpdateFileLoadgameCurrent) | |
467 ON_COMMAND(ID_FILE_LOADGAME_MAKECURRENT, OnFileLoadgameMakeCurrent) | |
468 ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MAKECURRENT, OnUpdateFileLoadgameMakeCurrent) | |
469 ON_COMMAND(ID_FILE_SAVEGAME_MAKECURRENT, OnFileSavegameMakeCurrent) | |
470 ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_MAKECURRENT, OnUpdateFileSavegameMakeCurrent) | |
471 | |
472 ON_COMMAND(ID_FILE_SAVEGAME_INCREMENTSLOT, OnFileSavegameIncrementSlot) | |
473 ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_INCREMENTSLOT, OnUpdateFileSavegameIncrementSlot) | |
474 ON_COMMAND(ID_FILE_SAVEGAME_DECREMENTSLOT, OnFileSavegameDecrementSlot) | |
475 ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_DECREMENTSLOT, OnUpdateFileSavegameDecrementSlot) | |
476 ON_COMMAND(ID_FILE_SLOT_DISPLAYMODIFICATIONTIME, OnFileSlotDisplayModificationTime) | |
477 ON_UPDATE_COMMAND_UI(ID_FILE_SLOT_DISPLAYMODIFICATIONTIME, OnUpdateFileSlotDisplayModificationTime) | |
478 | |
479 ON_COMMAND(ID_FILE_LOADGAME_AUTOLOADMOSTRECENT, OnFileLoadgameAutoloadmostrecent) | |
480 ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_AUTOLOADMOSTRECENT, OnUpdateFileLoadgameAutoloadmostrecent) | |
481 ON_COMMAND(ID_FILE_LOADGAME_MAKERECENT, OnFileLoadgameMakeRecent) | |
482 ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MAKERECENT, OnUpdateFileLoadgameMakeRecent) | |
483 | |
484 ON_COMMAND(ID_OPTIONS_SOUND_VOLUME_25X, OnOptionsSoundVolume25x) | |
485 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_VOLUME_25X, OnUpdateOptionsSoundVolume25x) | |
486 ON_COMMAND(ID_OPTIONS_SOUND_VOLUME_5X, OnOptionsSoundVolume5x) | |
487 ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_VOLUME_5X, OnUpdateOptionsSoundVolume5x) | |
488 ON_COMMAND(ID_CHEATS_DISABLECHEATS, OnCheatsDisablecheats) | |
489 ON_UPDATE_COMMAND_UI(ID_CHEATS_DISABLECHEATS, OnUpdateCheatsDisablecheats) | |
490 ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREENMAXSCALE, OnOptionsVideoFullscreenmaxscale) | |
491 | |
492 ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_FRAMESKIP_0, ID_OPTIONS_VIDEO_FRAMESKIP_9, OnOptionsFrameskip) | |
493 ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_X1, ID_OPTIONS_VIDEO_X4, OnOptionVideoSize) | |
494 ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_LAYERS_BG0, ID_OPTIONS_VIDEO_LAYERS_OBJWIN, OnVideoLayer) | |
495 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_VIDEO_LAYERS_BG0, ID_OPTIONS_VIDEO_LAYERS_OBJWIN, OnUpdateVideoLayer) | |
496 ON_COMMAND(ID_SYSTEM_MINIMIZE, OnSystemMinimize) | |
497 ON_COMMAND(ID_SYSTEM_MAXIMIZE, OnSystemMaximize) | |
498 ON_COMMAND_EX_RANGE(ID_OPTIONS_EMULATOR_SHOWSPEED_NONE, ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT, OnOptionsEmulatorShowSpeed) | |
499 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_EMULATOR_SHOWSPEED_NONE, | |
500 ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT, | |
501 OnUpdateOptionsEmulatorShowSpeed) | |
502 ON_COMMAND_EX_RANGE(ID_OPTIONS_SOUND_VOLUME_1X, ID_OPTIONS_SOUND_VOLUME_4X, OnOptionsSoundVolume) | |
503 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_SOUND_VOLUME_1X, ID_OPTIONS_SOUND_VOLUME_4X, OnUpdateOptionsSoundVolume) | |
504 ON_COMMAND_EX_RANGE(ID_OPTIONS_PRIORITY_HIGHEST, ID_OPTIONS_PRIORITY_BELOWNORMAL, OnOptionsPriority) | |
505 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_PRIORITY_HIGHEST, ID_OPTIONS_PRIORITY_BELOWNORMAL, OnUpdateOptionsPriority) | |
506 | |
507 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_NORMAL, ID_OPTIONS_FILTER_TVMODE, OnOptionsFilter) | |
508 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL, ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL, OnOptionsFilter) | |
509 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X, ID_OPTIONS_FILTER16BIT_SIMPLE2X, OnOptionsFilter) | |
510 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_BILINEAR, ID_OPTIONS_FILTER_BILINEARPLUS, OnOptionsFilter) | |
511 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_SCANLINES, ID_OPTIONS_FILTER_SCANLINES, OnOptionsFilter) | |
512 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_LQ2X, ID_OPTIONS_FILTER_HQ3X2, OnOptionsFilter) | |
513 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_SIMPLE3X, ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL4X, OnOptionsFilter) | |
514 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_NORMAL, ID_OPTIONS_FILTER_TVMODE, OnUpdateOptionsFilter) | |
515 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL, ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL, OnUpdateOptionsFilter) | |
516 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X, ID_OPTIONS_FILTER16BIT_SIMPLE2X, OnUpdateOptionsFilter) | |
517 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_BILINEAR, ID_OPTIONS_FILTER_BILINEARPLUS, OnUpdateOptionsFilter) | |
518 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_SCANLINES, ID_OPTIONS_FILTER_SCANLINES, OnUpdateOptionsFilter) | |
519 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_LQ2X, ID_OPTIONS_FILTER_HQ3X2, OnUpdateOptionsFilter) | |
520 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_SIMPLE3X, ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL4X, OnUpdateOptionsFilter) | |
521 ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE, ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART, OnOptionsFilterIFB) | |
522 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE, | |
523 ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART, | |
524 OnUpdateOptionsFilterIFB) | |
525 | |
526 ON_COMMAND_EX_RANGE(ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1, ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_4, OnOptionsJoypadDefault) | |
527 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1, ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_4, OnUpdateOptionsJoypadDefault) | |
528 ON_COMMAND_EX_RANGE(ID_OPTIONS_JOYPAD_AUTOFIRE_A, ID_OPTIONS_JOYPAD_AUTOFIRE_CLEAR, OnOptionsJoypadAutofire) | |
529 ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_JOYPAD_AUTOFIRE_A, ID_OPTIONS_JOYPAD_AUTOFIRE_CLEAR, OnUpdateOptionsJoypadAutofire) | |
530 ON_COMMAND_EX_RANGE(ID_STICKY_A, ID_STICKY_CLEAR, OnOptionsJoypadSticky) | |
531 ON_UPDATE_COMMAND_UI_RANGE(ID_STICKY_A, ID_STICKY_CLEAR, OnUpdateOptionsJoypadSticky) | |
532 ON_MESSAGE(VBA_CONFIRM_MODE, OnConfirmMode) | |
533 ON_MESSAGE(WM_SYSCOMMAND, OnMySysCommand) | |
534 ON_COMMAND(ID_OPTIONS_VIDEO_TEXTDISPLAYOPTIONS, OnOptionsVideoTextdisplayoptions) | |
535 ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_TEXTDISPLAYOPTIONS, OnUpdateOptionsVideoTextdisplayoptions) | |
536 | |
537 ON_COMMAND(ID_FILE_LUA_OPEN, OnFileLuaOpen) | |
538 ON_UPDATE_COMMAND_UI(ID_FILE_LUA_OPEN, OnUpdateFileLuaOpen) | |
539 ON_COMMAND(ID_FILE_LUA_CLOSE_ALL, OnFileLuaCloseAll) | |
540 ON_UPDATE_COMMAND_UI(ID_FILE_LUA_CLOSE_ALL, OnUpdateFileLuaCloseAll) | |
541 ON_COMMAND(ID_FILE_LUA_RELOAD, OnFileLuaReload) | |
542 ON_COMMAND(ID_FILE_LUA_STOP, OnFileLuaStop) | |
543 ON_COMMAND(ID_RAM_SEARCH, OnFileRamSearch) | |
544 ON_UPDATE_COMMAND_UI(ID_RAM_SEARCH, OnUpdateFileRamSearch) | |
545 ON_COMMAND(ID_RAM_WATCH, OnFileRamWatch) | |
546 ON_UPDATE_COMMAND_UI(ID_RAM_WATCH, OnUpdateFileRamWatch) | |
547 //}}AFX_MSG_MAP | |
548 END_MESSAGE_MAP() | |
549 | |
550 ///////////////////////////////////////////////////////////////////////////// | |
551 // MainWnd message handlers | |
552 | |
553 bool vbaShuttingDown = false; | |
554 | |
555 void MainWnd::OnClose() | |
556 { | |
557 vbaShuttingDown = true; // HACK to fix crash on exit while memory viewer is open | |
558 | |
559 CWnd::OnClose(); | |
560 | |
561 delete this; | |
562 } | |
563 | |
564 void MainWnd::OnMove(int x, int y) | |
565 { | |
566 CWnd::OnMove(x, y); | |
567 | |
568 if (!theApp.changingVideoSize) | |
569 { | |
570 if (this) | |
571 { | |
572 if (!IsIconic() && !IsZoomed()) | |
573 { | |
574 RECT r; | |
575 | |
576 GetWindowRect(&r); | |
577 theApp.windowPositionX = r.left; | |
578 theApp.windowPositionY = r.top; | |
579 theApp.adjustDestRect(); | |
580 regSetDwordValue("windowX", theApp.windowPositionX); | |
581 regSetDwordValue("windowY", theApp.windowPositionY); | |
582 } | |
583 } | |
584 } | |
585 } | |
586 | |
587 void MainWnd::OnSize(UINT nType, int cx, int cy) | |
588 { | |
589 CWnd::OnSize(nType, cx, cy); | |
590 | |
591 static int lastType = -1; | |
592 | |
593 // FIXME: hack to re-maximize window after it auto-unmaximizes while loading a ROM | |
594 if (nType == SIZE_MAXIMIZED && lastType == SIZE_MAXIMIZED) | |
595 { | |
596 lastType = -1; | |
597 ShowWindow(SW_SHOWMAXIMIZED); | |
598 MoveWindow(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); | |
599 return; | |
600 } | |
601 | |
602 lastType = nType; | |
603 | |
604 if (IsIconic()) | |
605 { | |
606 theApp.iconic = true; | |
607 return; | |
608 } | |
609 else if (theApp.iconic) | |
610 { | |
611 theApp.iconic = false; | |
612 } | |
613 | |
614 if (!theApp.changingVideoSize) | |
615 { | |
616 if (this) | |
617 { | |
618 if (theApp.videoOption <= VIDEO_4X) | |
619 { | |
620 theApp.surfaceSizeX = cx; | |
621 theApp.surfaceSizeY = cy; | |
622 theApp.adjustDestRect(); | |
623 if (theApp.display) | |
624 theApp.display->resize(theApp.dest.right - theApp.dest.left, theApp.dest.bottom - theApp.dest.top); | |
625 systemRefreshScreen(); // useful when shrinking | |
626 } | |
627 } | |
628 } | |
629 } | |
630 | |
631 void MainWnd::OnContextMenu(CWnd *pWnd, CPoint point) | |
632 { | |
633 winMouseOn(); | |
634 } | |
635 | |
636 void MainWnd::OnSystemMinimize() | |
637 { | |
638 ShowWindow(SW_SHOWMINIMIZED); | |
639 } | |
640 | |
641 void MainWnd::OnSystemMaximize() | |
642 { | |
643 ShowWindow(SW_SHOWMAXIMIZED); | |
644 } | |
645 | |
646 void MainWnd::OnPaint() | |
647 { | |
648 CPaintDC dc(this); // device context for painting, calling BeginPaint/EndPaint internally | |
649 if (emulating && (!theApp.active || theApp.paused)) | |
650 { | |
651 systemRedrawScreen(); | |
652 } | |
653 } | |
654 | |
655 static bool translatingAccelerator = false; | |
656 | |
657 // FIXME: this fix for accel keys is ugly | |
658 // using too many static variables for a single accel key kludge | |
659 static bool recursiveCall = true; | |
660 static bool fullUpdated = false; | |
661 static bool lastKeyModifier = false; // maybe better check current key press status instead | |
662 static WPARAM lastKey = 0; | |
663 | |
664 BOOL MainWnd::PreTranslateMessage(MSG *pMsg) | |
665 { | |
666 if (RamSearchHWnd && ::IsDialogMessage(RamSearchHWnd, pMsg)) | |
667 { | |
668 return TRUE; | |
669 } | |
670 else if (RamWatchHWnd && ::IsDialogMessage(RamWatchHWnd, pMsg)) | |
671 { | |
672 if (RamWatchAccels) | |
673 TranslateAccelerator(RamWatchHWnd, RamWatchAccels, pMsg); | |
674 return TRUE; | |
675 } | |
676 else if (LuaConsoleHWnd && ::IsDialogMessage(LuaConsoleHWnd, pMsg)) | |
677 { | |
678 return TRUE; | |
679 } | |
680 else if (CWnd::PreTranslateMessage(pMsg)) | |
681 { | |
682 return TRUE; | |
683 } | |
684 else if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) | |
685 { | |
686 translatingAccelerator = true; | |
687 | |
688 bool bHit = theApp.hAccel != NULL && ::TranslateAccelerator(m_hWnd, theApp.hAccel, pMsg); | |
689 bool isModifier = pMsg->wParam == VK_SHIFT || pMsg->wParam == VK_CONTROL || pMsg->wParam == VK_MENU; | |
690 | |
691 // HACK to get around the fact that TranslateAccelerator can't handle modifier-only accelerators | |
692 // (it would be better to fix TranslateAccelerator, but its code is in a Microsoft library...) | |
693 if (!bHit) | |
694 { | |
695 if (isModifier) | |
696 { | |
697 // do a linear loop through all accelerators to find modifier-only ones... | |
698 CCmdAccelOb *pCmdAccel; | |
699 WORD wKey; | |
700 CAccelsOb * pAccelOb; | |
701 POSITION pos = theApp.winAccelMgr.m_mapAccelTable.GetStartPosition(); | |
702 const int modifiers = ((pMsg->wParam == VK_SHIFT) ? FSHIFT : ((pMsg->wParam == VK_CONTROL) ? FCONTROL : FALT)); | |
703 while (pos != NULL) | |
704 { | |
705 theApp.winAccelMgr.m_mapAccelTable.GetNextAssoc(pos, wKey, pCmdAccel); | |
706 POSITION pos = pCmdAccel->m_Accels.GetHeadPosition(); | |
707 while (pos != NULL) | |
708 { | |
709 pAccelOb = pCmdAccel->m_Accels.GetNext(pos); | |
710 | |
711 if (pAccelOb->m_wKey == 0) // if accelerator-only | |
712 { | |
713 if ((pAccelOb->m_cVirt & modifiers) == modifiers) // if modifier matches | |
714 { | |
715 bHit = true; | |
716 SendMessage(WM_COMMAND, pCmdAccel->m_wIDCommand, 0); // tell Windows to call the right function | |
717 } | |
718 } | |
719 } | |
720 } | |
721 } | |
722 | |
723 if (!bHit) | |
724 { | |
725 lastKeyModifier = true; | |
726 } | |
727 } | |
728 | |
729 if (bHit) | |
730 { | |
731 if (lastKeyModifier && !isModifier) | |
732 { | |
733 fullUpdated = false; | |
734 lastKeyModifier = false; | |
735 } | |
736 | |
737 if (lastKey != pMsg->wParam) | |
738 { | |
739 fullUpdated = false; | |
740 lastKey = pMsg->wParam; | |
741 } | |
742 } | |
743 | |
744 translatingAccelerator = false; | |
745 return bHit ? TRUE : FALSE; | |
746 } | |
747 | |
748 return FALSE; | |
749 } | |
750 | |
751 void MainWnd::OnMouseMove(UINT nFlags, CPoint point) | |
752 { | |
753 winMouseOn(); | |
754 | |
755 CWnd::OnMouseMove(nFlags, point); | |
756 } | |
757 | |
758 // recursive kludge | |
759 static void InitMenuKludge(CMenu *pParentMenu, CMenu *pMenu, CCmdTarget *pWnd) | |
760 { | |
761 ASSERT(pMenu != NULL); | |
762 | |
763 CCmdUI state; | |
764 state.m_pParentMenu = pParentMenu; | |
765 state.m_pMenu = pMenu; | |
766 ASSERT(state.m_pOther == NULL); | |
767 | |
768 state.m_nIndexMax = pMenu->GetMenuItemCount(); | |
769 for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; | |
770 state.m_nIndex++) | |
771 { | |
772 state.m_nID = pMenu->GetMenuItemID(state.m_nIndex); | |
773 if (state.m_nID == 0) | |
774 continue; // menu separator or invalid cmd - ignore it | |
775 | |
776 ASSERT(state.m_pOther == NULL); | |
777 ASSERT(state.m_pMenu != NULL); | |
778 if (state.m_nID == (UINT)-1) | |
779 { | |
780 // possibly a popup menu, route to first item of that popup | |
781 state.m_pSubMenu = pMenu->GetSubMenu(state.m_nIndex); | |
782 if (state.m_pSubMenu == NULL) | |
783 { | |
784 continue; // first item of popup can't be routed to | |
785 } | |
786 | |
787 state.DoUpdate(pWnd, false); | |
788 if (recursiveCall) | |
789 { | |
790 // FIXME: slow recursive calls to fix enabling/disabling of accel keys | |
791 InitMenuKludge(state.m_pMenu, state.m_pSubMenu, pWnd); | |
792 } | |
793 } | |
794 else | |
795 { | |
796 // normal menu item | |
797 // Auto enable/disable if frame window has 'm_bAutoMenuEnable' | |
798 // set and command is _not_ a system command. | |
799 state.m_pSubMenu = NULL; | |
800 state.DoUpdate(pWnd, state.m_nID < 0xF000); | |
801 } | |
802 | |
803 // adjust for menu deletions and additions | |
804 UINT nCount = pMenu->GetMenuItemCount(); | |
805 if (nCount < state.m_nIndexMax) | |
806 { | |
807 state.m_nIndex -= (state.m_nIndexMax - nCount); | |
808 while (state.m_nIndex < nCount && | |
809 pMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) | |
810 { | |
811 state.m_nIndex++; | |
812 } | |
813 } | |
814 state.m_nIndexMax = nCount; | |
815 } | |
816 } | |
817 | |
818 void MainWnd::OnInitMenuPopup(CMenu *pMenu, UINT nIndex, BOOL bSysMenu) | |
819 { | |
820 ASSERT(pMenu != NULL); | |
821 | |
822 CCmdUI state; | |
823 state.m_pMenu = pMenu; | |
824 ASSERT(state.m_pOther == NULL); | |
825 ASSERT(state.m_pParentMenu == NULL); | |
826 | |
827 // determine if menu is popup in top-level menu and set m_pOther to | |
828 // it if so (m_pParentMenu == NULL indicates that it is secondary popup) | |
829 HMENU hParentMenu; | |
830 if (AfxGetThreadState()->m_hTrackingMenu == pMenu->m_hMenu) | |
831 state.m_pParentMenu = pMenu; // parent == child for tracking popup | |
832 else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) | |
833 { | |
834 CWnd *pParent = GetTopLevelParent(); | |
835 // children windows don't have menus -- need to go to the top! | |
836 if (pParent != NULL && | |
837 (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) | |
838 { | |
839 int nIndexMax = ::GetMenuItemCount(hParentMenu); | |
840 for (int nIndex = 0; nIndex < nIndexMax; nIndex++) | |
841 { | |
842 if (::GetSubMenu(hParentMenu, nIndex) == pMenu->m_hMenu) | |
843 { | |
844 // when popup is found, m_pParentMenu is containing menu | |
845 state.m_pParentMenu = CMenu::FromHandle(hParentMenu); | |
846 break; | |
847 } | |
848 } | |
849 } | |
850 } | |
851 | |
852 // FIXME: magic to workaround the accel key bug without slowing down too much | |
853 if (translatingAccelerator && !fullUpdated && state.m_pParentMenu == &theApp.m_menu) | |
854 { | |
855 state.m_pMenu = state.m_pParentMenu; | |
856 recursiveCall = true; | |
857 fullUpdated = true; | |
858 } | |
859 else if (!translatingAccelerator && fullUpdated) | |
860 { | |
861 fullUpdated = false; | |
862 } | |
863 | |
864 InitMenuKludge(state.m_pParentMenu, state.m_pMenu, this); | |
865 | |
866 recursiveCall = false; | |
867 } | |
868 | |
869 void MainWnd::OnInitMenu(CMenu *pMenu) | |
870 { | |
871 // CWnd::OnInitMenu(pMenu); | |
872 | |
873 if (translatingAccelerator) | |
874 {} | |
875 else | |
876 { | |
877 // HACK: we only want to call this if the user is pulling down the menu, | |
878 // but TranslateAccelerator also causes OnInitMenu to be called, so ignore that | |
879 | |
880 systemSoundPause(); | |
881 } | |
882 } | |
883 | |
884 void MainWnd::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized) | |
885 { | |
886 CWnd::OnActivate(nState, pWndOther, bMinimized); | |
887 | |
888 bool activated = (nState == WA_ACTIVE || nState == WA_CLICKACTIVE) && !bMinimized; | |
889 | |
890 theApp.active = activated || !theApp.pauseWhenInactive; | |
891 | |
892 extern bool inputActive; | |
893 inputActive = activated || (!theApp.pauseWhenInactive && theApp.enableBackgroundInput); | |
894 | |
895 if (theApp.active) | |
896 { | |
897 if (theApp.input) | |
898 { | |
899 theApp.input->activate(); | |
900 } | |
901 | |
902 if (!theApp.paused && emulating) | |
903 { | |
904 systemSoundResume(); | |
905 } | |
906 } | |
907 else | |
908 { | |
909 theApp.wasPaused = true; | |
910 | |
911 if (!theApp.paused && emulating) | |
912 { | |
913 systemSoundPause(); | |
914 } | |
915 | |
916 memset(theApp.delta, 255, sizeof(theApp.delta)); | |
917 } | |
918 | |
919 if (theApp.muteWhenInactive) | |
920 { | |
921 theApp.winMuteForNow = !activated; | |
922 } | |
923 | |
924 if (theApp.paused && emulating) | |
925 { | |
926 systemRefreshScreen(); | |
927 } | |
928 } | |
929 | |
930 #if _MSC_VER <= 1200 | |
931 void MainWnd::OnActivateApp(BOOL bActive, HTASK hTask) | |
932 #else | |
933 void MainWnd::OnActivateApp(BOOL bActive, DWORD hTask) | |
934 #endif | |
935 { | |
936 CWnd::OnActivateApp(bActive, hTask); | |
937 | |
938 if (theApp.tripleBuffering && theApp.videoOption > VIDEO_4X) | |
939 { | |
940 if (bActive) | |
941 { | |
942 if (theApp.display) | |
943 theApp.display->clear(); | |
944 } | |
945 } | |
946 } | |
947 | |
948 LRESULT MainWnd::OnMySysCommand(WPARAM wParam, LPARAM lParam) | |
949 { | |
950 if (emulating && !theApp.paused) | |
951 { | |
952 if ((wParam & 0xFFF0) == SC_SCREENSAVE || (wParam & 0xFFF0) == SC_MONITORPOWER) | |
953 return 0; | |
954 } | |
955 return Default(); | |
956 } | |
957 | |
958 void MainWnd::OnDropFiles(HDROP hDropInfo) | |
959 { | |
960 // FIXME: required for the accel key fix | |
961 fullUpdated = false; | |
962 | |
963 systemSoundClearBuffer(); | |
964 | |
965 char szFile[1024]; | |
966 char ext[1024]; | |
967 | |
968 if (DragQueryFile(hDropInfo, 0, szFile, 1024)) | |
969 { | |
970 DragFinish(hDropInfo); | |
971 | |
972 _splitpath(szFile, NULL, NULL, NULL, ext); | |
973 if (strcasecmp(ext, ".lua") == 0) | |
974 { | |
975 if (VBALoadLuaCode(szFile)) | |
976 { | |
977 // success, there is nothing to do | |
978 } | |
979 else | |
980 { | |
981 // Errors are displayed by the Lua code. | |
982 } | |
983 } | |
984 else if (strcasecmp(ext, ".vbm") == 0) | |
985 { | |
986 SMovie movieInfo; | |
987 char * movieName = szFile; | |
988 char romTitle [12]; | |
989 uint32 romGameCode; | |
990 uint16 checksum; | |
991 uint8 crc; | |
992 | |
993 if (VBAMovieGetInfo(movieName, &movieInfo) != MOVIE_SUCCESS) | |
994 { | |
995 return; | |
996 } | |
997 | |
998 int cartType = movieInfo.header.typeFlags & 1 ? 0 : 1; | |
999 | |
1000 if (!emulating) | |
1001 { | |
1002 theApp.winCheckFullscreen(); | |
1003 if (winFileOpenSelect(cartType)) | |
1004 { | |
1005 if (VBAMovieActive()) | |
1006 VBAMovieStop(false); // will only get here on user selecting to play a ROM, canceling movie | |
1007 if (!winFileRun()) | |
1008 return; | |
1009 } | |
1010 else | |
1011 return; | |
1012 } | |
1013 VBAMovieGetRomInfo(movieInfo, romTitle, romGameCode, checksum, crc); | |
1014 | |
1015 while (movieInfo.header.romCRC != crc | |
1016 || strncmp(movieInfo.header.romTitle, romTitle, 12) != 0 | |
1017 || movieInfo.header.romOrBiosChecksum != checksum | |
1018 && !((movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) == 0 && checksum == 0)) | |
1019 { | |
1020 char msg[1024], warning1[1024], warning2[1024], buffer[1024]; | |
1021 | |
1022 strcpy(warning1, ""); | |
1023 strcpy(warning2, ""); | |
1024 { | |
1025 char str [13]; | |
1026 strncpy(str, movieInfo.header.romTitle, 12); | |
1027 str[12] = '\0'; | |
1028 sprintf(buffer, "title=%s ", str); | |
1029 strcat(warning1, buffer); | |
1030 | |
1031 strncpy(str, romTitle, 12); | |
1032 str[12] = '\0'; | |
1033 sprintf(buffer, "title=%s ", str); | |
1034 strcat(warning2, buffer); | |
1035 } | |
1036 { | |
1037 sprintf(buffer, "type=%s ", | |
1038 (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) ? | |
1039 "GBA" : (movieInfo.header.typeFlags & MOVIE_TYPE_GBC) ? | |
1040 "GBC" : (movieInfo.header.typeFlags & MOVIE_TYPE_SGB) ? "SGB" : "GB"); | |
1041 strcat(warning1, buffer); | |
1042 | |
1043 sprintf(buffer, "type=%s ", systemCartridgeType == | |
1044 0 ? "GBA" : (gbRom[0x143] & 0x80 ? "GBC" : (gbRom[0x146] == 0x03 ? "SGB" : "GB"))); | |
1045 strcat(warning2, buffer); | |
1046 } | |
1047 { | |
1048 sprintf(buffer, "crc=%02x ", movieInfo.header.romCRC); | |
1049 strcat(warning1, buffer); | |
1050 | |
1051 sprintf(buffer, "crc=%02x ", crc); | |
1052 strcat(warning2, buffer); | |
1053 } | |
1054 { | |
1055 char code [5]; | |
1056 if (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) | |
1057 { | |
1058 memcpy(code, &movieInfo.header.romGameCode, 4); | |
1059 code[4] = '\0'; | |
1060 sprintf(buffer, "code=%s ", code); | |
1061 strcat(warning1, buffer); | |
1062 } | |
1063 | |
1064 if (systemCartridgeType == 0) | |
1065 { | |
1066 memcpy(code, &romGameCode, 4); | |
1067 code[4] = '\0'; | |
1068 sprintf(buffer, "code=%s ", code); | |
1069 strcat(warning2, buffer); | |
1070 } | |
1071 } | |
1072 { | |
1073 sprintf(buffer, | |
1074 movieInfo.header.typeFlags & | |
1075 MOVIE_TYPE_GBA ? ((movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) == | |
1076 0 ? "(bios=none) " : "(bios=%04x) ") : "check=%04x ", | |
1077 movieInfo.header.romOrBiosChecksum); | |
1078 strcat(warning1, buffer); | |
1079 | |
1080 sprintf(buffer, | |
1081 checksum == 0 ? "(bios=none) " : systemCartridgeType == 0 ? "(bios=%04x) " : "check=%04x ", | |
1082 checksum); | |
1083 strcat(warning2, buffer); | |
1084 } | |
1085 | |
1086 strcpy(msg, ""); | |
1087 sprintf(buffer, "Movie ROM: %s\n", warning1); | |
1088 strcat(msg, buffer); | |
1089 sprintf(buffer, "Your ROM: %s\n", warning2); | |
1090 strcat(msg, buffer); | |
1091 strcat(msg, "still want to play the movie?"); | |
1092 | |
1093 int sel = MessageBox(msg, TEXT("ROM Mismatch"), MB_ABORTRETRYIGNORE | MB_ICONQUESTION); | |
1094 switch (sel) | |
1095 { | |
1096 case IDABORT: | |
1097 return; | |
1098 case IDRETRY: | |
1099 theApp.winCheckFullscreen(); | |
1100 if (winFileOpenSelect(cartType)) | |
1101 { | |
1102 if (VBAMovieActive()) | |
1103 VBAMovieStop(false); // will only get here on user selecting to play a ROM, canceling movie | |
1104 if (!winFileRun()) | |
1105 return; | |
1106 VBAMovieGetRomInfo(movieInfo, romTitle, romGameCode, checksum, crc); | |
1107 } | |
1108 else | |
1109 return; | |
1110 break; | |
1111 default: | |
1112 goto romcheck_exit; | |
1113 } | |
1114 } | |
1115 romcheck_exit: | |
1116 | |
1117 bool useBIOSFile = (movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) != 0; | |
1118 if (useBIOSFile) | |
1119 { | |
1120 extern bool systemLoadBIOS(const char *biosFileName, bool useBiosFile); | |
1121 if (!systemLoadBIOS(theApp.biosFileName, useBIOSFile)) | |
1122 { | |
1123 systemMessage(0, "This movie requires a valid GBA BIOS file to play.\nPlease locate a BIOS file."); | |
1124 ((MainWnd *)theApp.m_pMainWnd)->OnOptionsEmulatorSelectbiosfile(); | |
1125 if (!systemLoadBIOS(theApp.biosFileName, useBIOSFile)) | |
1126 { | |
1127 systemMessage(0, "\"%s\" is not a valid BIOS file; cannot play movie without one.", theApp.biosFileName); | |
1128 return; | |
1129 } | |
1130 } | |
1131 } | |
1132 | |
1133 int code = VBAMovieOpen(movieName, TRUE); | |
1134 | |
1135 if (code != MOVIE_SUCCESS) | |
1136 { | |
1137 if (code == MOVIE_FILE_NOT_FOUND) | |
1138 systemMessage(0, "Could not find movie file \"%s\".", (const char *)movieName); | |
1139 else if (code == MOVIE_WRONG_FORMAT) | |
1140 systemMessage(0, "Movie file \"%s\" is not in proper VBM format.", (const char *)movieName); | |
1141 else if (code == MOVIE_WRONG_VERSION) | |
1142 systemMessage(0, "Movie file \"%s\" is not a supported version.", (const char *)movieName); | |
1143 else | |
1144 systemMessage(0, "Failed to open movie \"%s\".", (const char *)movieName); | |
1145 return; | |
1146 } | |
1147 } | |
1148 else if (strcasecmp(ext, ".wch") == 0) | |
1149 { | |
1150 if (emulating) | |
1151 { | |
1152 MainWnd::OnFileRamWatch(); | |
1153 Load_Watches(true, szFile); | |
1154 } | |
1155 } | |
1156 else | |
1157 { | |
1158 theApp.romFilename = szFile; | |
1159 if (winFileRun()) | |
1160 { | |
1161 SetForegroundWindow(); | |
1162 } | |
1163 } | |
1164 } | |
1165 else | |
1166 DragFinish(hDropInfo); | |
1167 } | |
1168 | |
1169 ///////////////////// | |
1170 | |
1171 void MainWnd::winMouseOn() | |
1172 { | |
1173 SetCursor(arrow); | |
1174 if (theApp.videoOption > VIDEO_4X) | |
1175 { | |
1176 theApp.mouseCounter = 120; | |
1177 } | |
1178 else | |
1179 theApp.mouseCounter = 0; | |
1180 } | |
1181 | |
1182 void MainWnd::winConfirmMode() | |
1183 { | |
1184 if (theApp.renderMethod == DIRECT_DRAW && theApp.videoOption > VIDEO_4X) | |
1185 { | |
1186 theApp.winCheckFullscreen(); | |
1187 ModeConfirm dlg(this); | |
1188 | |
1189 if (!dlg.DoModal()) | |
1190 { | |
1191 theApp.updateVideoSize(ID_OPTIONS_VIDEO_X2); | |
1192 } | |
1193 } | |
1194 } | |
1195 | |
1196 bool MainWnd::winFileOpenSelect(int cartridgeType) | |
1197 { | |
1198 int selectedFilter = regQueryDwordValue("selectedFilter", 0); | |
1199 if (selectedFilter < 0 || selectedFilter > 2) | |
1200 selectedFilter = 0; | |
1201 | |
1202 LPCTSTR exts[] = { NULL }; | |
1203 CString filter = winResLoadFilter(IDS_FILTER_ROM); | |
1204 CString title = winResLoadString(IDS_SELECT_ROM); | |
1205 | |
1206 bool isOverrideEmpty = false; | |
1207 CString initialDir = regQueryStringValue(cartridgeType == 0 ? IDS_ROM_DIR : IDS_GBXROM_DIR, NULL); | |
1208 if (initialDir.IsEmpty()) | |
1209 { | |
1210 isOverrideEmpty = true; | |
1211 CString altDir = regQueryStringValue(cartridgeType != 0 ? IDS_ROM_DIR : IDS_GBXROM_DIR, NULL); | |
1212 initialDir = altDir.IsEmpty() ? theApp.exeDir : altDir; | |
1213 } | |
1214 | |
1215 FileDlg dlg(this, "", filter, selectedFilter, "ROM", exts, initialDir, title, false, true); | |
1216 | |
1217 if (dlg.DoModal() == IDOK) | |
1218 { | |
1219 regSetDwordValue("selectedFilter", dlg.m_ofn.nFilterIndex); | |
1220 theApp.romFilename = dlg.GetPathName(); | |
1221 initialDir = winGetDirFromFilename(theApp.romFilename); | |
1222 | |
1223 // we have directory override for that purpose | |
1224 // but this can be...desirable | |
1225 if (isOverrideEmpty) | |
1226 regSetStringValue(cartridgeType == 0 ? IDS_ROM_DIR : IDS_GBXROM_DIR, initialDir); | |
1227 return true; | |
1228 } | |
1229 return false; | |
1230 } | |
1231 | |
1232 // some extensions that might commonly be near emulation-related files that we almost certainly can't open, or at least not | |
1233 // directly. | |
1234 // also includes definitely non-ROM extensions we know about, since we only use this variable in a ROM opening function. | |
1235 // we do this by exclusion instead of inclusion because we don't want to exclude extensions used for any archive files, even | |
1236 // extensionless or unusually-named archives. | |
1237 static const char *s_romIgnoreExtensions[] = { | |
1238 "vbm", "sgm", "clt", "dat", "gbs", "gcf", "spc", "xpc", "pal", "act", "dmp", "avi", "ini", "txt", "nfo", | |
1239 "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", "wav", "lnk", "exe", "bat", "sav", "luasav" | |
1240 }; | |
1241 | |
1242 #include "GBACheatsDlg.h" | |
1243 #include "GBCheatsDlg.h" | |
1244 | |
1245 #include "../common/CheatSearch.h" | |
1246 #include "../gba/GBA.h" | |
1247 #include "../gb/GB.h" | |
1248 #include "../gba/Flash.h" | |
1249 #include "../gba/RTC.h" | |
1250 | |
1251 void MainWnd::winFileClose(bool reopening) | |
1252 { | |
1253 if (rom != NULL || gbRom != NULL) | |
1254 { | |
1255 if (theApp.autoSaveLoadCheatList) | |
1256 winSaveCheatListDefault(); | |
1257 | |
1258 if (!reopening) | |
1259 { | |
1260 // save battery file before we change the filename... | |
1261 winWriteBatteryFile(); | |
1262 cheatSearchCleanup(&cheatSearchData); | |
1263 capturePrevious = 0; | |
1264 captureNumber = 0; | |
1265 } | |
1266 | |
1267 theApp.emulator.emuCleanUp(); | |
1268 | |
1269 extern void remoteCleanUp(); | |
1270 remoteCleanUp(); | |
1271 } | |
1272 | |
1273 if (VBAMovieActive()) | |
1274 VBAMovieStop(false); // will only get here on user selecting to open a ROM, canceling movie | |
1275 | |
1276 theApp.frameSearching = false; | |
1277 theApp.frameSearchSkipping = false; | |
1278 emulating = 0; | |
1279 | |
1280 if (this) | |
1281 RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN); | |
1282 systemSetTitle(VBA_NAME_AND_VERSION); | |
1283 } | |
1284 | |
1285 bool MainWnd::winFileRun(bool reopening) | |
1286 { | |
1287 int prevCartridgeType = systemCartridgeType; | |
1288 | |
1289 //bool requiresInitRAMSearch = (rom == NULL && gbRom == NULL) || !reopening; | |
1290 winFileClose(reopening); | |
1291 | |
1292 // use ObtainFile to support opening files within archives (.7z, .rar, .zip, .zip.rar.7z, etc.) | |
1293 if (theApp.romFilename.GetLength() > 2048) theApp.romFilename.Truncate(2048); | |
1294 | |
1295 char logicalName[2048], physicalName[2048]; | |
1296 | |
1297 // FIXME: assertion failure in fopen.c if canceled | |
1298 if (ObtainFile(theApp.romFilename, logicalName, physicalName, "rom", s_romIgnoreExtensions, | |
1299 sizeof(s_romIgnoreExtensions) / sizeof(*s_romIgnoreExtensions))) | |
1300 { | |
1301 // theApp.romFilename is exactly the filename used for opening, while theApp.gameFilename is always the logical name | |
1302 theApp.romFilename = theApp.gameFilename = logicalName; | |
1303 ReleaseTempFileCategory("rom", physicalName); | |
1304 } | |
1305 else | |
1306 { | |
1307 return false; | |
1308 } | |
1309 | |
1310 IMAGE_TYPE type = utilFindType(physicalName); | |
1311 | |
1312 if (type == IMAGE_UNKNOWN) | |
1313 { | |
1314 systemMessage(IDS_UNSUPPORTED_FILE_TYPE, | |
1315 "The file \"%s\" is an unsupported type.", logicalName); | |
1316 return false; | |
1317 } | |
1318 systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; | |
1319 systemCartridgeType = (int)type; | |
1320 if (type == IMAGE_GB) | |
1321 { | |
1322 if (!gbLoadRom(physicalName)) | |
1323 return false; | |
1324 | |
1325 gbBorderOn = theApp.winGbBorderOn; | |
1326 theApp.emulator = GBSystem; | |
1327 theApp.romSize = gbRomSize; | |
1328 if (theApp.autoIPS) | |
1329 { | |
1330 CString ipsname = winGetDestFilename(logicalName, IDS_IPS_DIR, ".ips"); | |
1331 int size = gbRomSize; | |
1332 utilApplyIPS(ipsname, &gbRom, &size); | |
1333 if (size != gbRomSize) | |
1334 { | |
1335 extern bool gbUpdateSizes(); | |
1336 gbUpdateSizes(); | |
1337 theApp.romSize = size; | |
1338 } | |
1339 } | |
1340 | |
1341 useBios = false; // FIXME | |
1342 | |
1343 if (reopening) | |
1344 { | |
1345 bool winGbCheatReaddress(); | |
1346 winGbCheatReaddress(); | |
1347 } | |
1348 } | |
1349 else | |
1350 { | |
1351 int size = CPULoadRom(physicalName); | |
1352 if (!size) | |
1353 return false; | |
1354 | |
1355 flashSetSize(theApp.winFlashSize); | |
1356 rtcEnable(theApp.winRtcEnable); | |
1357 cpuSaveType = theApp.winSaveType; | |
1358 | |
1359 // if(cpuEnhancedDetection && winSaveType == 0) { | |
1360 // utilGBAFindSave(rom, size); | |
1361 // } | |
1362 | |
1363 char buffer[5]; | |
1364 strncpy(buffer, (const char *)&rom[0xac], 4); | |
1365 buffer[4] = 0; | |
1366 | |
1367 // vba-over.ini | |
1368 CString vbaOverINI = theApp.exeDir; | |
1369 vbaOverINI += "\\vba-over.ini"; | |
1370 | |
1371 UINT i = GetPrivateProfileInt(buffer, "rtcEnabled", -1, vbaOverINI); | |
1372 if (i != (UINT)-1) | |
1373 rtcEnable(i == 0 ? false : true); | |
1374 | |
1375 i = GetPrivateProfileInt(buffer, "flashSize", -1, vbaOverINI); | |
1376 if (i != (UINT)-1 && (i == 0x10000 || i == 0x20000)) | |
1377 flashSetSize((int)i); | |
1378 | |
1379 i = GetPrivateProfileInt(buffer, "saveType", -1, vbaOverINI); | |
1380 if (i != (UINT)-1 && (i <= 5)) | |
1381 cpuSaveType = (int)i; | |
1382 | |
1383 /* disabled due to problems | |
1384 if(theApp.removeIntros && rom != NULL) { | |
1385 *((u32 *)rom)= 0xea00002e; | |
1386 } | |
1387 */ | |
1388 theApp.emulator = GBASystem; | |
1389 theApp.romSize = size; | |
1390 if (theApp.autoIPS) | |
1391 { | |
1392 CString ipsname = winGetDestFilename(logicalName, IDS_IPS_DIR, ".ips"); | |
1393 int size = 0x2000000; | |
1394 utilApplyIPS(ipsname, &rom, &size); | |
1395 } | |
1396 | |
1397 skipBios = theApp.skipBiosFile ? true : false; | |
1398 CPUInit(); | |
1399 CPULoadBios(theApp.biosFileName, theApp.useBiosFile ? true : false); | |
1400 CPUReset(); | |
1401 | |
1402 if (reopening) | |
1403 { | |
1404 bool winGbaCheatReaddress(); | |
1405 winGbaCheatReaddress(); | |
1406 } | |
1407 } | |
1408 | |
1409 if (theApp.soundInitialized) | |
1410 { | |
1411 if (systemCartridgeType == 1) | |
1412 gbSoundReset(); | |
1413 else | |
1414 soundReset(); | |
1415 } | |
1416 else | |
1417 { | |
1418 if (!soundOffFlag) | |
1419 soundInit(); | |
1420 theApp.soundInitialized = true; | |
1421 } | |
1422 | |
1423 winReadBatteryFile(); | |
1424 | |
1425 emulating = true; | |
1426 | |
1427 if (theApp.autoSaveLoadCheatList) | |
1428 winLoadCheatListDefault(); | |
1429 | |
1430 if (theApp.filenamePreference == 0) | |
1431 theApp.addRecentFile(winGetOriginalFilename(logicalName)); | |
1432 else | |
1433 theApp.addRecentFile(logicalName); | |
1434 | |
1435 theApp.updateWindowSize(theApp.videoOption); | |
1436 | |
1437 theApp.updateFrameSkip(); | |
1438 | |
1439 if (theApp.autoHideMenu && theApp.videoOption > VIDEO_4X && theApp.menuToggle) | |
1440 OnFileTogglemenu(); | |
1441 | |
1442 if (theApp.autoLoadMostRecent && !VBAMovieActive() && !VBAMovieLoading()) // would cause desync in movies... | |
1443 OnFileLoadgameMostrecent(); | |
1444 | |
1445 theApp.renderedFrames = 0; | |
1446 | |
1447 theApp.rewindCount = 0; | |
1448 theApp.rewindCounter = 0; | |
1449 theApp.rewindSaveNeeded = false; | |
1450 | |
1451 { | |
1452 extern bool playMovieFile, playMovieFileReadOnly, outputWavFile, outputAVIFile, flagHideMenu; // from VBA.cpp | |
1453 extern char movieFileToPlay[1024], wavFileToOutput[1024]; // from VBA.cpp | |
1454 extern int pauseAfterTime; // from VBA.cpp | |
1455 if (playMovieFile) | |
1456 { | |
1457 playMovieFile = false; | |
1458 VBAMovieOpen(movieFileToPlay, playMovieFileReadOnly); | |
1459 } | |
1460 if (outputWavFile) | |
1461 { | |
1462 outputWavFile = false; | |
1463 theApp.soundRecordName = wavFileToOutput; | |
1464 theApp.soundRecording = true; | |
1465 } | |
1466 if (outputAVIFile) | |
1467 { | |
1468 outputAVIFile = false; | |
1469 OnToolsStartAVIRecording(); | |
1470 } | |
1471 if (pauseAfterTime >= 0) | |
1472 { | |
1473 VBAMovieSetPauseAt(pauseAfterTime); | |
1474 } | |
1475 if (flagHideMenu) | |
1476 { | |
1477 OnFileTogglemenu(); | |
1478 theApp.updateWindowSize(theApp.videoOption); | |
1479 } | |
1480 } | |
1481 | |
1482 if (systemCartridgeType != prevCartridgeType) | |
1483 { | |
1484 extern GBACheatSearch gbaDlg; | |
1485 extern GBCheatSearch gbDlg; | |
1486 if (!theApp.pauseDuringCheatSearch && theApp.modelessCheatDialogIsOpen) | |
1487 { | |
1488 gbaDlg.DestroyWindow(); | |
1489 gbDlg.DestroyWindow(); | |
1490 theApp.modelessCheatDialogIsOpen = false; | |
1491 } | |
1492 } | |
1493 | |
1494 theApp.winCheckFullscreen(); | |
1495 ReopenRamWindows(); | |
1496 | |
1497 // FIXME | |
1498 reset_address_info(); | |
1499 //if (requiresInitRAMSearch) | |
1500 { | |
1501 // extern void soft_reset_address_info(); | |
1502 // soft_reset_address_info(); | |
1503 } | |
1504 | |
1505 VBAUpdateButtonPressDisplay(); | |
1506 VBAUpdateFrameCountDisplay(); | |
1507 systemRefreshScreen(); | |
1508 | |
1509 return true; | |
1510 } | |
1511 |