X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=75b4bc385ae734ca09a6e89ce7a5c849ddfbceaa;hb=331e68678795fd4fc90db4541417ee115053c3ec;hp=66faffce9a31d62e2b77f8ea3194e67eaf73ead2;hpb=67a95fc0511260daf0a92709e8a835a090b467d8;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 66faffc..75b4bc3 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -9,15 +9,27 @@ // --- ---------- ------------------------------------------------------------- // 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 // // FIXED: // +// - Add dbl click/enter to select in cart list, ESC to dimiss [DONE] // // STILL TO BE DONE: // +// - Autoscan/autoload all available BIOS from 'software' folder +// - Controller configuration +// - Remove SDL dependencies (sound, mainly) from Jaguar core lib +// - Add 1 key jumping in cartridge list (press 'R', jumps to carts starting with 'R', etc) // +/* +For BIOS autoscan, infrastructure is already there in filethread.cpp; just need to figure out +if we want to scan every time, or stuff filenames found into the config file, or what. +Should filethread emit signal that's intercepted here? Maybe... +*/ + // Uncomment this for debugging... //#define DEBUG //#define DEBUGFOO // Various tool debugging... @@ -31,6 +43,7 @@ #include "settings.h" #include "filepicker.h" #include "configdialog.h" +#include "generaltab.h" #include "version.h" #include "jaguar.h" @@ -39,8 +52,14 @@ #include "file.h" #include "joystick.h" +#ifdef __GCCWIN32__ +// Apparently on win32, usleep() is not pulled in by the usual suspects. +#include +#endif + // Uncomment this to use built-in BIOS/CD-ROM BIOS // You'll need a copy of jagboot.h & jagcd.h for this to work...! +// Creating those is left as an exercise for the reader. ;-) //#define USE_BUILT_IN_BIOS #ifdef USE_BUILT_IN_BIOS @@ -61,7 +80,7 @@ // use, we can drop it in anywhere and use it as-is. MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit(true), - cartridgeLoaded(false) + cartridgeLoaded(false), CDActive(false) { videoWidget = new GLWidget(this); setCentralWidget(videoWidget); @@ -75,7 +94,6 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - ReadSettings(); setUnifiedTitleAndToolBarOnMac(true); // Create actions @@ -147,6 +165,12 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit configAct->setShortcut(QKeySequence(tr("Ctrl+c"))); connect(configAct, SIGNAL(triggered()), this, SLOT(Configure())); + useCDAct = new QAction(QIcon(":/res/compact-disc.png"), tr("&Use CD Unit"), this); + useCDAct->setStatusTip(tr("Use Jaguar Virtual CD unit")); +// useCDAct->setShortcut(QKeySequence(tr("Ctrl+c"))); + useCDAct->setCheckable(true); + connect(useCDAct, SIGNAL(triggered()), this, SLOT(ToggleCDUsage())); + // Misc. connections... connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); @@ -154,6 +178,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(filePickAct); + fileMenu->addAction(useCDAct); fileMenu->addAction(powerAct); fileMenu->addAction(pauseAct); fileMenu->addAction(configAct); @@ -166,6 +191,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit toolbar->addAction(powerAct); toolbar->addAction(pauseAct); toolbar->addAction(filePickAct); + toolbar->addAction(useCDAct); toolbar->addSeparator(); toolbar->addAction(x1Act); toolbar->addAction(x2Act); @@ -179,6 +205,8 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit // Create status bar statusBar()->showMessage(tr("Ready")); + ReadSettings(); + // Set toolbar buttons/menus based on settings read in (sync the UI)... blurAct->setChecked(vjs.glFilter); x1Act->setChecked(zoomLevel == 1); @@ -217,6 +245,8 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit CDBIOSLoaded = (JaguarLoadROM(jaguarCDBootROM, vjs.CDBootPath) == 0x40000 ? true : false); WriteLog("VJ: CD BIOS is %savailable...\n", (CDBIOSLoaded ? "" : "not ")); #endif + + filePickWin->ScanSoftwareFolder(allowUnknownSoftware); } void MainWin::closeEvent(QCloseEvent * event) @@ -274,11 +304,27 @@ void MainWin::Configure(void) { // Call the configuration dialog and update settings ConfigDialog dlg(this); + //ick. + dlg.generalTab->useUnknownSoftware->setChecked(allowUnknownSoftware); if (dlg.exec() == false) return; + QString before = vjs.ROMPath; dlg.UpdateVJSettings(); + QString after = vjs.ROMPath; + + bool allowOld = allowUnknownSoftware; + //ick. + allowUnknownSoftware = dlg.generalTab->useUnknownSoftware->isChecked(); + + // We rescan the "software" folder if the user either changed the path or + // checked/unchecked the "Allow unknown files" option in the config dialog. + if ((before != after) || (allowOld != allowUnknownSoftware)) + filePickWin->ScanSoftwareFolder(allowUnknownSoftware); + + // Just in case we crash before a clean exit... + WriteSettings(); } // @@ -433,12 +479,29 @@ void MainWin::TogglePowerState(void) pauseAct->setDisabled(true); showUntunedTankCircuit = true; running = true; + // This is just in case the ROM we were playing was in a narrow or wide field mode + TOMReset(); } else { - showUntunedTankCircuit = (cartridgeLoaded ? false : true); - pauseAct->setChecked(false); - pauseAct->setDisabled(!cartridgeLoaded); + if (!CDActive) + { + showUntunedTankCircuit = (cartridgeLoaded ? false : true); + pauseAct->setChecked(false); + pauseAct->setDisabled(!cartridgeLoaded); + } + else + { +// Should check for cartridgeLoaded here as well...! +// We can clear it when toggling CDActive on, so that when we power cycle it does the +// expected thing. Otherwise, if we use the file picker to insert a cart, we expect +// to run the cart! Maybe have a RemoveCart function that only works if the CD unit +// is active? + showUntunedTankCircuit = false; + pauseAct->setChecked(false); + pauseAct->setDisabled(false); + memcpy(jagMemSpace + 0x800000, jaguarCDBootROM, 0x40000); + } //(Err, what's so crappy about this? It seems to do what it's supposed to...) //This is crappy!!! !!! FIX !!! @@ -543,6 +606,20 @@ void MainWin::LoadSoftware(QString file) setWindowTitle(newTitle); } +void MainWin::ToggleCDUsage(void) +{ + CDActive = !CDActive; + + if (CDActive) + { + powerAct->setDisabled(false); + } + else + { + powerAct->setDisabled(true); + } +} + void MainWin::ResizeMainWindow(void) { videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); @@ -567,6 +644,7 @@ void MainWin::ReadSettings(void) filePickWin->move(pos); zoomLevel = settings.value("zoom", 1).toInt(); + allowUnknownSoftware = settings.value("showUnknownSoftware", false).toBool(); vjs.useJoystick = settings.value("useJoystick", false).toBool(); vjs.joyport = settings.value("joyport", 0).toInt(); @@ -643,6 +721,7 @@ void MainWin::WriteSettings(void) settings.setValue("cartLoadPos", filePickWin->pos()); settings.setValue("zoom", zoomLevel); + settings.setValue("showUnknownSoftware", allowUnknownSoftware); settings.setValue("useJoystick", vjs.useJoystick); settings.setValue("joyport", vjs.joyport);