X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=713ec11abe9ec101dfe151d4abd71b1c6ed7741b;hb=3b0e8e7d6be25106bcfa0ee0c78faed597e9a2c6;hp=d05599d35c2bdb3817f08d2743a51707c28023e3;hpb=55f198414bda52449f1aa3c375419d4638a96f50;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index d05599d..713ec11 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -6,7 +6,7 @@ // JLH = James Hammons // // Who When What -// --- ---------- ------------------------------------------------------------- +// --- ---------- ------------------------------------------------------------ // JLH 12/23/2009 Created this file // JLH 12/20/2010 Added settings, menus & toolbars // JLH 07/05/2011 Added CD BIOS functionality to GUI @@ -16,14 +16,16 @@ // // - Add dbl click/enter to select in cart list, ESC to dimiss [DONE] // - Autoscan/autoload all available BIOS from 'software' folder [DONE] -// - Add 1 key jumping in cartridge list (press 'R', jumps to carts starting with 'R', etc) [DONE] +// - Add 1 key jumping in cartridge list (press 'R', jumps to carts starting +// with 'R', etc) [DONE] // - Controller configuration [DONE] // // STILL TO BE DONE: // // - Fix bug in switching between PAL & NTSC in fullscreen mode. // - Remove SDL dependencies (sound, mainly) from Jaguar core lib -// - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't) +// - Fix inconsistency with trailing slashes in paths (eeproms needs one, +// software doesn't) // // SFDX CODE: S1E9T8H5M23YS @@ -84,7 +86,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), showUntunedTankCircuit(true), cartridgeLoaded(false), CDActive(false), - pauseForFileSelector(false), loadAndGo(autoRun), plzDontKillMyComputer(false) + pauseForFileSelector(false), loadAndGo(autoRun), scannedSoftwareFolder(false), plzDontKillMyComputer(false) { debugbar = NULL; @@ -393,6 +395,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // Run the scanner if nothing passed in and *not* Alpine mode... // NB: Really need to look into caching the info scanned in here... filePickWin->ScanSoftwareFolder(allowUnknownSoftware); + scannedSoftwareFolder = true; } @@ -515,40 +518,9 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state) { enum { P1LEFT = 0, P1RIGHT, P1UP, P1DOWN, P2LEFT, P2RIGHT, P2UP, P2DOWN }; // We kill bad key combos here, before they can get to the emulator... - // This also kills the illegal instruction problem that cropped up in Rayman! - // May want to do this by killing the old one instead of ignoring the new one... - // Seems to work better that way... + // This also kills the illegal instruction problem that cropped up in + // Rayman! -// The problem with this approach is that it causes bad results because it doesn't do -// any checking of previous states. Need to come up with something better because this -// causes problems where the keyboard acts as if it were unresponsive. :-P -#if 0 - if ((e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R]) - || (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L]) - || (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D]) - || (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])) - return; -#else -#if 0 - if (e->key() == (int)vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R]) - joypad_0_buttons[BUTTON_R] = 0; - if (e->key() == (int)vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L]) - joypad_0_buttons[BUTTON_L] = 0; - if (e->key() == (int)vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D]) - joypad_0_buttons[BUTTON_D] = 0; - if (e->key() == (int)vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U]) - joypad_0_buttons[BUTTON_U] = 0; - - if (e->key() == (int)vjs.p2KeyBindings[BUTTON_L] && joypad_1_buttons[BUTTON_R]) - joypad_1_buttons[BUTTON_R] = 0; - if (e->key() == (int)vjs.p2KeyBindings[BUTTON_R] && joypad_1_buttons[BUTTON_L]) - joypad_1_buttons[BUTTON_L] = 0; - if (e->key() == (int)vjs.p2KeyBindings[BUTTON_U] && joypad_1_buttons[BUTTON_D]) - joypad_1_buttons[BUTTON_D] = 0; - if (e->key() == (int)vjs.p2KeyBindings[BUTTON_D] && joypad_1_buttons[BUTTON_U]) - joypad_1_buttons[BUTTON_U] = 0; -#else -//hrm, this still has sticky state problems... Ugh! // First, settle key states... if (e->key() == (int)vjs.p1KeyBindings[BUTTON_L]) keyHeld[P1LEFT] = state; @@ -567,14 +539,6 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state) else if (e->key() == (int)vjs.p2KeyBindings[BUTTON_D]) keyHeld[P2DOWN] = state; -#if 0 - // Next, check for conflicts and bail out if there are any... - if ((keyHeld[P1LEFT] && keyHeld[P1RIGHT]) - || (keyHeld[P1UP] && keyHeld[P1DOWN]) - || (keyHeld[P2LEFT] && keyHeld[P2RIGHT]) - || (keyHeld[P2UP] && keyHeld[P2DOWN])) - return; -#else // Next, check for conflicts and kill 'em if there are any... if (keyHeld[P1LEFT] && keyHeld[P1RIGHT]) keyHeld[P1LEFT] = keyHeld[P1RIGHT] = false; @@ -587,26 +551,22 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state) if (keyHeld[P2UP] && keyHeld[P2DOWN]) keyHeld[P2UP] = keyHeld[P2DOWN] = false; -#endif -#endif -#endif - // No bad combos exist, let's stuff the emulator key buffers...! + // No bad combos exist now, let's stuff the emulator key buffers...! for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) { if (e->key() == (int)vjs.p1KeyBindings[i]) -// joypad_0_buttons[i] = (uint8)state; joypad0Buttons[i] = (state ? 0x01 : 0x00); -// Pad #2 is screwing up pad #1. Prolly a problem in joystick.cpp... -// So let's try to fix it there. :-P [DONE] if (e->key() == (int)vjs.p2KeyBindings[i]) -// joypad_1_buttons[i] = (uint8)state; joypad1Buttons[i] = (state ? 0x01 : 0x00); } } +// +// N.B.: The profile system AutoConnect functionality sets the gamepad IDs here. +// void MainWin::HandleGamepads(void) { Gamepad::Update(); @@ -614,13 +574,10 @@ void MainWin::HandleGamepads(void) for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) { if (vjs.p1KeyBindings[i] & (JOY_BUTTON | JOY_HAT | JOY_AXIS)) - joypad0Buttons[i] = (Gamepad::GetState(0, vjs.p1KeyBindings[i]) ? 0x01 : 0x00); -/*{ -if (vjs.p1KeyBindings[i] & JOY_AXIS) - printf("Axis state (HandleGamepads): %i\n", joypad0Buttons[i]); -}*/ + joypad0Buttons[i] = (Gamepad::GetState(gamepadIDSlot1, vjs.p1KeyBindings[i]) ? 0x01 : 0x00); + if (vjs.p2KeyBindings[i] & (JOY_BUTTON | JOY_HAT | JOY_AXIS)) - joypad1Buttons[i] = (Gamepad::GetState(1, vjs.p2KeyBindings[i]) ? 0x01 : 0x00); + joypad1Buttons[i] = (Gamepad::GetState(gamepadIDSlot2, vjs.p2KeyBindings[i]) ? 0x01 : 0x00); } } @@ -638,9 +595,15 @@ void MainWin::Configure(void) dlg.generalTab->useUnknownSoftware->setChecked(allowUnknownSoftware); dlg.controllerTab1->profileNum = lastEditedProfile; dlg.controllerTab1->SetupLastUsedProfile(); +// maybe instead of this, we tell the controller tab to work on a copy that gets +// written if the user hits 'OK'. + SaveProfiles(); // Just in case user cancels if (dlg.exec() == false) + { + RestoreProfiles(); return; + } QString before = vjs.ROMPath; QString alpineBefore = vjs.alpineROMPath; @@ -658,6 +621,7 @@ void MainWin::Configure(void) //ick. allowUnknownSoftware = dlg.generalTab->useUnknownSoftware->isChecked(); lastEditedProfile = dlg.controllerTab1->profileNum; + AutoConnectProfiles(); // We rescan the "software" folder if the user either changed the path or // checked/unchecked the "Allow unknown files" option in the config dialog. @@ -708,6 +672,16 @@ void MainWin::Configure(void) // void MainWin::Timer(void) { +#if 0 +static uint32_t ntscTickCount; + if (vjs.hardwareTypeNTSC) + { + ntscTickCount++; + ntscTickCount %= 3; + timer->start(16 + (ntscTickCount == 0 ? 1 : 0)); + } +#endif + if (!running) return; @@ -916,6 +890,14 @@ void MainWin::ShowHelpWin(void) void MainWin::InsertCart(void) { + // Check to see if we did autorun, 'cause we didn't load anything in that + // case + if (!scannedSoftwareFolder) + { + filePickWin->ScanSoftwareFolder(allowUnknownSoftware); + scannedSoftwareFolder = true; + } + // If the emulator is running, we pause it here and unpause it later // if we dismiss the file selector without choosing anything if (running && powerButtonOn) @@ -1149,8 +1131,8 @@ void MainWin::ReadSettings(void) vjs.allowWritesToROM = settings.value("writeROM", false).toBool(); vjs.biosType = settings.value("biosType", BT_M_SERIES).toInt(); vjs.useFastBlitter = settings.value("useFastBlitter", false).toBool(); - strcpy(vjs.EEPROMPath, settings.value("EEPROMs", "./eeproms/").toString().toAscii().data()); - strcpy(vjs.ROMPath, settings.value("ROMs", "./software/").toString().toAscii().data()); + strcpy(vjs.EEPROMPath, settings.value("EEPROMs", QDesktopServices::storageLocation(QDesktopServices::DataLocation).append("/eeproms/")).toString().toAscii().data()); + strcpy(vjs.ROMPath, settings.value("ROMs", QDesktopServices::storageLocation(QDesktopServices::DataLocation).append("/software/")).toString().toAscii().data()); strcpy(vjs.alpineROMPath, settings.value("DefaultROM", "").toString().toAscii().data()); strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toAscii().data());