X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=c700976d798c4ff8498286dc7f3df52d5b75b24c;hb=f24ae2128609d5ab8c9a57dfd9dbb46afb7302a9;hp=26488f8714abc3a3d30de69f4df81777cf8aab08;hpb=e0a3f430ecbda85e5f0903011bf8ffeb01f10fe0;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 26488f8..c700976 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -26,29 +26,29 @@ #include "mainwin.h" #include "SDL.h" -//#include -//#include #include "glwidget.h" #include "about.h" #include "settings.h" #include "filepicker.h" #include "configdialog.h" +#include "generaltab.h" +#include "version.h" #include "jaguar.h" -#include "video.h" #include "tom.h" #include "log.h" #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...! //#define USE_BUILT_IN_BIOS -// Uncomment this for an official Virtual Jaguar release -//#define VJ_RELEASE_VERSION "2.0.0" -#warning !!! FIX !!! Figure out how to use this in GUI.CPP as well! - #ifdef USE_BUILT_IN_BIOS #include "jagboot.h" #include "jagcd.h" @@ -72,18 +72,17 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit videoWidget = new GLWidget(this); setCentralWidget(videoWidget); setWindowIcon(QIcon(":/res/vj-icon.png")); - setWindowTitle("Virtual Jaguar v2.0.0"); - - ReadSettings(); - setUnifiedTitleAndToolBarOnMac(true); +// setWindowTitle("Virtual Jaguar v2.0.0"); + setWindowTitle("Virtual Jaguar " VJ_RELEASE_VERSION ); -#warning "!!! Save/Restore window location for FilePickerWindow !!!" aboutWin = new AboutWindow(this); filePickWin = new FilePickerWindow(this); videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setUnifiedTitleAndToolBarOnMac(true); + // Create actions quitAppAct = new QAction(tr("E&xit"), this); @@ -102,6 +101,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit pauseAct->setStatusTip(tr("Toggles the running state")); pauseAct->setCheckable(true); pauseAct->setDisabled(true); + pauseAct->setShortcut(QKeySequence(tr("Esc"))); connect(pauseAct, SIGNAL(triggered()), this, SLOT(ToggleRunState())); zoomActs = new QActionGroup(this); @@ -123,12 +123,12 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit tvTypeActs = new QActionGroup(this); - ntscAct = new QAction(QIcon(":/res/generic.png"), tr("NTSC"), tvTypeActs); + ntscAct = new QAction(QIcon(":/res/ntsc.png"), tr("NTSC"), tvTypeActs); ntscAct->setStatusTip(tr("Sets Jaguar to NTSC mode")); ntscAct->setCheckable(true); connect(ntscAct, SIGNAL(triggered()), this, SLOT(SetNTSC())); - palAct = new QAction(QIcon(":/res/generic.png"), tr("PAL"), tvTypeActs); + palAct = new QAction(QIcon(":/res/pal.png"), tr("PAL"), tvTypeActs); palAct->setStatusTip(tr("Sets Jaguar to PAL mode")); palAct->setCheckable(true); connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL())); @@ -138,17 +138,18 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit blurAct->setCheckable(true); connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur())); - aboutAct = new QAction(QIcon(":/res/generic.png"), tr("&About..."), this); + aboutAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&About..."), this); aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); -#warning "!!! Set up a decent keyboard shortcut for Insert Cartridge !!!" filePickAct = new QAction(QIcon(":/res/software.png"), tr("&Insert Cartridge..."), this); filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar")); + filePickAct->setShortcut(QKeySequence(tr("Ctrl+i"))); connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart())); configAct = new QAction(QIcon(":/res/generic.png"), tr("&Configure"), this); configAct->setStatusTip(tr("Configure options for Virtual Jaguar")); + configAct->setShortcut(QKeySequence(tr("Ctrl+c"))); connect(configAct, SIGNAL(triggered()), this, SLOT(Configure())); // Misc. connections... @@ -183,6 +184,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); @@ -200,16 +203,8 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit connect(timer, SIGNAL(timeout()), this, SLOT(Timer())); timer->start(20); - // NOTE: Keyboards/joysticks will *not* work until SDL is brought back in, or - // the key handling is improved in Qt... - // Wait a minute... it seems they already are... So why no keyboard love? - -#ifdef VJ_RELEASE_VERSION WriteLog("Virtual Jaguar %s (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__); -#else - WriteLog("Virtual Jaguar SVN %s (Last full build was on %s %s)\n", __DATE__, __DATE__, __TIME__); -#endif - WriteLog("Initializing jaguar subsystem...\n"); + WriteLog("VJ: Initializing jaguar subsystem...\n"); JaguarInit(); // Get the BIOS ROM @@ -221,32 +216,16 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit #else // What would be nice here would be a way to check if the BIOS was loaded so that we // could disable the pushbutton on the Misc Options menu... !!! FIX !!! [DONE here, but needs to be fixed in GUI as well!] -WriteLog("About to attempt to load BIOSes...\n"); -#if 1 + WriteLog("VJ: About to attempt to load BIOSes...\n"); //This is short-circuiting the file finding thread... ??? WHY ??? +//Not anymore. Was related to a QImage object creation/corruption bug elsewhere. BIOSLoaded = (JaguarLoadROM(jaguarBootROM, vjs.jagBootPath) == 0x20000 ? true : false); -#else - BIOSLoaded = false; -#endif WriteLog("VJ: BIOS is %savailable...\n", (BIOSLoaded ? "" : "not ")); CDBIOSLoaded = (JaguarLoadROM(jaguarCDBootROM, vjs.CDBootPath) == 0x40000 ? true : false); WriteLog("VJ: CD BIOS is %savailable...\n", (CDBIOSLoaded ? "" : "not ")); #endif - SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... - -//Let's try this... -// JaguarLoadFile("./software/Rayman (World).j64"); -// JaguarLoadFile("./software/I-War (World).j64"); -// JaguarLoadFile("./software/Alien vs Predator (World).j64"); -//no JaguarLoadFile("./software/battlesphere.bin"); -// JaguarLoadFile("./software/Battle Sphere Gold (World).j64"); -// JaguarLoadFile("./software/Rayman (USA, Europe).zip"); -//This is crappy!!! !!! FIX !!! -//Is this even needed any more? Hmm. Maybe. Dunno. -//Seems like it is... But then again, maybe not. Have to test it to see. -//WriteLog("GUI: Resetting Jaguar...\n"); -// JaguarReset(); + filePickWin->ScanSoftwareFolder(allowUnknownSoftware); } void MainWin::closeEvent(QCloseEvent * event) @@ -304,11 +283,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(); } // @@ -467,7 +462,10 @@ void MainWin::TogglePowerState(void) else { showUntunedTankCircuit = (cartridgeLoaded ? false : true); + pauseAct->setChecked(false); pauseAct->setDisabled(!cartridgeLoaded); + +//(Err, what's so crappy about this? It seems to do what it's supposed to...) //This is crappy!!! !!! FIX !!! //Is this even needed any more? Hmm. Maybe. Dunno. //Seems like it is... But then again, maybe not. Have to test it to see. @@ -555,25 +553,17 @@ void MainWin::InsertCart(void) void MainWin::LoadSoftware(QString file) { running = false; // Prevent bad things(TM) from happening... - SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... + SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... cartridgeLoaded = (JaguarLoadFile(file.toAscii().data()) ? true : false); -#if 0 - showUntunedTankCircuit = !cartridgeLoaded; -//This is crappy!!! !!! FIX !!! -//Is this even needed any more? Hmm. Maybe. Dunno. -//Seems like it is... But then again, maybe not. Have to test it to see. - WriteLog("GUI: Resetting Jaguar...\n"); - JaguarReset(); - running = true; -#else powerAct->setDisabled(false); powerAct->setChecked(true); powerButtonOn = false; TogglePowerState(); -#endif - QString newTitle = QString("Virtual Jaguar 2.0.0 - Now playing: %1") +// QString newTitle = QString("Virtual Jaguar v2.0.0 - Now playing: %1") + QString newTitle = QString("Virtual Jaguar " VJ_RELEASE_VERSION + " - Now playing: %1") .arg(filePickWin->GetSelectedPrettyName()); setWindowTitle(newTitle); } @@ -598,8 +588,11 @@ void MainWin::ReadSettings(void) QSize size = settings.value("size", QSize(400, 400)).toSize(); resize(size); move(pos); + pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint(); + 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(); @@ -673,8 +666,10 @@ void MainWin::WriteSettings(void) QSettings settings("Underground Software", "Virtual Jaguar"); settings.setValue("pos", pos()); settings.setValue("size", size()); + settings.setValue("cartLoadPos", filePickWin->pos()); settings.setValue("zoom", zoomLevel); + settings.setValue("showUnknownSoftware", allowUnknownSoftware); settings.setValue("useJoystick", vjs.useJoystick); settings.setValue("joyport", vjs.joyport);