X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fgui%2Fmainwin.cpp;h=c0f215ee865dde2e77a85284c233851ccace9b73;hb=481bb094f715443e52695fc46307785e61556c0d;hp=bfdbf0b8c8e4088ec8681e1bd4a0033f5487cc5e;hpb=85fb2fe5f5a002a261e6b873b8393e085990a700;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index bfdbf0b..c0f215e 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -63,16 +63,18 @@ // We'll make the VJ core modular so that it doesn't matter what GUI is in // use, we can drop it in anywhere and use it as-is. -MainWin::MainWin() +MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit(true), + cartridgeLoaded(false) { videoWidget = new GLWidget(this); setCentralWidget(videoWidget); - setWindowIcon(QIcon(":/res/vj.xpm")); + setWindowIcon(QIcon(":/res/vj-icon.png")); setWindowTitle("Virtual Jaguar v2.0.0"); ReadSettings(); setUnifiedTitleAndToolBarOnMac(true); +#warning "!!! Save/Restore window location for FilePickerWindow !!!" aboutWin = new AboutWindow(this); filePickWin = new FilePickerWindow(this); @@ -87,9 +89,17 @@ MainWin::MainWin() connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close())); powerAct = new QAction(QIcon(":/res/power.png"), tr("&Power"), this); - powerAct->setStatusTip(tr("Toggle running state")); + powerAct->setStatusTip(tr("Powers Jaguar on/off")); powerAct->setCheckable(true); - connect(powerAct, SIGNAL(triggered()), this, SLOT(ToggleRunState())); + powerAct->setChecked(false); + powerAct->setDisabled(true); + connect(powerAct, SIGNAL(triggered()), this, SLOT(TogglePowerState())); + + pauseAct = new QAction(QIcon(":/res/pause.png"), tr("Pause"), this); + pauseAct->setStatusTip(tr("Toggles the running state")); + pauseAct->setCheckable(true); + pauseAct->setDisabled(true); + connect(pauseAct, SIGNAL(triggered()), this, SLOT(ToggleRunState())); zoomActs = new QActionGroup(this); @@ -129,15 +139,20 @@ MainWin::MainWin() aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); - filePickAct = new QAction(QIcon(":/res/generic.png"), tr("&Insert Cartridge..."), this); +#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")); connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart())); + // Misc. connections... + connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); + // Create menus & toolbars fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(filePickAct); fileMenu->addAction(powerAct); + fileMenu->addAction(pauseAct); fileMenu->addAction(quitAppAct); helpMenu = menuBar()->addMenu(tr("&Help")); @@ -145,6 +160,8 @@ MainWin::MainWin() toolbar = addToolBar(tr("Stuff")); toolbar->addAction(powerAct); + toolbar->addAction(pauseAct); + toolbar->addAction(filePickAct); toolbar->addSeparator(); toolbar->addAction(x1Act); toolbar->addAction(x2Act); @@ -175,6 +192,10 @@ MainWin::MainWin() 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 @@ -209,13 +230,15 @@ WriteLog("About to attempt to load BIOSes...\n"); //Let's try this... // JaguarLoadFile("./software/Rayman (World).j64"); // JaguarLoadFile("./software/I-War (World).j64"); - JaguarLoadFile("./software/Alien vs Predator (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(); +//WriteLog("GUI: Resetting Jaguar...\n"); +// JaguarReset(); } void MainWin::closeEvent(QCloseEvent * event) @@ -236,23 +259,27 @@ void MainWin::Timer(void) if (!running) return; -#if 0 - // Random hash & trash - // We try to simulate an untuned tank circuit here... :-) - for(uint32_t x=0; xrasterWidth; x++) + if (showUntunedTankCircuit) { - for(uint32_t y=0; yrasterHeight; y++) + // Random hash & trash + // We try to simulate an untuned tank circuit here... :-) + for(uint32_t x=0; xrasterWidth; x++) { - videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; -// buffer[(y * textureWidth) + x] = x*y; + for(uint32_t y=0; yrasterHeight; y++) + { + videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; + // buffer[(y * textureWidth) + x] = x*y; + } } } -#else - JaguarExecuteNew(); -// memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth); - memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t)); -// memcpy(surface->pixels, backbuffer, TOMGetVideoModeWidth() * TOMGetVideoModeHeight() * 4); -#endif + else + { + // Otherwise, run the Jaguar simulation + JaguarExecuteNew(); +// memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth); + memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t)); +// memcpy(surface->pixels, backbuffer, TOMGetVideoModeWidth() * TOMGetVideoModeHeight() * 4); + } videoWidget->updateGL(); } @@ -366,6 +393,30 @@ doGPUDis = true;//*/ } #endif +void MainWin::TogglePowerState(void) +{ + powerButtonOn = !powerButtonOn; + + if (!powerButtonOn) + { + pauseAct->setChecked(false); + pauseAct->setDisabled(true); + showUntunedTankCircuit = true; + running = true; + } + else + { + showUntunedTankCircuit = (cartridgeLoaded ? false : true); + pauseAct->setDisabled(!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; + } +} + void MainWin::ToggleRunState(void) { running = !running; @@ -441,6 +492,32 @@ void MainWin::InsertCart(void) filePickWin->show(); } +void MainWin::LoadSoftware(QString file) +{ + running = false; // Prevent bad things(TM) from happening... + 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") + .arg(filePickWin->GetSelectedPrettyName()); + setWindowTitle(newTitle); +} + void MainWin::ResizeMainWindow(void) { videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); @@ -475,10 +552,15 @@ void MainWin::ReadSettings(void) vjs.useOpenGL = settings.value("useOpenGL", true).toBool(); vjs.glFilter = settings.value("glFilterType", 0).toInt(); vjs.renderType = settings.value("renderType", 0).toInt(); - strcpy(vjs.jagBootPath, settings.value("JagBootROM", "./bios/jagboot.rom").toString().toAscii().data()); + strcpy(vjs.jagBootPath, settings.value("JagBootROM", "./bios/[BIOS] Atari Jaguar (USA, Europe).zip").toString().toAscii().data()); strcpy(vjs.CDBootPath, settings.value("CDBootROM", "./bios/jagcd.rom").toString().toAscii().data()); strcpy(vjs.EEPROMPath, settings.value("EEPROMs", "./eeproms").toString().toAscii().data()); strcpy(vjs.ROMPath, settings.value("ROMs", "./software").toString().toAscii().data()); +WriteLog("MainWin: Paths\n"); +WriteLog(" jagBootPath = \"%s\"\n", vjs.jagBootPath); +WriteLog(" CDBootPath = \"%s\"\n", vjs.CDBootPath); +WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); +WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); } void MainWin::WriteSettings(void)