X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=c9733d5d0a86aef320101787e97b035a89e8548c;hb=32f569e1bd09f5d7f07005d119f6408805106381;hp=8eb1285b4fa303a752e6c8d6e1bf52748208396e;hpb=0953b21d8806054348a35c6fbc01ede2ee4df158;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 8eb1285..c9733d5 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 @@ -322,13 +324,12 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // Create status bar statusBar()->showMessage(tr("Ready")); - ReadSettings(); - - // Do this in case original size isn't correct (mostly for the first-run case) + // Do this in case original size isn't correct (mostly for the first-run + // case) ResizeMainWindow(); - // Create our test pattern bitmap + // Create our test pattern bitmaps QImage tempImg(":/res/test-pattern.jpg"); QImage tempImgScaled = tempImg.scaled(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT_PAL, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); @@ -343,6 +344,20 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), } } + QImage tempImg2(":/res/test-pattern-pal"); + QImage tempImgScaled2 = tempImg2.scaled(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT_PAL, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + for(uint32_t y=0; ykey() == Qt::Key_Alt) @@ -452,6 +468,8 @@ void MainWin::keyPressEvent(QKeyEvent * e) e->accept(); return; } +// Bar this shite from release versions kthxbai +#ifndef VJ_REMOVE_DEV_CODE else if (e->key() == Qt::Key_F11) { startM68KTracing = true; @@ -470,6 +488,7 @@ void MainWin::keyPressEvent(QKeyEvent * e) e->accept(); return; } +#endif else if (e->key() == Qt::Key_F8) { // ggn: For extra NYAN pleasure... @@ -562,6 +581,9 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state) } +// +// N.B.: The profile system AutoConnect functionality sets the gamepad IDs here. +// void MainWin::HandleGamepads(void) { Gamepad::Update(); @@ -569,13 +591,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); } } @@ -593,9 +612,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; @@ -613,6 +638,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. @@ -663,6 +689,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; @@ -749,7 +785,10 @@ void MainWin::TogglePowerState(void) // the same as the picture buffer's pitch. for(uint32_t y=0; yrasterHeight; y++) { - memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); + if (vjs.hardwareTypeNTSC) + memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); + else + memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern2 + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); } } } @@ -922,7 +961,7 @@ void MainWin::LoadSoftware(QString file) powerButtonOn = false; TogglePowerState(); // We have to load our software *after* the Jaguar RESET - cartridgeLoaded = JaguarLoadFile(file.toAscii().data()); + cartridgeLoaded = JaguarLoadFile(file.toUtf8().data()); SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... // This is icky because we've already done it @@ -976,11 +1015,9 @@ void MainWin::SetFullScreen(bool state/*= true*/) if (debugbar) debugbar->hide(); - showFullScreen(); // This is needed because the fullscreen may happen on a different // screen than screen 0: int screenNum = QApplication::desktop()->screenNumber(videoWidget); -// QRect r = QApplication::desktop()->availableGeometry(screenNum); QRect r = QApplication::desktop()->screenGeometry(screenNum); double targetWidth = (double)VIRTUAL_SCREEN_WIDTH, targetHeight = (double)(vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL); @@ -996,6 +1033,11 @@ void MainWin::SetFullScreen(bool state/*= true*/) } else { + // Seems Qt is fussy about this: showNormal() has to go first, or it + // will keep the window stuck in a psuedo-fullscreen mode with no way + // to get out of it (except closing the app). + showNormal(); + // Reset the video widget to windowed mode videoWidget->offset = 0; videoWidget->fullscreen = false; @@ -1006,7 +1048,6 @@ void MainWin::SetFullScreen(bool state/*= true*/) if (debugbar) debugbar->show(); - showNormal(); ResizeMainWindow(); move(mainWinPosition); } @@ -1065,18 +1106,14 @@ void MainWin::ResizeMainWindow(void) { for(uint32_t y=0; yrasterHeight; y++) { - memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); + if (vjs.hardwareTypeNTSC) + memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); + else + memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern2 + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); } } - show(); - - for(int i=0; i<2; i++) - { - resize(0, 0); - usleep(2000); - QApplication::processEvents(); - } + adjustSize(); } @@ -1112,10 +1149,10 @@ 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.alpineROMPath, settings.value("DefaultROM", "").toString().toAscii().data()); - strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toAscii().data()); + strcpy(vjs.EEPROMPath, settings.value("EEPROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/eeproms/")).toString().toUtf8().data()); + strcpy(vjs.ROMPath, settings.value("ROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/software/")).toString().toUtf8().data()); + strcpy(vjs.alpineROMPath, settings.value("DefaultROM", "").toString().toUtf8().data()); + strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toUtf8().data()); WriteLog("MainWin: Paths\n"); WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); @@ -1124,6 +1161,7 @@ WriteLog("AlpineROMPath = \"%s\"\n", vjs.alpineROMPath); WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath); WriteLog("Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off")); +#if 0 // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_S).toInt(); vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_X).toInt(); @@ -1168,11 +1206,12 @@ WriteLog("Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off")); vjs.p2KeyBindings[BUTTON_9] = settings.value("p2k_9", Qt::Key_9).toInt(); vjs.p2KeyBindings[BUTTON_d] = settings.value("p2k_pound", Qt::Key_Slash).toInt(); vjs.p2KeyBindings[BUTTON_s] = settings.value("p2k_star", Qt::Key_Asterisk).toInt(); +#endif ReadProfiles(&settings); } - + void MainWin::WriteSettings(void) { QSettings settings("Underground Software", "Virtual Jaguar"); @@ -1207,6 +1246,7 @@ void MainWin::WriteSettings(void) settings.setValue("DefaultROM", vjs.alpineROMPath); settings.setValue("DefaultABS", vjs.absROMPath); +#if 0 settings.setValue("p1k_up", vjs.p1KeyBindings[BUTTON_U]); settings.setValue("p1k_down", vjs.p1KeyBindings[BUTTON_D]); settings.setValue("p1k_left", vjs.p1KeyBindings[BUTTON_L]); @@ -1250,6 +1290,7 @@ void MainWin::WriteSettings(void) settings.setValue("p2k_9", vjs.p2KeyBindings[BUTTON_9]); settings.setValue("p2k_pound", vjs.p2KeyBindings[BUTTON_d]); settings.setValue("p2k_star", vjs.p2KeyBindings[BUTTON_s]); +#endif WriteProfiles(&settings); }