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 "MainWnd.h"
21
22 #include "Associate.h"
23 #include "Directories.h"
24 #include "FileDlg.h"
25 #include "GBColorDlg.h"
26 #include "Joypad.h"
27 #include "MaxScale.h"
28 #include "ModeConfirm.h"
29 #include "Reg.h"
30 #include "RewindInterval.h"
31 #include "skin.h"
32 #include "Throttle.h"
33 #include "WinResUtil.h"
34
35 #include "../System.h"
36 #include "../agbprint.h"
37 #include "../GBA.h"
38 #include "../Globals.h"
39 #include "../Sound.h"
40 #include "../gb/GB.h"
41 #include "../gb/gbGlobals.h"
42 #include "../gb/gbPrinter.h"
43
44 extern int emulating;
45
46 #define VBA_CONFIRM_MODE WM_APP + 100
47
48 extern void CPUUpdateRenderBuffers(bool force);
49
OnOptionsFrameskipThrottleNothrottle()50 void MainWnd::OnOptionsFrameskipThrottleNothrottle()
51 {
52 theApp.throttle = 0;
53 }
54
OnUpdateOptionsFrameskipThrottleNothrottle(CCmdUI * pCmdUI)55 void MainWnd::OnUpdateOptionsFrameskipThrottleNothrottle(CCmdUI* pCmdUI)
56 {
57 pCmdUI->SetCheck(theApp.throttle == 0);
58 }
59
OnOptionsFrameskipThrottle25()60 void MainWnd::OnOptionsFrameskipThrottle25()
61 {
62 theApp.throttle = 25;
63 }
64
OnUpdateOptionsFrameskipThrottle25(CCmdUI * pCmdUI)65 void MainWnd::OnUpdateOptionsFrameskipThrottle25(CCmdUI* pCmdUI)
66 {
67 pCmdUI->SetCheck(theApp.throttle == 25);
68 }
69
OnOptionsFrameskipThrottle50()70 void MainWnd::OnOptionsFrameskipThrottle50()
71 {
72 theApp.throttle = 50;
73 }
74
OnUpdateOptionsFrameskipThrottle50(CCmdUI * pCmdUI)75 void MainWnd::OnUpdateOptionsFrameskipThrottle50(CCmdUI* pCmdUI)
76 {
77 pCmdUI->SetCheck(theApp.throttle == 50);
78 }
79
OnOptionsFrameskipThrottle100()80 void MainWnd::OnOptionsFrameskipThrottle100()
81 {
82 theApp.throttle = 100;
83 }
84
OnUpdateOptionsFrameskipThrottle100(CCmdUI * pCmdUI)85 void MainWnd::OnUpdateOptionsFrameskipThrottle100(CCmdUI* pCmdUI)
86 {
87 pCmdUI->SetCheck(theApp.throttle == 100);
88 }
89
OnOptionsFrameskipThrottle150()90 void MainWnd::OnOptionsFrameskipThrottle150()
91 {
92 theApp.throttle = 150;
93 }
94
OnUpdateOptionsFrameskipThrottle150(CCmdUI * pCmdUI)95 void MainWnd::OnUpdateOptionsFrameskipThrottle150(CCmdUI* pCmdUI)
96 {
97 pCmdUI->SetCheck(theApp.throttle == 150);
98 }
99
OnOptionsFrameskipThrottle200()100 void MainWnd::OnOptionsFrameskipThrottle200()
101 {
102 theApp.throttle = 200;
103 }
104
OnUpdateOptionsFrameskipThrottle200(CCmdUI * pCmdUI)105 void MainWnd::OnUpdateOptionsFrameskipThrottle200(CCmdUI* pCmdUI)
106 {
107 pCmdUI->SetCheck(theApp.throttle == 200);
108 }
109
OnOptionsFrameskipThrottleOther()110 void MainWnd::OnOptionsFrameskipThrottleOther()
111 {
112 Throttle dlg;
113 int v = dlg.DoModal();
114 if(v)
115 theApp.throttle = v;
116 }
117
OnUpdateOptionsFrameskipThrottleOther(CCmdUI * pCmdUI)118 void MainWnd::OnUpdateOptionsFrameskipThrottleOther(CCmdUI* pCmdUI)
119 {
120 int throttle = theApp.throttle;
121 pCmdUI->SetCheck(throttle != 0 && throttle != 25 &&
122 throttle != 50 && throttle != 100 &&
123 throttle != 150 && throttle != 200);
124 }
125
OnOptionsFrameskipAutomatic()126 void MainWnd::OnOptionsFrameskipAutomatic()
127 {
128 theApp.autoFrameSkip = !theApp.autoFrameSkip;
129 if(!theApp.autoFrameSkip && emulating)
130 theApp.updateFrameSkip();
131 }
132
OnUpdateOptionsFrameskipAutomatic(CCmdUI * pCmdUI)133 void MainWnd::OnUpdateOptionsFrameskipAutomatic(CCmdUI* pCmdUI)
134 {
135 pCmdUI->SetCheck(theApp.autoFrameSkip);
136 }
137
OnOptionsFrameskip(UINT nID)138 BOOL MainWnd::OnOptionsFrameskip(UINT nID)
139 {
140 switch(nID) {
141 case ID_OPTIONS_VIDEO_FRAMESKIP_0:
142 case ID_OPTIONS_VIDEO_FRAMESKIP_1:
143 case ID_OPTIONS_VIDEO_FRAMESKIP_2:
144 case ID_OPTIONS_VIDEO_FRAMESKIP_3:
145 case ID_OPTIONS_VIDEO_FRAMESKIP_4:
146 case ID_OPTIONS_VIDEO_FRAMESKIP_5:
147 if(theApp.cartridgeType == 0) {
148 frameSkip = nID - ID_OPTIONS_VIDEO_FRAMESKIP_0;
149 } else {
150 gbFrameSkip = nID - ID_OPTIONS_VIDEO_FRAMESKIP_0;
151 }
152 if(emulating)
153 theApp.updateFrameSkip();
154 return TRUE;
155 break;
156 case ID_OPTIONS_VIDEO_FRAMESKIP_6:
157 case ID_OPTIONS_VIDEO_FRAMESKIP_7:
158 case ID_OPTIONS_VIDEO_FRAMESKIP_8:
159 case ID_OPTIONS_VIDEO_FRAMESKIP_9:
160 if(theApp.cartridgeType == 0) {
161 frameSkip = 6 + nID - ID_OPTIONS_VIDEO_FRAMESKIP_6;
162 } else {
163 gbFrameSkip = 6 + nID - ID_OPTIONS_VIDEO_FRAMESKIP_6;
164 }
165 if(emulating)
166 theApp.updateFrameSkip();
167 return TRUE;
168 break;
169 }
170 return FALSE;
171 }
172
OnUpdateOptionsVideoFrameskip0(CCmdUI * pCmdUI)173 void MainWnd::OnUpdateOptionsVideoFrameskip0(CCmdUI* pCmdUI)
174 {
175 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 0 : gbFrameSkip == 0);
176 }
177
OnUpdateOptionsVideoFrameskip1(CCmdUI * pCmdUI)178 void MainWnd::OnUpdateOptionsVideoFrameskip1(CCmdUI* pCmdUI)
179 {
180 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 1 : gbFrameSkip == 1);
181 }
182
OnUpdateOptionsVideoFrameskip2(CCmdUI * pCmdUI)183 void MainWnd::OnUpdateOptionsVideoFrameskip2(CCmdUI* pCmdUI)
184 {
185 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 2 : gbFrameSkip == 2);
186 }
187
OnUpdateOptionsVideoFrameskip3(CCmdUI * pCmdUI)188 void MainWnd::OnUpdateOptionsVideoFrameskip3(CCmdUI* pCmdUI)
189 {
190 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 3 : gbFrameSkip == 3);
191 }
192
OnUpdateOptionsVideoFrameskip4(CCmdUI * pCmdUI)193 void MainWnd::OnUpdateOptionsVideoFrameskip4(CCmdUI* pCmdUI)
194 {
195 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 4 : gbFrameSkip == 4);
196 }
197
OnUpdateOptionsVideoFrameskip5(CCmdUI * pCmdUI)198 void MainWnd::OnUpdateOptionsVideoFrameskip5(CCmdUI* pCmdUI)
199 {
200 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 5 : gbFrameSkip == 5);
201 }
202
OnUpdateOptionsVideoFrameskip6(CCmdUI * pCmdUI)203 void MainWnd::OnUpdateOptionsVideoFrameskip6(CCmdUI* pCmdUI)
204 {
205 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 6 : gbFrameSkip == 6);
206 }
207
OnUpdateOptionsVideoFrameskip7(CCmdUI * pCmdUI)208 void MainWnd::OnUpdateOptionsVideoFrameskip7(CCmdUI* pCmdUI)
209 {
210 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 7 : gbFrameSkip == 7);
211 }
212
OnUpdateOptionsVideoFrameskip8(CCmdUI * pCmdUI)213 void MainWnd::OnUpdateOptionsVideoFrameskip8(CCmdUI* pCmdUI)
214 {
215 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 8 : gbFrameSkip == 8);
216 }
217
OnUpdateOptionsVideoFrameskip9(CCmdUI * pCmdUI)218 void MainWnd::OnUpdateOptionsVideoFrameskip9(CCmdUI* pCmdUI)
219 {
220 pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 9 : gbFrameSkip == 9);
221 }
222
OnOptionsVideoVsync()223 void MainWnd::OnOptionsVideoVsync()
224 {
225 theApp.vsync = !theApp.vsync;
226 }
227
OnUpdateOptionsVideoVsync(CCmdUI * pCmdUI)228 void MainWnd::OnUpdateOptionsVideoVsync(CCmdUI* pCmdUI)
229 {
230 pCmdUI->SetCheck(theApp.vsync);
231 }
232
OnUpdateOptionsVideoX1(CCmdUI * pCmdUI)233 void MainWnd::OnUpdateOptionsVideoX1(CCmdUI* pCmdUI)
234 {
235 pCmdUI->SetCheck(theApp.videoOption == VIDEO_1X);
236 }
237
OnUpdateOptionsVideoX2(CCmdUI * pCmdUI)238 void MainWnd::OnUpdateOptionsVideoX2(CCmdUI* pCmdUI)
239 {
240 pCmdUI->SetCheck(theApp.videoOption == VIDEO_2X);
241 }
242
OnUpdateOptionsVideoX3(CCmdUI * pCmdUI)243 void MainWnd::OnUpdateOptionsVideoX3(CCmdUI* pCmdUI)
244 {
245 pCmdUI->SetCheck(theApp.videoOption == VIDEO_3X);
246 }
247
OnUpdateOptionsVideoX4(CCmdUI * pCmdUI)248 void MainWnd::OnUpdateOptionsVideoX4(CCmdUI* pCmdUI)
249 {
250 pCmdUI->SetCheck(theApp.videoOption == VIDEO_4X);
251 }
252
OnUpdateOptionsVideoFullscreen320x240(CCmdUI * pCmdUI)253 void MainWnd::OnUpdateOptionsVideoFullscreen320x240(CCmdUI* pCmdUI)
254 {
255 pCmdUI->Enable(theApp.mode320Available);
256 pCmdUI->SetCheck(theApp.videoOption == VIDEO_320x240);
257 }
258
OnUpdateOptionsVideoFullscreen640x480(CCmdUI * pCmdUI)259 void MainWnd::OnUpdateOptionsVideoFullscreen640x480(CCmdUI* pCmdUI)
260 {
261 pCmdUI->Enable(theApp.mode640Available);
262 pCmdUI->SetCheck(theApp.videoOption == VIDEO_640x480);
263 }
264
OnUpdateOptionsVideoFullscreen800x600(CCmdUI * pCmdUI)265 void MainWnd::OnUpdateOptionsVideoFullscreen800x600(CCmdUI* pCmdUI)
266 {
267 pCmdUI->Enable(theApp.mode800Available);
268 pCmdUI->SetCheck(theApp.videoOption == VIDEO_800x600);
269 }
270
OnOptionVideoSize(UINT nID)271 BOOL MainWnd::OnOptionVideoSize(UINT nID)
272 {
273 theApp.updateVideoSize(nID);
274 theApp.m_pMainWnd->PostMessage(VBA_CONFIRM_MODE);
275 return TRUE;
276 }
277
OnOptionsVideoFullscreen320x240()278 void MainWnd::OnOptionsVideoFullscreen320x240()
279 {
280 OnOptionVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN320X240);
281 }
282
OnOptionsVideoFullscreen640x480()283 void MainWnd::OnOptionsVideoFullscreen640x480()
284 {
285 OnOptionVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN640X480);
286 }
287
OnOptionsVideoFullscreen800x600()288 void MainWnd::OnOptionsVideoFullscreen800x600()
289 {
290 OnOptionVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN800X600);
291 }
292
OnOptionsVideoFullscreen()293 void MainWnd::OnOptionsVideoFullscreen()
294 {
295 theApp.winCheckFullscreen();
296 GUID *pGUID = NULL;
297 int size = theApp.display->selectFullScreenMode(&pGUID);
298 if(size != -1) {
299 int width = (size >> 12) & 4095;
300 int height = (size & 4095);
301 int colorDepth = (size >> 24);
302 if(width != theApp.fsWidth ||
303 height != theApp.fsHeight ||
304 colorDepth != theApp.fsColorDepth ||
305 pGUID != theApp.pVideoDriverGUID ||
306 theApp.videoOption != VIDEO_OTHER) {
307 theApp.fsForceChange = true;
308 theApp.fsWidth = width;
309 theApp.fsHeight = height;
310 theApp.fsColorDepth = colorDepth;
311 theApp.pVideoDriverGUID = pGUID;
312 if(pGUID) {
313 theApp.videoDriverGUID = *pGUID;
314 regSetDwordValue("defaultVideoDriver", FALSE);
315 regSetBinaryValue("videoDriverGUID",
316 (char *)pGUID, sizeof(GUID));
317 } else {
318 regSetDwordValue("defaultVideoDriver", TRUE);
319 }
320 theApp.updateVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN);
321 theApp.m_pMainWnd->PostMessage(VBA_CONFIRM_MODE);
322 }
323 }
324 theApp.winAccelMgr.UpdateMenu(theApp.menu);
325 }
326
OnUpdateOptionsVideoFullscreen(CCmdUI * pCmdUI)327 void MainWnd::OnUpdateOptionsVideoFullscreen(CCmdUI* pCmdUI)
328 {
329 pCmdUI->SetCheck(theApp.videoOption == VIDEO_OTHER);
330 }
331
OnOptionsVideoDisablesfx()332 void MainWnd::OnOptionsVideoDisablesfx()
333 {
334 cpuDisableSfx = !cpuDisableSfx;
335 if(emulating && theApp.cartridgeType == 0)
336 CPUUpdateRender();
337 }
338
OnUpdateOptionsVideoDisablesfx(CCmdUI * pCmdUI)339 void MainWnd::OnUpdateOptionsVideoDisablesfx(CCmdUI* pCmdUI)
340 {
341 pCmdUI->SetCheck(cpuDisableSfx);
342 }
343
OnOptionsVideoFullscreenstretchtofit()344 void MainWnd::OnOptionsVideoFullscreenstretchtofit()
345 {
346 theApp.fullScreenStretch = !theApp.fullScreenStretch;
347 theApp.updateWindowSize(theApp.videoOption);
348 if(theApp.display)
349 theApp.display->clear();
350 }
351
OnUpdateOptionsVideoFullscreenstretchtofit(CCmdUI * pCmdUI)352 void MainWnd::OnUpdateOptionsVideoFullscreenstretchtofit(CCmdUI* pCmdUI)
353 {
354 pCmdUI->SetCheck(theApp.fullScreenStretch);
355 }
356
OnVideoLayer(UINT nID)357 BOOL MainWnd::OnVideoLayer(UINT nID)
358 {
359 layerSettings ^= 0x0100 <<
360 ((nID & 0xFFFF) - ID_OPTIONS_VIDEO_LAYERS_BG0);
361 layerEnable = DISPCNT & layerSettings;
362 CPUUpdateRenderBuffers(false);
363 return TRUE;
364 }
365
OnUpdateVideoLayer(CCmdUI * pCmdUI)366 void MainWnd::OnUpdateVideoLayer(CCmdUI *pCmdUI)
367 {
368 pCmdUI->SetCheck((layerSettings >> (8 + pCmdUI->m_nID - ID_OPTIONS_VIDEO_LAYERS_BG0)) & 1);
369 switch(pCmdUI->m_nID) {
370 case ID_OPTIONS_VIDEO_LAYERS_BG1:
371 case ID_OPTIONS_VIDEO_LAYERS_BG2:
372 case ID_OPTIONS_VIDEO_LAYERS_BG3:
373 case ID_OPTIONS_VIDEO_LAYERS_WIN1:
374 case ID_OPTIONS_VIDEO_LAYERS_OBJWIN:
375 pCmdUI->Enable(theApp.cartridgeType == 0);
376 break;
377 }
378 }
379
OnOptionsVideoRendermethodGdi()380 void MainWnd::OnOptionsVideoRendermethodGdi()
381 {
382 theApp.renderMethod = GDI;
383 theApp.updateRenderMethod(false);
384 theApp.winAccelMgr.UpdateMenu(theApp.menu);
385 }
386
OnUpdateOptionsVideoRendermethodGdi(CCmdUI * pCmdUI)387 void MainWnd::OnUpdateOptionsVideoRendermethodGdi(CCmdUI* pCmdUI)
388 {
389 pCmdUI->SetCheck(theApp.renderMethod == GDI);
390 }
391
OnOptionsVideoRendermethodDirectdraw()392 void MainWnd::OnOptionsVideoRendermethodDirectdraw()
393 {
394 theApp.renderMethod = DIRECT_DRAW;
395 theApp.updateRenderMethod(false);
396 theApp.winAccelMgr.UpdateMenu(theApp.menu);
397 }
398
OnUpdateOptionsVideoRendermethodDirectdraw(CCmdUI * pCmdUI)399 void MainWnd::OnUpdateOptionsVideoRendermethodDirectdraw(CCmdUI* pCmdUI)
400 {
401 pCmdUI->SetCheck(theApp.renderMethod == DIRECT_DRAW);
402 }
403
OnOptionsVideoRendermethodDirect3d()404 void MainWnd::OnOptionsVideoRendermethodDirect3d()
405 {
406 theApp.renderMethod = DIRECT_3D;
407 theApp.updateRenderMethod(false);
408 theApp.winAccelMgr.UpdateMenu(theApp.menu);
409 }
410
OnUpdateOptionsVideoRendermethodDirect3d(CCmdUI * pCmdUI)411 void MainWnd::OnUpdateOptionsVideoRendermethodDirect3d(CCmdUI* pCmdUI)
412 {
413 pCmdUI->SetCheck(theApp.renderMethod == DIRECT_3D);
414 }
415
OnOptionsVideoRendermethodOpengl()416 void MainWnd::OnOptionsVideoRendermethodOpengl()
417 {
418 theApp.renderMethod = OPENGL;
419 theApp.updateRenderMethod(false);
420 theApp.winAccelMgr.UpdateMenu(theApp.menu);
421 }
422
OnUpdateOptionsVideoRendermethodOpengl(CCmdUI * pCmdUI)423 void MainWnd::OnUpdateOptionsVideoRendermethodOpengl(CCmdUI* pCmdUI)
424 {
425 pCmdUI->SetCheck(theApp.renderMethod == OPENGL);
426 }
427
OnOptionsVideoTriplebuffering()428 void MainWnd::OnOptionsVideoTriplebuffering()
429 {
430 theApp.tripleBuffering = !theApp.tripleBuffering;
431 }
432
OnUpdateOptionsVideoTriplebuffering(CCmdUI * pCmdUI)433 void MainWnd::OnUpdateOptionsVideoTriplebuffering(CCmdUI* pCmdUI)
434 {
435 pCmdUI->SetCheck(theApp.tripleBuffering);
436 }
437
OnOptionsVideoDdrawemulationonly()438 void MainWnd::OnOptionsVideoDdrawemulationonly()
439 {
440 theApp.ddrawEmulationOnly = !theApp.ddrawEmulationOnly;
441 }
442
OnUpdateOptionsVideoDdrawemulationonly(CCmdUI * pCmdUI)443 void MainWnd::OnUpdateOptionsVideoDdrawemulationonly(CCmdUI* pCmdUI)
444 {
445 pCmdUI->SetCheck(theApp.ddrawEmulationOnly);
446 }
447
OnOptionsVideoDdrawusevideomemory()448 void MainWnd::OnOptionsVideoDdrawusevideomemory()
449 {
450 theApp.ddrawUseVideoMemory = !theApp.ddrawUseVideoMemory;
451 }
452
OnUpdateOptionsVideoDdrawusevideomemory(CCmdUI * pCmdUI)453 void MainWnd::OnUpdateOptionsVideoDdrawusevideomemory(CCmdUI* pCmdUI)
454 {
455 pCmdUI->SetCheck(theApp.ddrawUseVideoMemory);
456 }
457
OnOptionsVideoRenderoptionsD3dnofilter()458 void MainWnd::OnOptionsVideoRenderoptionsD3dnofilter()
459 {
460 theApp.d3dFilter = 0;
461 if(theApp.display)
462 theApp.display->setOption("d3dFilter", 0);
463 }
464
OnUpdateOptionsVideoRenderoptionsD3dnofilter(CCmdUI * pCmdUI)465 void MainWnd::OnUpdateOptionsVideoRenderoptionsD3dnofilter(CCmdUI* pCmdUI)
466 {
467 pCmdUI->SetCheck(theApp.d3dFilter == 0);
468 }
469
OnOptionsVideoRenderoptionsD3dbilinear()470 void MainWnd::OnOptionsVideoRenderoptionsD3dbilinear()
471 {
472 theApp.d3dFilter = 1;
473 if(theApp.display)
474 theApp.display->setOption("d3dFilter", 1);
475 }
476
OnUpdateOptionsVideoRenderoptionsD3dbilinear(CCmdUI * pCmdUI)477 void MainWnd::OnUpdateOptionsVideoRenderoptionsD3dbilinear(CCmdUI* pCmdUI)
478 {
479 pCmdUI->SetCheck(theApp.d3dFilter == 1);
480 }
481
OnOptionsVideoRenderoptionsGlnearest()482 void MainWnd::OnOptionsVideoRenderoptionsGlnearest()
483 {
484 theApp.glFilter = 0;
485 if(theApp.display)
486 theApp.display->setOption("glFilter", 0);
487 }
488
OnUpdateOptionsVideoRenderoptionsGlnearest(CCmdUI * pCmdUI)489 void MainWnd::OnUpdateOptionsVideoRenderoptionsGlnearest(CCmdUI* pCmdUI)
490 {
491 pCmdUI->SetCheck(theApp.glFilter == 0);
492 }
493
OnOptionsVideoRenderoptionsGlbilinear()494 void MainWnd::OnOptionsVideoRenderoptionsGlbilinear()
495 {
496 theApp.glFilter = 1;
497 if(theApp.display)
498 theApp.display->setOption("glFilter", 1);
499 }
500
OnUpdateOptionsVideoRenderoptionsGlbilinear(CCmdUI * pCmdUI)501 void MainWnd::OnUpdateOptionsVideoRenderoptionsGlbilinear(CCmdUI* pCmdUI)
502 {
503 pCmdUI->SetCheck(theApp.glFilter == 1);
504 }
505
OnOptionsVideoRenderoptionsGltriangle()506 void MainWnd::OnOptionsVideoRenderoptionsGltriangle()
507 {
508 theApp.glType = 0;
509 if(theApp.display)
510 theApp.display->setOption("glType", 0);
511 }
512
OnUpdateOptionsVideoRenderoptionsGltriangle(CCmdUI * pCmdUI)513 void MainWnd::OnUpdateOptionsVideoRenderoptionsGltriangle(CCmdUI* pCmdUI)
514 {
515 pCmdUI->SetCheck(theApp.glType == 0);
516 }
517
OnOptionsVideoRenderoptionsGlquads()518 void MainWnd::OnOptionsVideoRenderoptionsGlquads()
519 {
520 theApp.glType = 1;
521 if(theApp.display)
522 theApp.display->setOption("glType", 1);
523 }
524
OnUpdateOptionsVideoRenderoptionsGlquads(CCmdUI * pCmdUI)525 void MainWnd::OnUpdateOptionsVideoRenderoptionsGlquads(CCmdUI* pCmdUI)
526 {
527 pCmdUI->SetCheck(theApp.glType == 1);
528 }
529
OnOptionsVideoRenderoptionsSelectskin()530 void MainWnd::OnOptionsVideoRenderoptionsSelectskin()
531 {
532 LPCTSTR exts[] = {".ini" };
533 CString filter = winLoadFilter(IDS_FILTER_INI);
534 CString title = winResLoadString(IDS_SELECT_SKIN_FILE);
535
536 FileDlg dlg(this,
537 theApp.skinName,
538 filter,
539 0,
540 "INI",
541 exts,
542 "",
543 title,
544 false);
545
546 if(dlg.DoModal() == IDCANCEL) {
547 return;
548 }
549
550 bool result = false;
551 if(!theApp.skinEnabled) {
552 theApp.skinEnabled = !theApp.skinEnabled;
553 regSetDwordValue("skinEnabled", theApp.skinEnabled);
554 }
555
556 if(theApp.skin && theApp.skinEnabled) {
557 delete theApp.skin;
558 theApp.skin = NULL;
559 }
560
561 theApp.skinName = dlg.GetPathName();
562
563 theApp.winUpdateSkin();
564 theApp.winAccelMgr.UpdateMenu(theApp.menu);
565 }
566
OnUpdateOptionsVideoRenderoptionsSelectskin(CCmdUI * pCmdUI)567 void MainWnd::OnUpdateOptionsVideoRenderoptionsSelectskin(CCmdUI* pCmdUI)
568 {
569 pCmdUI->Enable(theApp.display && theApp.display->isSkinSupported() &&
570 theApp.videoOption <= VIDEO_4X);
571 }
572
OnOptionsVideoRenderoptionsSkin()573 void MainWnd::OnOptionsVideoRenderoptionsSkin()
574 {
575 theApp.skinEnabled = !theApp.skinEnabled;
576 theApp.updateRenderMethod(true);
577 theApp.winAccelMgr.UpdateMenu(theApp.menu);
578 }
579
OnUpdateOptionsVideoRenderoptionsSkin(CCmdUI * pCmdUI)580 void MainWnd::OnUpdateOptionsVideoRenderoptionsSkin(CCmdUI* pCmdUI)
581 {
582 pCmdUI->SetCheck(theApp.skinEnabled);
583 pCmdUI->Enable(theApp.display && theApp.display->isSkinSupported() && theApp.videoOption <= VIDEO_4X);
584 }
585
OnOptionsEmulatorAssociate()586 void MainWnd::OnOptionsEmulatorAssociate()
587 {
588 theApp.winCheckFullscreen();
589 Associate dlg;
590 dlg.DoModal();
591 }
592
OnOptionsEmulatorDirectories()593 void MainWnd::OnOptionsEmulatorDirectories()
594 {
595 theApp.winCheckFullscreen();
596 Directories dlg;
597 dlg.DoModal();
598 }
599
OnOptionsEmulatorDisablestatusmessages()600 void MainWnd::OnOptionsEmulatorDisablestatusmessages()
601 {
602 theApp.disableStatusMessage = !theApp.disableStatusMessage;
603 }
604
OnUpdateOptionsEmulatorDisablestatusmessages(CCmdUI * pCmdUI)605 void MainWnd::OnUpdateOptionsEmulatorDisablestatusmessages(CCmdUI* pCmdUI)
606 {
607 pCmdUI->SetCheck(theApp.disableStatusMessage);
608 }
609
OnOptionsEmulatorSynchronize()610 void MainWnd::OnOptionsEmulatorSynchronize()
611 {
612 synchronize = !synchronize;
613 }
614
OnUpdateOptionsEmulatorSynchronize(CCmdUI * pCmdUI)615 void MainWnd::OnUpdateOptionsEmulatorSynchronize(CCmdUI* pCmdUI)
616 {
617 pCmdUI->SetCheck(synchronize);
618 }
619
OnOptionsEmulatorPausewheninactive()620 void MainWnd::OnOptionsEmulatorPausewheninactive()
621 {
622 theApp.pauseWhenInactive = !theApp.pauseWhenInactive;
623 }
624
OnUpdateOptionsEmulatorPausewheninactive(CCmdUI * pCmdUI)625 void MainWnd::OnUpdateOptionsEmulatorPausewheninactive(CCmdUI* pCmdUI)
626 {
627 pCmdUI->SetCheck(theApp.pauseWhenInactive);
628 }
629
OnOptionsEmulatorSpeeduptoggle()630 void MainWnd::OnOptionsEmulatorSpeeduptoggle()
631 {
632 theApp.speedupToggle = !theApp.speedupToggle;
633 }
634
OnUpdateOptionsEmulatorSpeeduptoggle(CCmdUI * pCmdUI)635 void MainWnd::OnUpdateOptionsEmulatorSpeeduptoggle(CCmdUI* pCmdUI)
636 {
637 pCmdUI->SetCheck(theApp.speedupToggle);
638 }
639
OnOptionsEmulatorRemoveintrosgba()640 void MainWnd::OnOptionsEmulatorRemoveintrosgba()
641 {
642 // theApp.removeIntros = !theApp.removeIntros;
643 }
644
OnUpdateOptionsEmulatorRemoveintrosgba(CCmdUI * pCmdUI)645 void MainWnd::OnUpdateOptionsEmulatorRemoveintrosgba(CCmdUI* pCmdUI)
646 {
647 pCmdUI->Enable(false);
648 // pCmdUI->SetCheck(theApp.removeIntros);
649 }
650
OnOptionsEmulatorAutomaticallyipspatch()651 void MainWnd::OnOptionsEmulatorAutomaticallyipspatch()
652 {
653 theApp.autoIPS = !theApp.autoIPS;
654 }
655
OnUpdateOptionsEmulatorAutomaticallyipspatch(CCmdUI * pCmdUI)656 void MainWnd::OnUpdateOptionsEmulatorAutomaticallyipspatch(CCmdUI* pCmdUI)
657 {
658 pCmdUI->SetCheck(theApp.autoIPS);
659 }
660
OnOptionsEmulatorAgbprint()661 void MainWnd::OnOptionsEmulatorAgbprint()
662 {
663 agbPrintEnable(!agbPrintIsEnabled());
664 }
665
OnUpdateOptionsEmulatorAgbprint(CCmdUI * pCmdUI)666 void MainWnd::OnUpdateOptionsEmulatorAgbprint(CCmdUI* pCmdUI)
667 {
668 pCmdUI->SetCheck(agbPrintIsEnabled());
669 }
670
OnOptionsEmulatorRealtimeclock()671 void MainWnd::OnOptionsEmulatorRealtimeclock()
672 {
673 theApp.winRtcEnable = !theApp.winRtcEnable;
674 }
675
OnUpdateOptionsEmulatorRealtimeclock(CCmdUI * pCmdUI)676 void MainWnd::OnUpdateOptionsEmulatorRealtimeclock(CCmdUI* pCmdUI)
677 {
678 pCmdUI->SetCheck(theApp.winRtcEnable);
679 }
680
OnOptionsEmulatorAutohidemenu()681 void MainWnd::OnOptionsEmulatorAutohidemenu()
682 {
683 theApp.autoHideMenu = !theApp.autoHideMenu;
684 }
685
OnUpdateOptionsEmulatorAutohidemenu(CCmdUI * pCmdUI)686 void MainWnd::OnUpdateOptionsEmulatorAutohidemenu(CCmdUI* pCmdUI)
687 {
688 pCmdUI->SetCheck(theApp.autoHideMenu);
689 }
690
OnOptionsEmulatorRewindinterval()691 void MainWnd::OnOptionsEmulatorRewindinterval()
692 {
693 RewindInterval dlg(theApp.rewindTimer/6);
694 int v = dlg.DoModal();
695
696 if(v >= 0) {
697 theApp.rewindTimer = v*6; // convert to a multiple of 10 frames
698 regSetDwordValue("rewindTimer", v);
699 if(v == 0) {
700 if(theApp.rewindMemory)
701 free(theApp.rewindMemory);
702 theApp.rewindMemory = NULL;
703 theApp.rewindCount = 0;
704 theApp.rewindCounter = 0;
705 theApp.rewindSaveNeeded = false;
706 } else {
707 if(theApp.rewindMemory == NULL)
708 theApp.rewindMemory = (char *)malloc(8*REWIND_SIZE);
709 }
710 }
711 }
712
OnOptionsEmulatorShowSpeed(UINT nID)713 BOOL MainWnd::OnOptionsEmulatorShowSpeed(UINT nID)
714 {
715 switch(nID) {
716 case ID_OPTIONS_EMULATOR_SHOWSPEED_NONE:
717 theApp.showSpeed = 0;
718 systemSetTitle("VisualBoyAdvance");
719 break;
720 case ID_OPTIONS_EMULATOR_SHOWSPEED_PERCENTAGE:
721 theApp.showSpeed = 1;
722 break;
723 case ID_OPTIONS_EMULATOR_SHOWSPEED_DETAILED:
724 theApp.showSpeed = 2;
725 break;
726 case ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT:
727 theApp.showSpeedTransparent = !theApp.showSpeedTransparent;
728 break;
729 default:
730 return FALSE;
731 }
732 return TRUE;
733 }
734
OnUpdateOptionsEmulatorShowSpeed(CCmdUI * pCmdUI)735 void MainWnd::OnUpdateOptionsEmulatorShowSpeed(CCmdUI *pCmdUI)
736 {
737 switch(pCmdUI->m_nID) {
738 case ID_OPTIONS_EMULATOR_SHOWSPEED_NONE:
739 pCmdUI->SetCheck(theApp.showSpeed == 0);
740 break;
741 case ID_OPTIONS_EMULATOR_SHOWSPEED_PERCENTAGE:
742 pCmdUI->SetCheck(theApp.showSpeed == 1);
743 break;
744 case ID_OPTIONS_EMULATOR_SHOWSPEED_DETAILED:
745 pCmdUI->SetCheck(theApp.showSpeed == 2);
746 break;
747 case ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT:
748 pCmdUI->SetCheck(theApp.showSpeedTransparent);
749 break;
750 }
751 }
752
OnOptionsEmulatorSavetypeAutomatic()753 void MainWnd::OnOptionsEmulatorSavetypeAutomatic()
754 {
755 theApp.winSaveType = 0;
756 }
757
OnUpdateOptionsEmulatorSavetypeAutomatic(CCmdUI * pCmdUI)758 void MainWnd::OnUpdateOptionsEmulatorSavetypeAutomatic(CCmdUI* pCmdUI)
759 {
760 pCmdUI->SetCheck(theApp.winSaveType == 0);
761 }
762
OnOptionsEmulatorSavetypeEeprom()763 void MainWnd::OnOptionsEmulatorSavetypeEeprom()
764 {
765 theApp.winSaveType = 1;
766 }
767
OnUpdateOptionsEmulatorSavetypeEeprom(CCmdUI * pCmdUI)768 void MainWnd::OnUpdateOptionsEmulatorSavetypeEeprom(CCmdUI* pCmdUI)
769 {
770 pCmdUI->SetCheck(theApp.winSaveType == 1);
771 }
772
OnOptionsEmulatorSavetypeSram()773 void MainWnd::OnOptionsEmulatorSavetypeSram()
774 {
775 theApp.winSaveType = 2;
776 }
777
OnUpdateOptionsEmulatorSavetypeSram(CCmdUI * pCmdUI)778 void MainWnd::OnUpdateOptionsEmulatorSavetypeSram(CCmdUI* pCmdUI)
779 {
780 pCmdUI->SetCheck(theApp.winSaveType == 2);
781 }
782
OnOptionsEmulatorSavetypeFlash()783 void MainWnd::OnOptionsEmulatorSavetypeFlash()
784 {
785 theApp.winSaveType = 3;
786 }
787
OnUpdateOptionsEmulatorSavetypeFlash(CCmdUI * pCmdUI)788 void MainWnd::OnUpdateOptionsEmulatorSavetypeFlash(CCmdUI* pCmdUI)
789 {
790 pCmdUI->SetCheck(theApp.winSaveType == 3);
791 }
792
OnOptionsEmulatorSavetypeEepromsensor()793 void MainWnd::OnOptionsEmulatorSavetypeEepromsensor()
794 {
795 theApp.winSaveType = 4;
796 }
797
OnUpdateOptionsEmulatorSavetypeEepromsensor(CCmdUI * pCmdUI)798 void MainWnd::OnUpdateOptionsEmulatorSavetypeEepromsensor(CCmdUI* pCmdUI)
799 {
800 pCmdUI->SetCheck(theApp.winSaveType == 4);
801 }
802
OnOptionsEmulatorSavetypeNone()803 void MainWnd::OnOptionsEmulatorSavetypeNone()
804 {
805 theApp.winSaveType = 5;
806 }
807
OnUpdateOptionsEmulatorSavetypeNone(CCmdUI * pCmdUI)808 void MainWnd::OnUpdateOptionsEmulatorSavetypeNone(CCmdUI* pCmdUI)
809 {
810 pCmdUI->SetCheck(theApp.winSaveType == 5);
811 }
812
OnOptionsEmulatorSavetypeFlash512k()813 void MainWnd::OnOptionsEmulatorSavetypeFlash512k()
814 {
815 flashSetSize(0x10000);
816 theApp.winFlashSize = 0x10000;
817 }
818
OnUpdateOptionsEmulatorSavetypeFlash512k(CCmdUI * pCmdUI)819 void MainWnd::OnUpdateOptionsEmulatorSavetypeFlash512k(CCmdUI* pCmdUI)
820 {
821 pCmdUI->SetCheck(theApp.winFlashSize == 0x10000);
822 }
823
OnOptionsEmulatorSavetypeFlash1m()824 void MainWnd::OnOptionsEmulatorSavetypeFlash1m()
825 {
826 flashSetSize(0x20000);
827 theApp.winFlashSize = 0x20000;
828 }
829
OnUpdateOptionsEmulatorSavetypeFlash1m(CCmdUI * pCmdUI)830 void MainWnd::OnUpdateOptionsEmulatorSavetypeFlash1m(CCmdUI* pCmdUI)
831 {
832 pCmdUI->SetCheck(theApp.winFlashSize == 0x20000);
833 }
834
OnOptionsEmulatorUsebiosfile()835 void MainWnd::OnOptionsEmulatorUsebiosfile()
836 {
837 if(!theApp.biosFileName.IsEmpty())
838 theApp.useBiosFile = !theApp.useBiosFile;
839 }
840
OnUpdateOptionsEmulatorUsebiosfile(CCmdUI * pCmdUI)841 void MainWnd::OnUpdateOptionsEmulatorUsebiosfile(CCmdUI* pCmdUI)
842 {
843 pCmdUI->SetCheck(theApp.useBiosFile);
844 pCmdUI->Enable(!theApp.biosFileName.IsEmpty());
845 }
846
OnOptionsEmulatorSkipbios()847 void MainWnd::OnOptionsEmulatorSkipbios()
848 {
849 theApp.skipBiosFile = !theApp.skipBiosFile;
850 }
851
OnUpdateOptionsEmulatorSkipbios(CCmdUI * pCmdUI)852 void MainWnd::OnUpdateOptionsEmulatorSkipbios(CCmdUI* pCmdUI)
853 {
854 pCmdUI->SetCheck(theApp.skipBiosFile);
855 }
856
OnOptionsEmulatorSelectbiosfile()857 void MainWnd::OnOptionsEmulatorSelectbiosfile()
858 {
859 theApp.winCheckFullscreen();
860 LPCTSTR exts[] = { "" };
861 CString filter = winLoadFilter(IDS_FILTER_BIOS);
862 CString title = winResLoadString(IDS_SELECT_BIOS_FILE);
863
864 FileDlg dlg(this,
865 theApp.biosFileName,
866 filter,
867 0,
868 "BIOS",
869 exts,
870 "",
871 title,
872 false);
873
874 if(dlg.DoModal() == IDOK) {
875 theApp.biosFileName = dlg.GetPathName();
876 }
877 }
878
OnOptionsEmulatorPngformat()879 void MainWnd::OnOptionsEmulatorPngformat()
880 {
881 theApp.captureFormat = 0;
882 }
883
OnUpdateOptionsEmulatorPngformat(CCmdUI * pCmdUI)884 void MainWnd::OnUpdateOptionsEmulatorPngformat(CCmdUI* pCmdUI)
885 {
886 pCmdUI->SetCheck(theApp.captureFormat == 0);
887 }
888
OnOptionsEmulatorBmpformat()889 void MainWnd::OnOptionsEmulatorBmpformat()
890 {
891 theApp.captureFormat = 1;
892 }
893
OnUpdateOptionsEmulatorBmpformat(CCmdUI * pCmdUI)894 void MainWnd::OnUpdateOptionsEmulatorBmpformat(CCmdUI* pCmdUI)
895 {
896 pCmdUI->SetCheck(theApp.captureFormat == 1);
897 }
898
OnOptionsSoundOff()899 void MainWnd::OnOptionsSoundOff()
900 {
901 soundOffFlag = true;
902 soundShutdown();
903 }
904
OnUpdateOptionsSoundOff(CCmdUI * pCmdUI)905 void MainWnd::OnUpdateOptionsSoundOff(CCmdUI* pCmdUI)
906 {
907 pCmdUI->SetCheck(soundOffFlag);
908 }
909
OnOptionsSoundMute()910 void MainWnd::OnOptionsSoundMute()
911 {
912 soundDisable(0x30f);
913 }
914
OnUpdateOptionsSoundMute(CCmdUI * pCmdUI)915 void MainWnd::OnUpdateOptionsSoundMute(CCmdUI* pCmdUI)
916 {
917 int active = soundGetEnable() & 0x30f;
918 pCmdUI->SetCheck(active == 0);
919 }
920
OnOptionsSoundOn()921 void MainWnd::OnOptionsSoundOn()
922 {
923 if(soundOffFlag) {
924 soundOffFlag = false;
925 soundInit();
926 }
927 soundEnable(0x30f);
928 }
929
OnUpdateOptionsSoundOn(CCmdUI * pCmdUI)930 void MainWnd::OnUpdateOptionsSoundOn(CCmdUI* pCmdUI)
931 {
932 int active = soundGetEnable() & 0x30f;
933 pCmdUI->SetCheck(active != 0 && !soundOffFlag);
934 }
935
OnOptionsSoundUseoldsynchronization()936 void MainWnd::OnOptionsSoundUseoldsynchronization()
937 {
938 theApp.useOldSync = !theApp.useOldSync;
939 systemMessage(IDS_SETTING_WILL_BE_EFFECTIVE,
940 "Setting will be effective the next time you start the emulator");
941 }
942
OnUpdateOptionsSoundUseoldsynchronization(CCmdUI * pCmdUI)943 void MainWnd::OnUpdateOptionsSoundUseoldsynchronization(CCmdUI* pCmdUI)
944 {
945 pCmdUI->SetCheck(theApp.useOldSync);
946 }
947
OnOptionsSoundEcho()948 void MainWnd::OnOptionsSoundEcho()
949 {
950 soundEcho = !soundEcho;
951 }
952
OnUpdateOptionsSoundEcho(CCmdUI * pCmdUI)953 void MainWnd::OnUpdateOptionsSoundEcho(CCmdUI* pCmdUI)
954 {
955 pCmdUI->SetCheck(soundEcho);
956 }
957
OnOptionsSoundLowpassfilter()958 void MainWnd::OnOptionsSoundLowpassfilter()
959 {
960 soundLowPass = !soundLowPass;
961 }
962
OnUpdateOptionsSoundLowpassfilter(CCmdUI * pCmdUI)963 void MainWnd::OnUpdateOptionsSoundLowpassfilter(CCmdUI* pCmdUI)
964 {
965 pCmdUI->SetCheck(soundLowPass);
966 }
967
OnOptionsSoundReversestereo()968 void MainWnd::OnOptionsSoundReversestereo()
969 {
970 soundReverse = !soundReverse;
971 }
972
OnUpdateOptionsSoundReversestereo(CCmdUI * pCmdUI)973 void MainWnd::OnUpdateOptionsSoundReversestereo(CCmdUI* pCmdUI)
974 {
975 pCmdUI->SetCheck(soundReverse);
976 }
977
OnOptionsSound11khz()978 void MainWnd::OnOptionsSound11khz()
979 {
980 if(theApp.cartridgeType == 0)
981 soundSetQuality(4);
982 else
983 gbSoundSetQuality(4);
984 }
985
OnUpdateOptionsSound11khz(CCmdUI * pCmdUI)986 void MainWnd::OnUpdateOptionsSound11khz(CCmdUI* pCmdUI)
987 {
988 pCmdUI->SetCheck(soundQuality == 4);
989 }
990
OnOptionsSound22khz()991 void MainWnd::OnOptionsSound22khz()
992 {
993 if(theApp.cartridgeType == 0)
994 soundSetQuality(2);
995 else
996 gbSoundSetQuality(2);
997 }
998
OnUpdateOptionsSound22khz(CCmdUI * pCmdUI)999 void MainWnd::OnUpdateOptionsSound22khz(CCmdUI* pCmdUI)
1000 {
1001 pCmdUI->SetCheck(soundQuality == 2);
1002 }
1003
OnOptionsSound44khz()1004 void MainWnd::OnOptionsSound44khz()
1005 {
1006 if(theApp.cartridgeType == 0)
1007 soundSetQuality(1);
1008 else
1009 gbSoundSetQuality(1);
1010 }
1011
OnUpdateOptionsSound44khz(CCmdUI * pCmdUI)1012 void MainWnd::OnUpdateOptionsSound44khz(CCmdUI* pCmdUI)
1013 {
1014 pCmdUI->SetCheck(soundQuality == 1);
1015 }
1016
OnOptionsSoundVolume(UINT nID)1017 BOOL MainWnd::OnOptionsSoundVolume(UINT nID)
1018 {
1019 soundVolume = nID - ID_OPTIONS_SOUND_VOLUME_1X;
1020 return TRUE;
1021 }
1022
OnUpdateOptionsSoundVolume(CCmdUI * pCmdUI)1023 void MainWnd::OnUpdateOptionsSoundVolume(CCmdUI *pCmdUI)
1024 {
1025 pCmdUI->SetCheck(soundVolume == (int)(pCmdUI->m_nID - ID_OPTIONS_SOUND_VOLUME_1X));
1026 }
1027
1028
OnOptionsSoundVolume25x()1029 void MainWnd::OnOptionsSoundVolume25x()
1030 {
1031 soundVolume = 4;
1032 }
1033
OnUpdateOptionsSoundVolume25x(CCmdUI * pCmdUI)1034 void MainWnd::OnUpdateOptionsSoundVolume25x(CCmdUI* pCmdUI)
1035 {
1036 pCmdUI->SetCheck(soundVolume == 4);
1037 }
1038
OnOptionsSoundVolume5x()1039 void MainWnd::OnOptionsSoundVolume5x()
1040 {
1041 soundVolume = 5;
1042 }
1043
OnUpdateOptionsSoundVolume5x(CCmdUI * pCmdUI)1044 void MainWnd::OnUpdateOptionsSoundVolume5x(CCmdUI* pCmdUI)
1045 {
1046 pCmdUI->SetCheck(soundVolume == 5);
1047 }
1048
updateSoundChannels(UINT id)1049 void MainWnd::updateSoundChannels(UINT id)
1050 {
1051 int flag = 0;
1052
1053 if(id == ID_OPTIONS_SOUND_CHANNEL1)
1054 flag = 1;
1055
1056 if(id == ID_OPTIONS_SOUND_CHANNEL2)
1057 flag = 2;
1058
1059 if(id == ID_OPTIONS_SOUND_CHANNEL3)
1060 flag = 4;
1061
1062 if(id == ID_OPTIONS_SOUND_CHANNEL4)
1063 flag = 8;
1064
1065 if(id == ID_OPTIONS_SOUND_DIRECTSOUNDA)
1066 flag = 256;
1067
1068 if(id == ID_OPTIONS_SOUND_DIRECTSOUNDB)
1069 flag = 512;
1070
1071 int active = soundGetEnable() & 0x30f;
1072
1073 if(active & flag)
1074 active &= (~flag);
1075 else
1076 active |= flag;
1077
1078 soundEnable(active);
1079 soundDisable((~active)&0x30f);
1080 }
1081
OnOptionsSoundChannel1()1082 void MainWnd::OnOptionsSoundChannel1()
1083 {
1084 updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL1);
1085 }
1086
OnUpdateOptionsSoundChannel1(CCmdUI * pCmdUI)1087 void MainWnd::OnUpdateOptionsSoundChannel1(CCmdUI* pCmdUI)
1088 {
1089 pCmdUI->SetCheck(soundGetEnable() & 1);
1090 }
1091
OnOptionsSoundChannel2()1092 void MainWnd::OnOptionsSoundChannel2()
1093 {
1094 updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL2);
1095 }
1096
OnUpdateOptionsSoundChannel2(CCmdUI * pCmdUI)1097 void MainWnd::OnUpdateOptionsSoundChannel2(CCmdUI* pCmdUI)
1098 {
1099 pCmdUI->SetCheck(soundGetEnable() & 2);
1100 }
1101
OnOptionsSoundChannel3()1102 void MainWnd::OnOptionsSoundChannel3()
1103 {
1104 updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL3);
1105 }
1106
OnUpdateOptionsSoundChannel3(CCmdUI * pCmdUI)1107 void MainWnd::OnUpdateOptionsSoundChannel3(CCmdUI* pCmdUI)
1108 {
1109 pCmdUI->SetCheck(soundGetEnable() & 4);
1110 }
1111
OnOptionsSoundChannel4()1112 void MainWnd::OnOptionsSoundChannel4()
1113 {
1114 updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL4);
1115 }
1116
OnUpdateOptionsSoundChannel4(CCmdUI * pCmdUI)1117 void MainWnd::OnUpdateOptionsSoundChannel4(CCmdUI* pCmdUI)
1118 {
1119 pCmdUI->SetCheck(soundGetEnable() & 8);
1120 }
1121
OnOptionsSoundDirectsounda()1122 void MainWnd::OnOptionsSoundDirectsounda()
1123 {
1124 updateSoundChannels(ID_OPTIONS_SOUND_DIRECTSOUNDA);
1125 }
1126
OnUpdateOptionsSoundDirectsounda(CCmdUI * pCmdUI)1127 void MainWnd::OnUpdateOptionsSoundDirectsounda(CCmdUI* pCmdUI)
1128 {
1129 pCmdUI->SetCheck(soundGetEnable() & 256);
1130 pCmdUI->Enable(theApp.cartridgeType == 0);
1131 }
1132
OnOptionsSoundDirectsoundb()1133 void MainWnd::OnOptionsSoundDirectsoundb()
1134 {
1135 updateSoundChannels(ID_OPTIONS_SOUND_DIRECTSOUNDB);
1136 }
1137
OnUpdateOptionsSoundDirectsoundb(CCmdUI * pCmdUI)1138 void MainWnd::OnUpdateOptionsSoundDirectsoundb(CCmdUI* pCmdUI)
1139 {
1140 pCmdUI->SetCheck(soundGetEnable() & 512);
1141 pCmdUI->Enable(theApp.cartridgeType == 0);
1142 }
1143
OnOptionsGameboyBorder()1144 void MainWnd::OnOptionsGameboyBorder()
1145 {
1146 theApp.winGbBorderOn = !theApp.winGbBorderOn;
1147 gbBorderOn = theApp.winGbBorderOn;
1148 if(emulating && theApp.cartridgeType == 1 && gbBorderOn) {
1149 gbSgbRenderBorder();
1150 }
1151 theApp.updateWindowSize(theApp.videoOption);
1152 }
1153
OnUpdateOptionsGameboyBorder(CCmdUI * pCmdUI)1154 void MainWnd::OnUpdateOptionsGameboyBorder(CCmdUI* pCmdUI)
1155 {
1156 pCmdUI->SetCheck(theApp.winGbBorderOn);
1157 }
1158
OnOptionsGameboyPrinter()1159 void MainWnd::OnOptionsGameboyPrinter()
1160 {
1161 theApp.winGbPrinterEnabled = !theApp.winGbPrinterEnabled;
1162 if(theApp.winGbPrinterEnabled)
1163 gbSerialFunction = gbPrinterSend;
1164 else
1165 gbSerialFunction = NULL;
1166 }
1167
OnUpdateOptionsGameboyPrinter(CCmdUI * pCmdUI)1168 void MainWnd::OnUpdateOptionsGameboyPrinter(CCmdUI* pCmdUI)
1169 {
1170 pCmdUI->SetCheck(gbSerialFunction == gbPrinterSend);
1171 }
1172
OnOptionsGameboyBorderAutomatic()1173 void MainWnd::OnOptionsGameboyBorderAutomatic()
1174 {
1175 gbBorderAutomatic = !gbBorderAutomatic;
1176 if(emulating && theApp.cartridgeType == 1 && gbBorderOn) {
1177 gbSgbRenderBorder();
1178 theApp.updateWindowSize(theApp.videoOption);
1179 }
1180 }
1181
OnUpdateOptionsGameboyBorderAutomatic(CCmdUI * pCmdUI)1182 void MainWnd::OnUpdateOptionsGameboyBorderAutomatic(CCmdUI* pCmdUI)
1183 {
1184 pCmdUI->SetCheck(gbBorderAutomatic);
1185 }
1186
OnOptionsGameboyAutomatic()1187 void MainWnd::OnOptionsGameboyAutomatic()
1188 {
1189 gbEmulatorType = 0;
1190 }
1191
OnUpdateOptionsGameboyAutomatic(CCmdUI * pCmdUI)1192 void MainWnd::OnUpdateOptionsGameboyAutomatic(CCmdUI* pCmdUI)
1193 {
1194 pCmdUI->SetCheck(gbEmulatorType == 0);
1195 }
1196
OnOptionsGameboyGba()1197 void MainWnd::OnOptionsGameboyGba()
1198 {
1199 gbEmulatorType = 4;
1200 }
1201
OnUpdateOptionsGameboyGba(CCmdUI * pCmdUI)1202 void MainWnd::OnUpdateOptionsGameboyGba(CCmdUI* pCmdUI)
1203 {
1204 pCmdUI->SetCheck(gbEmulatorType == 4);
1205 }
1206
OnOptionsGameboyCgb()1207 void MainWnd::OnOptionsGameboyCgb()
1208 {
1209 gbEmulatorType = 1;
1210 }
1211
OnUpdateOptionsGameboyCgb(CCmdUI * pCmdUI)1212 void MainWnd::OnUpdateOptionsGameboyCgb(CCmdUI* pCmdUI)
1213 {
1214 pCmdUI->SetCheck(gbEmulatorType == 1);
1215 }
1216
OnOptionsGameboySgb()1217 void MainWnd::OnOptionsGameboySgb()
1218 {
1219 gbEmulatorType = 2;
1220 }
1221
OnUpdateOptionsGameboySgb(CCmdUI * pCmdUI)1222 void MainWnd::OnUpdateOptionsGameboySgb(CCmdUI* pCmdUI)
1223 {
1224 pCmdUI->SetCheck(gbEmulatorType == 2);
1225 }
1226
OnOptionsGameboySgb2()1227 void MainWnd::OnOptionsGameboySgb2()
1228 {
1229 gbEmulatorType = 5;
1230 }
1231
OnUpdateOptionsGameboySgb2(CCmdUI * pCmdUI)1232 void MainWnd::OnUpdateOptionsGameboySgb2(CCmdUI* pCmdUI)
1233 {
1234 pCmdUI->SetCheck(gbEmulatorType == 5);
1235 }
1236
OnOptionsGameboyGb()1237 void MainWnd::OnOptionsGameboyGb()
1238 {
1239 gbEmulatorType = 3;
1240 }
1241
OnUpdateOptionsGameboyGb(CCmdUI * pCmdUI)1242 void MainWnd::OnUpdateOptionsGameboyGb(CCmdUI* pCmdUI)
1243 {
1244 pCmdUI->SetCheck(gbEmulatorType == 3);
1245 }
1246
OnOptionsGameboyRealcolors()1247 void MainWnd::OnOptionsGameboyRealcolors()
1248 {
1249 gbColorOption = 0;
1250 }
1251
OnUpdateOptionsGameboyRealcolors(CCmdUI * pCmdUI)1252 void MainWnd::OnUpdateOptionsGameboyRealcolors(CCmdUI* pCmdUI)
1253 {
1254 pCmdUI->SetCheck(gbColorOption == 0);
1255 }
1256
OnOptionsGameboyGameboycolors()1257 void MainWnd::OnOptionsGameboyGameboycolors()
1258 {
1259 gbColorOption = 1;
1260 }
1261
OnUpdateOptionsGameboyGameboycolors(CCmdUI * pCmdUI)1262 void MainWnd::OnUpdateOptionsGameboyGameboycolors(CCmdUI* pCmdUI)
1263 {
1264 pCmdUI->SetCheck(gbColorOption == 1);
1265 }
1266
1267
OnOptionsGameboyColors()1268 void MainWnd::OnOptionsGameboyColors()
1269 {
1270 theApp.winCheckFullscreen();
1271 GBColorDlg dlg;
1272 if(dlg.DoModal()) {
1273 gbPaletteOption = dlg.getWhich();
1274 memcpy(systemGbPalette, dlg.getColors(), 24*sizeof(u16));
1275 if(emulating && theApp.cartridgeType == 1) {
1276 memcpy(gbPalette, &systemGbPalette[dlg.getWhich()*8], 8*sizeof(u16));
1277 }
1278 }
1279 }
1280
OnOptionsPriority(UINT nID)1281 BOOL MainWnd::OnOptionsPriority(UINT nID)
1282 {
1283 switch(nID) {
1284 case ID_OPTIONS_PRIORITY_HIGHEST:
1285 theApp.threadPriority = 0;
1286 break;
1287 case ID_OPTIONS_PRIORITY_ABOVENORMAL:
1288 theApp.threadPriority = 1;
1289 break;
1290 case ID_OPTIONS_PRIORITY_NORMAL:
1291 theApp.threadPriority = 2;
1292 break;
1293 case ID_OPTIONS_PRIORITY_BELOWNORMAL:
1294 theApp.threadPriority = 3;
1295 break;
1296 default:
1297 return FALSE;
1298 }
1299 theApp.updatePriority();
1300
1301 return TRUE;
1302 }
1303
OnUpdateOptionsPriority(CCmdUI * pCmdUI)1304 void MainWnd::OnUpdateOptionsPriority(CCmdUI *pCmdUI)
1305 {
1306 switch(pCmdUI->m_nID) {
1307 case ID_OPTIONS_PRIORITY_HIGHEST:
1308 pCmdUI->SetCheck(theApp.threadPriority == 0);
1309 break;
1310 case ID_OPTIONS_PRIORITY_ABOVENORMAL:
1311 pCmdUI->SetCheck(theApp.threadPriority == 1);
1312 break;
1313 case ID_OPTIONS_PRIORITY_NORMAL:
1314 pCmdUI->SetCheck(theApp.threadPriority == 2);
1315 break;
1316 case ID_OPTIONS_PRIORITY_BELOWNORMAL:
1317 pCmdUI->SetCheck(theApp.threadPriority == 3);
1318 break;
1319 }
1320 }
1321
OnOptionsFilter(UINT nID)1322 BOOL MainWnd::OnOptionsFilter(UINT nID)
1323 {
1324 switch(nID) {
1325 case ID_OPTIONS_FILTER_NORMAL:
1326 theApp.filterType = 0;
1327 break;
1328 case ID_OPTIONS_FILTER_TVMODE:
1329 theApp.filterType = 1;
1330 break;
1331 case ID_OPTIONS_FILTER_2XSAI:
1332 theApp.filterType = 2;
1333 break;
1334 case ID_OPTIONS_FILTER_SUPER2XSAI:
1335 theApp.filterType = 3;
1336 break;
1337 case ID_OPTIONS_FILTER_SUPEREAGLE:
1338 theApp.filterType = 4;
1339 break;
1340 case ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL:
1341 theApp.filterType = 5;
1342 break;
1343 case ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL:
1344 theApp.filterType = 6;
1345 break;
1346 case ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X:
1347 theApp.filterType = 7;
1348 break;
1349 case ID_OPTIONS_FILTER16BIT_SIMPLE2X:
1350 theApp.filterType = 8;
1351 break;
1352 case ID_OPTIONS_FILTER_BILINEAR:
1353 theApp.filterType = 9;
1354 break;
1355 case ID_OPTIONS_FILTER_BILINEARPLUS:
1356 theApp.filterType = 10;
1357 break;
1358 case ID_OPTIONS_FILTER_SCANLINES:
1359 theApp.filterType = 11;
1360 break;
1361 case ID_OPTIONS_FILTER_HQ2X:
1362 theApp.filterType = 12;
1363 break;
1364 case ID_OPTIONS_FILTER_LQ2X:
1365 theApp.filterType = 13;
1366 break;
1367 default:
1368 return FALSE;
1369 }
1370 theApp.updateFilter();
1371 return TRUE;
1372 }
1373
OnUpdateOptionsFilter(CCmdUI * pCmdUI)1374 void MainWnd::OnUpdateOptionsFilter(CCmdUI *pCmdUI)
1375 {
1376 pCmdUI->Enable(systemColorDepth == 16 || systemColorDepth == 32);
1377 switch(pCmdUI->m_nID) {
1378 case ID_OPTIONS_FILTER_NORMAL:
1379 pCmdUI->SetCheck(theApp.filterType == 0);
1380 break;
1381 case ID_OPTIONS_FILTER_TVMODE:
1382 pCmdUI->SetCheck(theApp.filterType == 1);
1383 break;
1384 case ID_OPTIONS_FILTER_2XSAI:
1385 pCmdUI->SetCheck(theApp.filterType == 2);
1386 break;
1387 case ID_OPTIONS_FILTER_SUPER2XSAI:
1388 pCmdUI->SetCheck(theApp.filterType == 3);
1389 break;
1390 case ID_OPTIONS_FILTER_SUPEREAGLE:
1391 pCmdUI->SetCheck(theApp.filterType == 4);
1392 break;
1393 case ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL:
1394 pCmdUI->SetCheck(theApp.filterType == 5);
1395 break;
1396 case ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL:
1397 pCmdUI->SetCheck(theApp.filterType == 6);
1398 break;
1399 case ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X:
1400 pCmdUI->SetCheck(theApp.filterType == 7);
1401 break;
1402 case ID_OPTIONS_FILTER16BIT_SIMPLE2X:
1403 pCmdUI->SetCheck(theApp.filterType == 8);
1404 break;
1405 case ID_OPTIONS_FILTER_BILINEAR:
1406 pCmdUI->SetCheck(theApp.filterType == 9);
1407 break;
1408 case ID_OPTIONS_FILTER_BILINEARPLUS:
1409 pCmdUI->SetCheck(theApp.filterType == 10);
1410 break;
1411 case ID_OPTIONS_FILTER_SCANLINES:
1412 pCmdUI->SetCheck(theApp.filterType == 11);
1413 break;
1414 case ID_OPTIONS_FILTER_HQ2X:
1415 pCmdUI->SetCheck(theApp.filterType == 12);
1416 break;
1417 case ID_OPTIONS_FILTER_LQ2X:
1418 pCmdUI->SetCheck(theApp.filterType == 13);
1419 break;
1420 }
1421 }
1422
OnOptionsFilterIFB(UINT nID)1423 BOOL MainWnd::OnOptionsFilterIFB(UINT nID)
1424 {
1425 switch(nID) {
1426 case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE:
1427 theApp.ifbType = 0;
1428 break;
1429 case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_MOTIONBLUR:
1430 theApp.ifbType = 1;
1431 break;
1432 case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART:
1433 theApp.ifbType = 2;
1434 break;
1435 default:
1436 return FALSE;
1437 }
1438 theApp.updateIFB();
1439 return TRUE;
1440 }
1441
OnUpdateOptionsFilterIFB(CCmdUI * pCmdUI)1442 void MainWnd::OnUpdateOptionsFilterIFB(CCmdUI *pCmdUI)
1443 {
1444 switch(pCmdUI->m_nID) {
1445 case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE:
1446 pCmdUI->SetCheck(theApp.ifbType == 0);
1447 break;
1448 case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_MOTIONBLUR:
1449 pCmdUI->SetCheck(theApp.ifbType == 1);
1450 break;
1451 case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART:
1452 pCmdUI->SetCheck(theApp.ifbType == 2);
1453 break;
1454 }
1455 }
1456
OnOptionsFilterDisablemmx()1457 void MainWnd::OnOptionsFilterDisablemmx()
1458 {
1459 theApp.disableMMX = !theApp.disableMMX;
1460 if(!theApp.disableMMX)
1461 cpu_mmx = theApp.detectMMX();
1462 else
1463 cpu_mmx = 0;
1464 }
1465
OnUpdateOptionsFilterDisablemmx(CCmdUI * pCmdUI)1466 void MainWnd::OnUpdateOptionsFilterDisablemmx(CCmdUI* pCmdUI)
1467 {
1468 pCmdUI->SetCheck(theApp.disableMMX);
1469 }
1470
1471
OnOptionsLanguageSystem()1472 void MainWnd::OnOptionsLanguageSystem()
1473 {
1474 theApp.winSetLanguageOption(0, false);
1475 theApp.winAccelMgr.UpdateMenu(theApp.menu);
1476 }
1477
OnUpdateOptionsLanguageSystem(CCmdUI * pCmdUI)1478 void MainWnd::OnUpdateOptionsLanguageSystem(CCmdUI* pCmdUI)
1479 {
1480 pCmdUI->SetCheck(theApp.languageOption == 0);
1481 }
1482
OnOptionsLanguageEnglish()1483 void MainWnd::OnOptionsLanguageEnglish()
1484 {
1485 theApp.winSetLanguageOption(1, false);
1486 theApp.winAccelMgr.UpdateMenu(theApp.menu);
1487 }
1488
OnUpdateOptionsLanguageEnglish(CCmdUI * pCmdUI)1489 void MainWnd::OnUpdateOptionsLanguageEnglish(CCmdUI* pCmdUI)
1490 {
1491 pCmdUI->SetCheck(theApp.languageOption == 1);
1492 }
1493
OnOptionsLanguageOther()1494 void MainWnd::OnOptionsLanguageOther()
1495 {
1496 theApp.winCheckFullscreen();
1497 theApp.winSetLanguageOption(2, false);
1498 theApp.winAccelMgr.UpdateMenu(theApp.menu);
1499 }
1500
OnUpdateOptionsLanguageOther(CCmdUI * pCmdUI)1501 void MainWnd::OnUpdateOptionsLanguageOther(CCmdUI* pCmdUI)
1502 {
1503 pCmdUI->SetCheck(theApp.languageOption == 2);
1504 }
1505
1506
OnOptionsJoypadConfigure1()1507 void MainWnd::OnOptionsJoypadConfigure1()
1508 {
1509 theApp.winCheckFullscreen();
1510 JoypadConfig dlg(0);
1511 dlg.DoModal();
1512 }
1513
OnUpdateOptionsJoypadConfigure1(CCmdUI * pCmdUI)1514 void MainWnd::OnUpdateOptionsJoypadConfigure1(CCmdUI* pCmdUI)
1515 {
1516 pCmdUI->Enable(theApp.videoOption != VIDEO_320x240);
1517 }
1518
OnOptionsJoypadConfigure2()1519 void MainWnd::OnOptionsJoypadConfigure2()
1520 {
1521 theApp.winCheckFullscreen();
1522 JoypadConfig dlg(1);
1523 dlg.DoModal();
1524 }
1525
OnUpdateOptionsJoypadConfigure2(CCmdUI * pCmdUI)1526 void MainWnd::OnUpdateOptionsJoypadConfigure2(CCmdUI* pCmdUI)
1527 {
1528 pCmdUI->Enable(theApp.videoOption != VIDEO_320x240);
1529 }
1530
OnOptionsJoypadConfigure3()1531 void MainWnd::OnOptionsJoypadConfigure3()
1532 {
1533 theApp.winCheckFullscreen();
1534 JoypadConfig dlg(2);
1535 dlg.DoModal();
1536 }
1537
OnUpdateOptionsJoypadConfigure3(CCmdUI * pCmdUI)1538 void MainWnd::OnUpdateOptionsJoypadConfigure3(CCmdUI* pCmdUI)
1539 {
1540 pCmdUI->Enable(theApp.videoOption != VIDEO_320x240);
1541 }
1542
OnOptionsJoypadConfigure4()1543 void MainWnd::OnOptionsJoypadConfigure4()
1544 {
1545 theApp.winCheckFullscreen();
1546 JoypadConfig dlg(3);
1547 dlg.DoModal();
1548 }
1549
OnUpdateOptionsJoypadConfigure4(CCmdUI * pCmdUI)1550 void MainWnd::OnUpdateOptionsJoypadConfigure4(CCmdUI* pCmdUI)
1551 {
1552 pCmdUI->Enable(theApp.videoOption != VIDEO_320x240);
1553 }
1554
OnOptionsJoypadDefault(UINT nID)1555 BOOL MainWnd::OnOptionsJoypadDefault(UINT nID)
1556 {
1557 theApp.joypadDefault = nID - ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1;
1558 return TRUE;
1559 }
1560
OnUpdateOptionsJoypadDefault(CCmdUI * pCmdUI)1561 void MainWnd::OnUpdateOptionsJoypadDefault(CCmdUI *pCmdUI)
1562 {
1563 pCmdUI->SetCheck(theApp.joypadDefault == (int)(pCmdUI->m_nID - ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1));
1564 }
1565
OnOptionsJoypadMotionconfigure()1566 void MainWnd::OnOptionsJoypadMotionconfigure()
1567 {
1568 theApp.winCheckFullscreen();
1569 MotionConfig dlg;
1570 dlg.DoModal();
1571 }
1572
OnUpdateOptionsJoypadMotionconfigure(CCmdUI * pCmdUI)1573 void MainWnd::OnUpdateOptionsJoypadMotionconfigure(CCmdUI* pCmdUI)
1574 {
1575 pCmdUI->Enable(theApp.videoOption != VIDEO_320x240);
1576 }
1577
OnOptionsJoypadAutofire(UINT nID)1578 BOOL MainWnd::OnOptionsJoypadAutofire(UINT nID)
1579 {
1580 switch(nID) {
1581 case ID_OPTIONS_JOYPAD_AUTOFIRE_A:
1582 if(theApp.autoFire & 1) {
1583 theApp.autoFire &= ~1;
1584 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_A_DISABLED));
1585 } else {
1586 theApp.autoFire |= 1;
1587 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_A));
1588 }
1589 break;
1590 case ID_OPTIONS_JOYPAD_AUTOFIRE_B:
1591 if(theApp.autoFire & 2) {
1592 theApp.autoFire &= ~2;
1593 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_B_DISABLED));
1594 } else {
1595 theApp.autoFire |= 2;
1596 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_B));
1597 }
1598 break;
1599 case ID_OPTIONS_JOYPAD_AUTOFIRE_L:
1600 if(theApp.autoFire & 512) {
1601 theApp.autoFire &= ~512;
1602 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_L_DISABLED));
1603 } else {
1604 theApp.autoFire |= 512;
1605 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_L));
1606 }
1607 break;
1608 case ID_OPTIONS_JOYPAD_AUTOFIRE_R:
1609 if(theApp.autoFire & 256) {
1610 theApp.autoFire &= ~256;
1611 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_R_DISABLED));
1612 } else {
1613 theApp.autoFire |= 256;
1614 systemScreenMessage(winResLoadString(IDS_AUTOFIRE_R));
1615 }
1616 break;
1617 default:
1618 return FALSE;
1619 }
1620 return TRUE;
1621 }
1622
OnUpdateOptionsJoypadAutofire(CCmdUI * pCmdUI)1623 void MainWnd::OnUpdateOptionsJoypadAutofire(CCmdUI *pCmdUI)
1624 {
1625 bool check = true;
1626 switch(pCmdUI->m_nID) {
1627 case ID_OPTIONS_JOYPAD_AUTOFIRE_A:
1628 check = (theApp.autoFire & 1) != 0;
1629 break;
1630 case ID_OPTIONS_JOYPAD_AUTOFIRE_B:
1631 check = (theApp.autoFire & 2) != 0;
1632 break;
1633 case ID_OPTIONS_JOYPAD_AUTOFIRE_L:
1634 check = (theApp.autoFire & 512) != 0;
1635 break;
1636 case ID_OPTIONS_JOYPAD_AUTOFIRE_R:
1637 check = (theApp.autoFire & 256) != 0;
1638 break;
1639 }
1640 pCmdUI->SetCheck(check);
1641 }
1642
OnConfirmMode(WPARAM,LPARAM)1643 LRESULT MainWnd::OnConfirmMode(WPARAM, LPARAM)
1644 {
1645 // we need to do this separately or the window will not have the right
1646 // parent. must be related to the way MFC does modal dialogs
1647 winConfirmMode();
1648 return 0;
1649 }
1650
winConfirmMode()1651 void MainWnd::winConfirmMode()
1652 {
1653 if(theApp.renderMethod == DIRECT_DRAW && theApp.videoOption > VIDEO_4X) {
1654 theApp.winCheckFullscreen();
1655 ModeConfirm dlg(theApp.m_pMainWnd);
1656
1657 if(!dlg.DoModal()) {
1658 theApp.updateVideoSize(ID_OPTIONS_VIDEO_X2);
1659 }
1660 }
1661 theApp.winAccelMgr.UpdateMenu(theApp.menu);
1662 }
1663
OnOptionsVideoFullscreenmaxscale()1664 void MainWnd::OnOptionsVideoFullscreenmaxscale()
1665 {
1666 MaxScale dlg;
1667
1668 theApp.winCheckFullscreen();
1669
1670 dlg.DoModal();
1671 }
1672