// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. // Copyright (C) 1999-2003 Forgotten // Copyright (C) 2004 Forgotten and the VBA development team // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or(at your option) // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "MainWnd.h" #include "Associate.h" #include "Directories.h" #include "FileDlg.h" #include "GBColorDlg.h" #include "Joypad.h" #include "MaxScale.h" #include "ModeConfirm.h" #include "Reg.h" #include "RewindInterval.h" #include "skin.h" #include "Throttle.h" #include "WinResUtil.h" #include "../System.h" #include "../agbprint.h" #include "../GBA.h" #include "../Globals.h" #include "../Sound.h" #include "../gb/GB.h" #include "../gb/gbGlobals.h" #include "../gb/gbPrinter.h" extern int emulating; #define VBA_CONFIRM_MODE WM_APP + 100 extern void CPUUpdateRenderBuffers(bool force); void MainWnd::OnOptionsFrameskipThrottleNothrottle() { theApp.throttle = 0; } void MainWnd::OnUpdateOptionsFrameskipThrottleNothrottle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.throttle == 0); } void MainWnd::OnOptionsFrameskipThrottle25() { theApp.throttle = 25; } void MainWnd::OnUpdateOptionsFrameskipThrottle25(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.throttle == 25); } void MainWnd::OnOptionsFrameskipThrottle50() { theApp.throttle = 50; } void MainWnd::OnUpdateOptionsFrameskipThrottle50(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.throttle == 50); } void MainWnd::OnOptionsFrameskipThrottle100() { theApp.throttle = 100; } void MainWnd::OnUpdateOptionsFrameskipThrottle100(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.throttle == 100); } void MainWnd::OnOptionsFrameskipThrottle150() { theApp.throttle = 150; } void MainWnd::OnUpdateOptionsFrameskipThrottle150(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.throttle == 150); } void MainWnd::OnOptionsFrameskipThrottle200() { theApp.throttle = 200; } void MainWnd::OnUpdateOptionsFrameskipThrottle200(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.throttle == 200); } void MainWnd::OnOptionsFrameskipThrottleOther() { Throttle dlg; int v = dlg.DoModal(); if(v) theApp.throttle = v; } void MainWnd::OnUpdateOptionsFrameskipThrottleOther(CCmdUI* pCmdUI) { int throttle = theApp.throttle; pCmdUI->SetCheck(throttle != 0 && throttle != 25 && throttle != 50 && throttle != 100 && throttle != 150 && throttle != 200); } void MainWnd::OnOptionsFrameskipAutomatic() { theApp.autoFrameSkip = !theApp.autoFrameSkip; if(!theApp.autoFrameSkip && emulating) theApp.updateFrameSkip(); } void MainWnd::OnUpdateOptionsFrameskipAutomatic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.autoFrameSkip); } BOOL MainWnd::OnOptionsFrameskip(UINT nID) { switch(nID) { case ID_OPTIONS_VIDEO_FRAMESKIP_0: case ID_OPTIONS_VIDEO_FRAMESKIP_1: case ID_OPTIONS_VIDEO_FRAMESKIP_2: case ID_OPTIONS_VIDEO_FRAMESKIP_3: case ID_OPTIONS_VIDEO_FRAMESKIP_4: case ID_OPTIONS_VIDEO_FRAMESKIP_5: if(theApp.cartridgeType == 0) { frameSkip = nID - ID_OPTIONS_VIDEO_FRAMESKIP_0; } else { gbFrameSkip = nID - ID_OPTIONS_VIDEO_FRAMESKIP_0; } if(emulating) theApp.updateFrameSkip(); return TRUE; break; case ID_OPTIONS_VIDEO_FRAMESKIP_6: case ID_OPTIONS_VIDEO_FRAMESKIP_7: case ID_OPTIONS_VIDEO_FRAMESKIP_8: case ID_OPTIONS_VIDEO_FRAMESKIP_9: if(theApp.cartridgeType == 0) { frameSkip = 6 + nID - ID_OPTIONS_VIDEO_FRAMESKIP_6; } else { gbFrameSkip = 6 + nID - ID_OPTIONS_VIDEO_FRAMESKIP_6; } if(emulating) theApp.updateFrameSkip(); return TRUE; break; } return FALSE; } void MainWnd::OnUpdateOptionsVideoFrameskip0(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 0 : gbFrameSkip == 0); } void MainWnd::OnUpdateOptionsVideoFrameskip1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 1 : gbFrameSkip == 1); } void MainWnd::OnUpdateOptionsVideoFrameskip2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 2 : gbFrameSkip == 2); } void MainWnd::OnUpdateOptionsVideoFrameskip3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 3 : gbFrameSkip == 3); } void MainWnd::OnUpdateOptionsVideoFrameskip4(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 4 : gbFrameSkip == 4); } void MainWnd::OnUpdateOptionsVideoFrameskip5(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 5 : gbFrameSkip == 5); } void MainWnd::OnUpdateOptionsVideoFrameskip6(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 6 : gbFrameSkip == 6); } void MainWnd::OnUpdateOptionsVideoFrameskip7(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 7 : gbFrameSkip == 7); } void MainWnd::OnUpdateOptionsVideoFrameskip8(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 8 : gbFrameSkip == 8); } void MainWnd::OnUpdateOptionsVideoFrameskip9(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.cartridgeType == 0 ? frameSkip == 9 : gbFrameSkip == 9); } void MainWnd::OnOptionsVideoVsync() { theApp.vsync = !theApp.vsync; } void MainWnd::OnUpdateOptionsVideoVsync(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.vsync); } void MainWnd::OnUpdateOptionsVideoX1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.videoOption == VIDEO_1X); } void MainWnd::OnUpdateOptionsVideoX2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.videoOption == VIDEO_2X); } void MainWnd::OnUpdateOptionsVideoX3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.videoOption == VIDEO_3X); } void MainWnd::OnUpdateOptionsVideoX4(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.videoOption == VIDEO_4X); } void MainWnd::OnUpdateOptionsVideoFullscreen320x240(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.mode320Available); pCmdUI->SetCheck(theApp.videoOption == VIDEO_320x240); } void MainWnd::OnUpdateOptionsVideoFullscreen640x480(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.mode640Available); pCmdUI->SetCheck(theApp.videoOption == VIDEO_640x480); } void MainWnd::OnUpdateOptionsVideoFullscreen800x600(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.mode800Available); pCmdUI->SetCheck(theApp.videoOption == VIDEO_800x600); } BOOL MainWnd::OnOptionVideoSize(UINT nID) { theApp.updateVideoSize(nID); theApp.m_pMainWnd->PostMessage(VBA_CONFIRM_MODE); return TRUE; } void MainWnd::OnOptionsVideoFullscreen320x240() { OnOptionVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN320X240); } void MainWnd::OnOptionsVideoFullscreen640x480() { OnOptionVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN640X480); } void MainWnd::OnOptionsVideoFullscreen800x600() { OnOptionVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN800X600); } void MainWnd::OnOptionsVideoFullscreen() { theApp.winCheckFullscreen(); GUID *pGUID = NULL; int size = theApp.display->selectFullScreenMode(&pGUID); if(size != -1) { int width = (size >> 12) & 4095; int height = (size & 4095); int colorDepth = (size >> 24); if(width != theApp.fsWidth || height != theApp.fsHeight || colorDepth != theApp.fsColorDepth || pGUID != theApp.pVideoDriverGUID || theApp.videoOption != VIDEO_OTHER) { theApp.fsForceChange = true; theApp.fsWidth = width; theApp.fsHeight = height; theApp.fsColorDepth = colorDepth; theApp.pVideoDriverGUID = pGUID; if(pGUID) { theApp.videoDriverGUID = *pGUID; regSetDwordValue("defaultVideoDriver", FALSE); regSetBinaryValue("videoDriverGUID", (char *)pGUID, sizeof(GUID)); } else { regSetDwordValue("defaultVideoDriver", TRUE); } theApp.updateVideoSize(ID_OPTIONS_VIDEO_FULLSCREEN); theApp.m_pMainWnd->PostMessage(VBA_CONFIRM_MODE); } } theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoFullscreen(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.videoOption == VIDEO_OTHER); } void MainWnd::OnOptionsVideoDisablesfx() { cpuDisableSfx = !cpuDisableSfx; if(emulating && theApp.cartridgeType == 0) CPUUpdateRender(); } void MainWnd::OnUpdateOptionsVideoDisablesfx(CCmdUI* pCmdUI) { pCmdUI->SetCheck(cpuDisableSfx); } void MainWnd::OnOptionsVideoFullscreenstretchtofit() { theApp.fullScreenStretch = !theApp.fullScreenStretch; theApp.updateWindowSize(theApp.videoOption); if(theApp.display) theApp.display->clear(); } void MainWnd::OnUpdateOptionsVideoFullscreenstretchtofit(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.fullScreenStretch); } BOOL MainWnd::OnVideoLayer(UINT nID) { layerSettings ^= 0x0100 << ((nID & 0xFFFF) - ID_OPTIONS_VIDEO_LAYERS_BG0); layerEnable = DISPCNT & layerSettings; CPUUpdateRenderBuffers(false); return TRUE; } void MainWnd::OnUpdateVideoLayer(CCmdUI *pCmdUI) { pCmdUI->SetCheck((layerSettings >> (8 + pCmdUI->m_nID - ID_OPTIONS_VIDEO_LAYERS_BG0)) & 1); switch(pCmdUI->m_nID) { case ID_OPTIONS_VIDEO_LAYERS_BG1: case ID_OPTIONS_VIDEO_LAYERS_BG2: case ID_OPTIONS_VIDEO_LAYERS_BG3: case ID_OPTIONS_VIDEO_LAYERS_WIN1: case ID_OPTIONS_VIDEO_LAYERS_OBJWIN: pCmdUI->Enable(theApp.cartridgeType == 0); break; } } void MainWnd::OnOptionsVideoRendermethodGdi() { theApp.renderMethod = GDI; theApp.updateRenderMethod(false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoRendermethodGdi(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.renderMethod == GDI); } void MainWnd::OnOptionsVideoRendermethodDirectdraw() { theApp.renderMethod = DIRECT_DRAW; theApp.updateRenderMethod(false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoRendermethodDirectdraw(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.renderMethod == DIRECT_DRAW); } void MainWnd::OnOptionsVideoRendermethodDirect3d() { theApp.renderMethod = DIRECT_3D; theApp.updateRenderMethod(false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoRendermethodDirect3d(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.renderMethod == DIRECT_3D); } void MainWnd::OnOptionsVideoRendermethodOpengl() { theApp.renderMethod = OPENGL; theApp.updateRenderMethod(false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoRendermethodOpengl(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.renderMethod == OPENGL); } void MainWnd::OnOptionsVideoTriplebuffering() { theApp.tripleBuffering = !theApp.tripleBuffering; } void MainWnd::OnUpdateOptionsVideoTriplebuffering(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.tripleBuffering); } void MainWnd::OnOptionsVideoDdrawemulationonly() { theApp.ddrawEmulationOnly = !theApp.ddrawEmulationOnly; } void MainWnd::OnUpdateOptionsVideoDdrawemulationonly(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.ddrawEmulationOnly); } void MainWnd::OnOptionsVideoDdrawusevideomemory() { theApp.ddrawUseVideoMemory = !theApp.ddrawUseVideoMemory; } void MainWnd::OnUpdateOptionsVideoDdrawusevideomemory(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.ddrawUseVideoMemory); } void MainWnd::OnOptionsVideoRenderoptionsD3dnofilter() { theApp.d3dFilter = 0; if(theApp.display) theApp.display->setOption("d3dFilter", 0); } void MainWnd::OnUpdateOptionsVideoRenderoptionsD3dnofilter(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.d3dFilter == 0); } void MainWnd::OnOptionsVideoRenderoptionsD3dbilinear() { theApp.d3dFilter = 1; if(theApp.display) theApp.display->setOption("d3dFilter", 1); } void MainWnd::OnUpdateOptionsVideoRenderoptionsD3dbilinear(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.d3dFilter == 1); } void MainWnd::OnOptionsVideoRenderoptionsGlnearest() { theApp.glFilter = 0; if(theApp.display) theApp.display->setOption("glFilter", 0); } void MainWnd::OnUpdateOptionsVideoRenderoptionsGlnearest(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.glFilter == 0); } void MainWnd::OnOptionsVideoRenderoptionsGlbilinear() { theApp.glFilter = 1; if(theApp.display) theApp.display->setOption("glFilter", 1); } void MainWnd::OnUpdateOptionsVideoRenderoptionsGlbilinear(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.glFilter == 1); } void MainWnd::OnOptionsVideoRenderoptionsGltriangle() { theApp.glType = 0; if(theApp.display) theApp.display->setOption("glType", 0); } void MainWnd::OnUpdateOptionsVideoRenderoptionsGltriangle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.glType == 0); } void MainWnd::OnOptionsVideoRenderoptionsGlquads() { theApp.glType = 1; if(theApp.display) theApp.display->setOption("glType", 1); } void MainWnd::OnUpdateOptionsVideoRenderoptionsGlquads(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.glType == 1); } void MainWnd::OnOptionsVideoRenderoptionsSelectskin() { LPCTSTR exts[] = {".ini" }; CString filter = winLoadFilter(IDS_FILTER_INI); CString title = winResLoadString(IDS_SELECT_SKIN_FILE); FileDlg dlg(this, theApp.skinName, filter, 0, "INI", exts, "", title, false); if(dlg.DoModal() == IDCANCEL) { return; } bool result = false; if(!theApp.skinEnabled) { theApp.skinEnabled = !theApp.skinEnabled; regSetDwordValue("skinEnabled", theApp.skinEnabled); } if(theApp.skin && theApp.skinEnabled) { delete theApp.skin; theApp.skin = NULL; } theApp.skinName = dlg.GetPathName(); theApp.winUpdateSkin(); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoRenderoptionsSelectskin(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.display && theApp.display->isSkinSupported() && theApp.videoOption <= VIDEO_4X); } void MainWnd::OnOptionsVideoRenderoptionsSkin() { theApp.skinEnabled = !theApp.skinEnabled; theApp.updateRenderMethod(true); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsVideoRenderoptionsSkin(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.skinEnabled); pCmdUI->Enable(theApp.display && theApp.display->isSkinSupported() && theApp.videoOption <= VIDEO_4X); } void MainWnd::OnOptionsEmulatorAssociate() { theApp.winCheckFullscreen(); Associate dlg; dlg.DoModal(); } void MainWnd::OnOptionsEmulatorDirectories() { theApp.winCheckFullscreen(); Directories dlg; dlg.DoModal(); } void MainWnd::OnOptionsEmulatorDisablestatusmessages() { theApp.disableStatusMessage = !theApp.disableStatusMessage; } void MainWnd::OnUpdateOptionsEmulatorDisablestatusmessages(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.disableStatusMessage); } void MainWnd::OnOptionsEmulatorSynchronize() { synchronize = !synchronize; } void MainWnd::OnUpdateOptionsEmulatorSynchronize(CCmdUI* pCmdUI) { pCmdUI->SetCheck(synchronize); } void MainWnd::OnOptionsEmulatorPausewheninactive() { theApp.pauseWhenInactive = !theApp.pauseWhenInactive; } void MainWnd::OnUpdateOptionsEmulatorPausewheninactive(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.pauseWhenInactive); } void MainWnd::OnOptionsEmulatorSpeeduptoggle() { theApp.speedupToggle = !theApp.speedupToggle; } void MainWnd::OnUpdateOptionsEmulatorSpeeduptoggle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.speedupToggle); } void MainWnd::OnOptionsEmulatorRemoveintrosgba() { // theApp.removeIntros = !theApp.removeIntros; } void MainWnd::OnUpdateOptionsEmulatorRemoveintrosgba(CCmdUI* pCmdUI) { pCmdUI->Enable(false); // pCmdUI->SetCheck(theApp.removeIntros); } void MainWnd::OnOptionsEmulatorAutomaticallyipspatch() { theApp.autoIPS = !theApp.autoIPS; } void MainWnd::OnUpdateOptionsEmulatorAutomaticallyipspatch(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.autoIPS); } void MainWnd::OnOptionsEmulatorAgbprint() { agbPrintEnable(!agbPrintIsEnabled()); } void MainWnd::OnUpdateOptionsEmulatorAgbprint(CCmdUI* pCmdUI) { pCmdUI->SetCheck(agbPrintIsEnabled()); } void MainWnd::OnOptionsEmulatorRealtimeclock() { theApp.winRtcEnable = !theApp.winRtcEnable; } void MainWnd::OnUpdateOptionsEmulatorRealtimeclock(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winRtcEnable); } void MainWnd::OnOptionsEmulatorAutohidemenu() { theApp.autoHideMenu = !theApp.autoHideMenu; } void MainWnd::OnUpdateOptionsEmulatorAutohidemenu(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.autoHideMenu); } void MainWnd::OnOptionsEmulatorRewindinterval() { RewindInterval dlg(theApp.rewindTimer/6); int v = dlg.DoModal(); if(v >= 0) { theApp.rewindTimer = v*6; // convert to a multiple of 10 frames regSetDwordValue("rewindTimer", v); if(v == 0) { if(theApp.rewindMemory) free(theApp.rewindMemory); theApp.rewindMemory = NULL; theApp.rewindCount = 0; theApp.rewindCounter = 0; theApp.rewindSaveNeeded = false; } else { if(theApp.rewindMemory == NULL) theApp.rewindMemory = (char *)malloc(8*REWIND_SIZE); } } } BOOL MainWnd::OnOptionsEmulatorShowSpeed(UINT nID) { switch(nID) { case ID_OPTIONS_EMULATOR_SHOWSPEED_NONE: theApp.showSpeed = 0; systemSetTitle("VisualBoyAdvance"); break; case ID_OPTIONS_EMULATOR_SHOWSPEED_PERCENTAGE: theApp.showSpeed = 1; break; case ID_OPTIONS_EMULATOR_SHOWSPEED_DETAILED: theApp.showSpeed = 2; break; case ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT: theApp.showSpeedTransparent = !theApp.showSpeedTransparent; break; default: return FALSE; } return TRUE; } void MainWnd::OnUpdateOptionsEmulatorShowSpeed(CCmdUI *pCmdUI) { switch(pCmdUI->m_nID) { case ID_OPTIONS_EMULATOR_SHOWSPEED_NONE: pCmdUI->SetCheck(theApp.showSpeed == 0); break; case ID_OPTIONS_EMULATOR_SHOWSPEED_PERCENTAGE: pCmdUI->SetCheck(theApp.showSpeed == 1); break; case ID_OPTIONS_EMULATOR_SHOWSPEED_DETAILED: pCmdUI->SetCheck(theApp.showSpeed == 2); break; case ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT: pCmdUI->SetCheck(theApp.showSpeedTransparent); break; } } void MainWnd::OnOptionsEmulatorSavetypeAutomatic() { theApp.winSaveType = 0; } void MainWnd::OnUpdateOptionsEmulatorSavetypeAutomatic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winSaveType == 0); } void MainWnd::OnOptionsEmulatorSavetypeEeprom() { theApp.winSaveType = 1; } void MainWnd::OnUpdateOptionsEmulatorSavetypeEeprom(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winSaveType == 1); } void MainWnd::OnOptionsEmulatorSavetypeSram() { theApp.winSaveType = 2; } void MainWnd::OnUpdateOptionsEmulatorSavetypeSram(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winSaveType == 2); } void MainWnd::OnOptionsEmulatorSavetypeFlash() { theApp.winSaveType = 3; } void MainWnd::OnUpdateOptionsEmulatorSavetypeFlash(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winSaveType == 3); } void MainWnd::OnOptionsEmulatorSavetypeEepromsensor() { theApp.winSaveType = 4; } void MainWnd::OnUpdateOptionsEmulatorSavetypeEepromsensor(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winSaveType == 4); } void MainWnd::OnOptionsEmulatorSavetypeNone() { theApp.winSaveType = 5; } void MainWnd::OnUpdateOptionsEmulatorSavetypeNone(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winSaveType == 5); } void MainWnd::OnOptionsEmulatorSavetypeFlash512k() { flashSetSize(0x10000); theApp.winFlashSize = 0x10000; } void MainWnd::OnUpdateOptionsEmulatorSavetypeFlash512k(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winFlashSize == 0x10000); } void MainWnd::OnOptionsEmulatorSavetypeFlash1m() { flashSetSize(0x20000); theApp.winFlashSize = 0x20000; } void MainWnd::OnUpdateOptionsEmulatorSavetypeFlash1m(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winFlashSize == 0x20000); } void MainWnd::OnOptionsEmulatorUsebiosfile() { if(!theApp.biosFileName.IsEmpty()) theApp.useBiosFile = !theApp.useBiosFile; } void MainWnd::OnUpdateOptionsEmulatorUsebiosfile(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.useBiosFile); pCmdUI->Enable(!theApp.biosFileName.IsEmpty()); } void MainWnd::OnOptionsEmulatorSkipbios() { theApp.skipBiosFile = !theApp.skipBiosFile; } void MainWnd::OnUpdateOptionsEmulatorSkipbios(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.skipBiosFile); } void MainWnd::OnOptionsEmulatorSelectbiosfile() { theApp.winCheckFullscreen(); LPCTSTR exts[] = { "" }; CString filter = winLoadFilter(IDS_FILTER_BIOS); CString title = winResLoadString(IDS_SELECT_BIOS_FILE); FileDlg dlg(this, theApp.biosFileName, filter, 0, "BIOS", exts, "", title, false); if(dlg.DoModal() == IDOK) { theApp.biosFileName = dlg.GetPathName(); } } void MainWnd::OnOptionsEmulatorPngformat() { theApp.captureFormat = 0; } void MainWnd::OnUpdateOptionsEmulatorPngformat(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.captureFormat == 0); } void MainWnd::OnOptionsEmulatorBmpformat() { theApp.captureFormat = 1; } void MainWnd::OnUpdateOptionsEmulatorBmpformat(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.captureFormat == 1); } void MainWnd::OnOptionsSoundOff() { soundOffFlag = true; soundShutdown(); } void MainWnd::OnUpdateOptionsSoundOff(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundOffFlag); } void MainWnd::OnOptionsSoundMute() { soundDisable(0x30f); } void MainWnd::OnUpdateOptionsSoundMute(CCmdUI* pCmdUI) { int active = soundGetEnable() & 0x30f; pCmdUI->SetCheck(active == 0); } void MainWnd::OnOptionsSoundOn() { if(soundOffFlag) { soundOffFlag = false; soundInit(); } soundEnable(0x30f); } void MainWnd::OnUpdateOptionsSoundOn(CCmdUI* pCmdUI) { int active = soundGetEnable() & 0x30f; pCmdUI->SetCheck(active != 0 && !soundOffFlag); } void MainWnd::OnOptionsSoundUseoldsynchronization() { theApp.useOldSync = !theApp.useOldSync; systemMessage(IDS_SETTING_WILL_BE_EFFECTIVE, "Setting will be effective the next time you start the emulator"); } void MainWnd::OnUpdateOptionsSoundUseoldsynchronization(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.useOldSync); } void MainWnd::OnOptionsSoundEcho() { soundEcho = !soundEcho; } void MainWnd::OnUpdateOptionsSoundEcho(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundEcho); } void MainWnd::OnOptionsSoundLowpassfilter() { soundLowPass = !soundLowPass; } void MainWnd::OnUpdateOptionsSoundLowpassfilter(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundLowPass); } void MainWnd::OnOptionsSoundReversestereo() { soundReverse = !soundReverse; } void MainWnd::OnUpdateOptionsSoundReversestereo(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundReverse); } void MainWnd::OnOptionsSound11khz() { if(theApp.cartridgeType == 0) soundSetQuality(4); else gbSoundSetQuality(4); } void MainWnd::OnUpdateOptionsSound11khz(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundQuality == 4); } void MainWnd::OnOptionsSound22khz() { if(theApp.cartridgeType == 0) soundSetQuality(2); else gbSoundSetQuality(2); } void MainWnd::OnUpdateOptionsSound22khz(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundQuality == 2); } void MainWnd::OnOptionsSound44khz() { if(theApp.cartridgeType == 0) soundSetQuality(1); else gbSoundSetQuality(1); } void MainWnd::OnUpdateOptionsSound44khz(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundQuality == 1); } BOOL MainWnd::OnOptionsSoundVolume(UINT nID) { soundVolume = nID - ID_OPTIONS_SOUND_VOLUME_1X; return TRUE; } void MainWnd::OnUpdateOptionsSoundVolume(CCmdUI *pCmdUI) { pCmdUI->SetCheck(soundVolume == (int)(pCmdUI->m_nID - ID_OPTIONS_SOUND_VOLUME_1X)); } void MainWnd::OnOptionsSoundVolume25x() { soundVolume = 4; } void MainWnd::OnUpdateOptionsSoundVolume25x(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundVolume == 4); } void MainWnd::OnOptionsSoundVolume5x() { soundVolume = 5; } void MainWnd::OnUpdateOptionsSoundVolume5x(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundVolume == 5); } void MainWnd::updateSoundChannels(UINT id) { int flag = 0; if(id == ID_OPTIONS_SOUND_CHANNEL1) flag = 1; if(id == ID_OPTIONS_SOUND_CHANNEL2) flag = 2; if(id == ID_OPTIONS_SOUND_CHANNEL3) flag = 4; if(id == ID_OPTIONS_SOUND_CHANNEL4) flag = 8; if(id == ID_OPTIONS_SOUND_DIRECTSOUNDA) flag = 256; if(id == ID_OPTIONS_SOUND_DIRECTSOUNDB) flag = 512; int active = soundGetEnable() & 0x30f; if(active & flag) active &= (~flag); else active |= flag; soundEnable(active); soundDisable((~active)&0x30f); } void MainWnd::OnOptionsSoundChannel1() { updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL1); } void MainWnd::OnUpdateOptionsSoundChannel1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundGetEnable() & 1); } void MainWnd::OnOptionsSoundChannel2() { updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL2); } void MainWnd::OnUpdateOptionsSoundChannel2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundGetEnable() & 2); } void MainWnd::OnOptionsSoundChannel3() { updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL3); } void MainWnd::OnUpdateOptionsSoundChannel3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundGetEnable() & 4); } void MainWnd::OnOptionsSoundChannel4() { updateSoundChannels(ID_OPTIONS_SOUND_CHANNEL4); } void MainWnd::OnUpdateOptionsSoundChannel4(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundGetEnable() & 8); } void MainWnd::OnOptionsSoundDirectsounda() { updateSoundChannels(ID_OPTIONS_SOUND_DIRECTSOUNDA); } void MainWnd::OnUpdateOptionsSoundDirectsounda(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundGetEnable() & 256); pCmdUI->Enable(theApp.cartridgeType == 0); } void MainWnd::OnOptionsSoundDirectsoundb() { updateSoundChannels(ID_OPTIONS_SOUND_DIRECTSOUNDB); } void MainWnd::OnUpdateOptionsSoundDirectsoundb(CCmdUI* pCmdUI) { pCmdUI->SetCheck(soundGetEnable() & 512); pCmdUI->Enable(theApp.cartridgeType == 0); } void MainWnd::OnOptionsGameboyBorder() { theApp.winGbBorderOn = !theApp.winGbBorderOn; gbBorderOn = theApp.winGbBorderOn; if(emulating && theApp.cartridgeType == 1 && gbBorderOn) { gbSgbRenderBorder(); } theApp.updateWindowSize(theApp.videoOption); } void MainWnd::OnUpdateOptionsGameboyBorder(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.winGbBorderOn); } void MainWnd::OnOptionsGameboyPrinter() { theApp.winGbPrinterEnabled = !theApp.winGbPrinterEnabled; if(theApp.winGbPrinterEnabled) gbSerialFunction = gbPrinterSend; else gbSerialFunction = NULL; } void MainWnd::OnUpdateOptionsGameboyPrinter(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbSerialFunction == gbPrinterSend); } void MainWnd::OnOptionsGameboyBorderAutomatic() { gbBorderAutomatic = !gbBorderAutomatic; if(emulating && theApp.cartridgeType == 1 && gbBorderOn) { gbSgbRenderBorder(); theApp.updateWindowSize(theApp.videoOption); } } void MainWnd::OnUpdateOptionsGameboyBorderAutomatic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbBorderAutomatic); } void MainWnd::OnOptionsGameboyAutomatic() { gbEmulatorType = 0; } void MainWnd::OnUpdateOptionsGameboyAutomatic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbEmulatorType == 0); } void MainWnd::OnOptionsGameboyGba() { gbEmulatorType = 4; } void MainWnd::OnUpdateOptionsGameboyGba(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbEmulatorType == 4); } void MainWnd::OnOptionsGameboyCgb() { gbEmulatorType = 1; } void MainWnd::OnUpdateOptionsGameboyCgb(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbEmulatorType == 1); } void MainWnd::OnOptionsGameboySgb() { gbEmulatorType = 2; } void MainWnd::OnUpdateOptionsGameboySgb(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbEmulatorType == 2); } void MainWnd::OnOptionsGameboySgb2() { gbEmulatorType = 5; } void MainWnd::OnUpdateOptionsGameboySgb2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbEmulatorType == 5); } void MainWnd::OnOptionsGameboyGb() { gbEmulatorType = 3; } void MainWnd::OnUpdateOptionsGameboyGb(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbEmulatorType == 3); } void MainWnd::OnOptionsGameboyRealcolors() { gbColorOption = 0; } void MainWnd::OnUpdateOptionsGameboyRealcolors(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbColorOption == 0); } void MainWnd::OnOptionsGameboyGameboycolors() { gbColorOption = 1; } void MainWnd::OnUpdateOptionsGameboyGameboycolors(CCmdUI* pCmdUI) { pCmdUI->SetCheck(gbColorOption == 1); } void MainWnd::OnOptionsGameboyColors() { theApp.winCheckFullscreen(); GBColorDlg dlg; if(dlg.DoModal()) { gbPaletteOption = dlg.getWhich(); memcpy(systemGbPalette, dlg.getColors(), 24*sizeof(u16)); if(emulating && theApp.cartridgeType == 1) { memcpy(gbPalette, &systemGbPalette[dlg.getWhich()*8], 8*sizeof(u16)); } } } BOOL MainWnd::OnOptionsPriority(UINT nID) { switch(nID) { case ID_OPTIONS_PRIORITY_HIGHEST: theApp.threadPriority = 0; break; case ID_OPTIONS_PRIORITY_ABOVENORMAL: theApp.threadPriority = 1; break; case ID_OPTIONS_PRIORITY_NORMAL: theApp.threadPriority = 2; break; case ID_OPTIONS_PRIORITY_BELOWNORMAL: theApp.threadPriority = 3; break; default: return FALSE; } theApp.updatePriority(); return TRUE; } void MainWnd::OnUpdateOptionsPriority(CCmdUI *pCmdUI) { switch(pCmdUI->m_nID) { case ID_OPTIONS_PRIORITY_HIGHEST: pCmdUI->SetCheck(theApp.threadPriority == 0); break; case ID_OPTIONS_PRIORITY_ABOVENORMAL: pCmdUI->SetCheck(theApp.threadPriority == 1); break; case ID_OPTIONS_PRIORITY_NORMAL: pCmdUI->SetCheck(theApp.threadPriority == 2); break; case ID_OPTIONS_PRIORITY_BELOWNORMAL: pCmdUI->SetCheck(theApp.threadPriority == 3); break; } } BOOL MainWnd::OnOptionsFilter(UINT nID) { switch(nID) { case ID_OPTIONS_FILTER_NORMAL: theApp.filterType = 0; break; case ID_OPTIONS_FILTER_TVMODE: theApp.filterType = 1; break; case ID_OPTIONS_FILTER_2XSAI: theApp.filterType = 2; break; case ID_OPTIONS_FILTER_SUPER2XSAI: theApp.filterType = 3; break; case ID_OPTIONS_FILTER_SUPEREAGLE: theApp.filterType = 4; break; case ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL: theApp.filterType = 5; break; case ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL: theApp.filterType = 6; break; case ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X: theApp.filterType = 7; break; case ID_OPTIONS_FILTER16BIT_SIMPLE2X: theApp.filterType = 8; break; case ID_OPTIONS_FILTER_BILINEAR: theApp.filterType = 9; break; case ID_OPTIONS_FILTER_BILINEARPLUS: theApp.filterType = 10; break; case ID_OPTIONS_FILTER_SCANLINES: theApp.filterType = 11; break; case ID_OPTIONS_FILTER_HQ2X: theApp.filterType = 12; break; case ID_OPTIONS_FILTER_LQ2X: theApp.filterType = 13; break; default: return FALSE; } theApp.updateFilter(); return TRUE; } void MainWnd::OnUpdateOptionsFilter(CCmdUI *pCmdUI) { pCmdUI->Enable(systemColorDepth == 16 || systemColorDepth == 32); switch(pCmdUI->m_nID) { case ID_OPTIONS_FILTER_NORMAL: pCmdUI->SetCheck(theApp.filterType == 0); break; case ID_OPTIONS_FILTER_TVMODE: pCmdUI->SetCheck(theApp.filterType == 1); break; case ID_OPTIONS_FILTER_2XSAI: pCmdUI->SetCheck(theApp.filterType == 2); break; case ID_OPTIONS_FILTER_SUPER2XSAI: pCmdUI->SetCheck(theApp.filterType == 3); break; case ID_OPTIONS_FILTER_SUPEREAGLE: pCmdUI->SetCheck(theApp.filterType == 4); break; case ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL: pCmdUI->SetCheck(theApp.filterType == 5); break; case ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL: pCmdUI->SetCheck(theApp.filterType == 6); break; case ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X: pCmdUI->SetCheck(theApp.filterType == 7); break; case ID_OPTIONS_FILTER16BIT_SIMPLE2X: pCmdUI->SetCheck(theApp.filterType == 8); break; case ID_OPTIONS_FILTER_BILINEAR: pCmdUI->SetCheck(theApp.filterType == 9); break; case ID_OPTIONS_FILTER_BILINEARPLUS: pCmdUI->SetCheck(theApp.filterType == 10); break; case ID_OPTIONS_FILTER_SCANLINES: pCmdUI->SetCheck(theApp.filterType == 11); break; case ID_OPTIONS_FILTER_HQ2X: pCmdUI->SetCheck(theApp.filterType == 12); break; case ID_OPTIONS_FILTER_LQ2X: pCmdUI->SetCheck(theApp.filterType == 13); break; } } BOOL MainWnd::OnOptionsFilterIFB(UINT nID) { switch(nID) { case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE: theApp.ifbType = 0; break; case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_MOTIONBLUR: theApp.ifbType = 1; break; case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART: theApp.ifbType = 2; break; default: return FALSE; } theApp.updateIFB(); return TRUE; } void MainWnd::OnUpdateOptionsFilterIFB(CCmdUI *pCmdUI) { switch(pCmdUI->m_nID) { case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE: pCmdUI->SetCheck(theApp.ifbType == 0); break; case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_MOTIONBLUR: pCmdUI->SetCheck(theApp.ifbType == 1); break; case ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART: pCmdUI->SetCheck(theApp.ifbType == 2); break; } } void MainWnd::OnOptionsFilterDisablemmx() { theApp.disableMMX = !theApp.disableMMX; if(!theApp.disableMMX) cpu_mmx = theApp.detectMMX(); else cpu_mmx = 0; } void MainWnd::OnUpdateOptionsFilterDisablemmx(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.disableMMX); } void MainWnd::OnOptionsLanguageSystem() { theApp.winSetLanguageOption(0, false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsLanguageSystem(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.languageOption == 0); } void MainWnd::OnOptionsLanguageEnglish() { theApp.winSetLanguageOption(1, false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsLanguageEnglish(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.languageOption == 1); } void MainWnd::OnOptionsLanguageOther() { theApp.winCheckFullscreen(); theApp.winSetLanguageOption(2, false); theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnUpdateOptionsLanguageOther(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.languageOption == 2); } void MainWnd::OnOptionsJoypadConfigure1() { theApp.winCheckFullscreen(); JoypadConfig dlg(0); dlg.DoModal(); } void MainWnd::OnUpdateOptionsJoypadConfigure1(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.videoOption != VIDEO_320x240); } void MainWnd::OnOptionsJoypadConfigure2() { theApp.winCheckFullscreen(); JoypadConfig dlg(1); dlg.DoModal(); } void MainWnd::OnUpdateOptionsJoypadConfigure2(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.videoOption != VIDEO_320x240); } void MainWnd::OnOptionsJoypadConfigure3() { theApp.winCheckFullscreen(); JoypadConfig dlg(2); dlg.DoModal(); } void MainWnd::OnUpdateOptionsJoypadConfigure3(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.videoOption != VIDEO_320x240); } void MainWnd::OnOptionsJoypadConfigure4() { theApp.winCheckFullscreen(); JoypadConfig dlg(3); dlg.DoModal(); } void MainWnd::OnUpdateOptionsJoypadConfigure4(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.videoOption != VIDEO_320x240); } BOOL MainWnd::OnOptionsJoypadDefault(UINT nID) { theApp.joypadDefault = nID - ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1; return TRUE; } void MainWnd::OnUpdateOptionsJoypadDefault(CCmdUI *pCmdUI) { pCmdUI->SetCheck(theApp.joypadDefault == (int)(pCmdUI->m_nID - ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1)); } void MainWnd::OnOptionsJoypadMotionconfigure() { theApp.winCheckFullscreen(); MotionConfig dlg; dlg.DoModal(); } void MainWnd::OnUpdateOptionsJoypadMotionconfigure(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.videoOption != VIDEO_320x240); } BOOL MainWnd::OnOptionsJoypadAutofire(UINT nID) { switch(nID) { case ID_OPTIONS_JOYPAD_AUTOFIRE_A: if(theApp.autoFire & 1) { theApp.autoFire &= ~1; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_A_DISABLED)); } else { theApp.autoFire |= 1; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_A)); } break; case ID_OPTIONS_JOYPAD_AUTOFIRE_B: if(theApp.autoFire & 2) { theApp.autoFire &= ~2; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_B_DISABLED)); } else { theApp.autoFire |= 2; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_B)); } break; case ID_OPTIONS_JOYPAD_AUTOFIRE_L: if(theApp.autoFire & 512) { theApp.autoFire &= ~512; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_L_DISABLED)); } else { theApp.autoFire |= 512; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_L)); } break; case ID_OPTIONS_JOYPAD_AUTOFIRE_R: if(theApp.autoFire & 256) { theApp.autoFire &= ~256; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_R_DISABLED)); } else { theApp.autoFire |= 256; systemScreenMessage(winResLoadString(IDS_AUTOFIRE_R)); } break; default: return FALSE; } return TRUE; } void MainWnd::OnUpdateOptionsJoypadAutofire(CCmdUI *pCmdUI) { bool check = true; switch(pCmdUI->m_nID) { case ID_OPTIONS_JOYPAD_AUTOFIRE_A: check = (theApp.autoFire & 1) != 0; break; case ID_OPTIONS_JOYPAD_AUTOFIRE_B: check = (theApp.autoFire & 2) != 0; break; case ID_OPTIONS_JOYPAD_AUTOFIRE_L: check = (theApp.autoFire & 512) != 0; break; case ID_OPTIONS_JOYPAD_AUTOFIRE_R: check = (theApp.autoFire & 256) != 0; break; } pCmdUI->SetCheck(check); } LRESULT MainWnd::OnConfirmMode(WPARAM, LPARAM) { // we need to do this separately or the window will not have the right // parent. must be related to the way MFC does modal dialogs winConfirmMode(); return 0; } void MainWnd::winConfirmMode() { if(theApp.renderMethod == DIRECT_DRAW && theApp.videoOption > VIDEO_4X) { theApp.winCheckFullscreen(); ModeConfirm dlg(theApp.m_pMainWnd); if(!dlg.DoModal()) { theApp.updateVideoSize(ID_OPTIONS_VIDEO_X2); } } theApp.winAccelMgr.UpdateMenu(theApp.menu); } void MainWnd::OnOptionsVideoFullscreenmaxscale() { MaxScale dlg; theApp.winCheckFullscreen(); dlg.DoModal(); }