X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=72869fb7515723f7751715621b0c400c4137ac61;hb=cdc64706c10d3fe005fecff5d000fe60b3980a3b;hp=ac017ceb4b5e87c5ea573a542e45b2bbb7e5bf1f;hpb=178d7f01b40cf8367cfe5b71219e6d20f60f92d4;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index ac017ce..72869fb 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -45,6 +45,7 @@ #include "version.h" #include "debug/memorybrowser.h" #include "debug/cpubrowser.h" +#include "debug/opbrowser.h" #include "dac.h" #include "jaguar.h" @@ -100,6 +101,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), filePickWin = new FilePickerWindow(this); memBrowseWin = new MemoryBrowserWindow(this); cpuBrowseWin = new CPUBrowserWindow(this); + opBrowseWin = new OPBrowserWindow(this); videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -201,6 +203,10 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), frameAdvanceAct->setShortcut(QKeySequence(tr("F7"))); connect(frameAdvanceAct, SIGNAL(triggered()), this, SLOT(FrameAdvance())); + fullScreenAct = new QAction(QIcon(":/res/generic.png"), tr("F&ull Screen"), this); + fullScreenAct->setShortcut(QKeySequence(tr("F9"))); + connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen())); + // Debugger Actions memBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("Memory Browser"), this); memBrowseAct->setStatusTip(tr("Shows the Jaguar memory browser window")); @@ -212,6 +218,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // memBrowseAct->setCheckable(true); connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin())); + opBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("OP Browser"), this); + opBrowseAct->setStatusTip(tr("Shows the Jaguar OP browser window")); +// memBrowseAct->setCheckable(true); + connect(opBrowseAct, SIGNAL(triggered()), this, SLOT(ShowOPBrowserWin())); + // Misc. connections... connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); connect(filePickWin, SIGNAL(FilePickerHiding()), this, SLOT(Unpause())); @@ -232,6 +243,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugMenu = menuBar()->addMenu(tr("&Debug")); debugMenu->addAction(memBrowseAct); debugMenu->addAction(cpuBrowseAct); + debugMenu->addAction(opBrowseAct); } helpMenu = menuBar()->addMenu(tr("&Help")); @@ -252,12 +264,14 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), toolbar->addAction(palAct); toolbar->addSeparator(); toolbar->addAction(blurAct); + toolbar->addAction(fullScreenAct); if (vjs.hardwareTypeAlpine) { debugbar = addToolBar(tr("&Debug")); debugbar->addAction(memBrowseAct); debugbar->addAction(cpuBrowseAct); + debugbar->addAction(opBrowseAct); } // Create status bar @@ -271,13 +285,13 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // Set up timer based loop for animation... timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(Timer())); -//This is only correct for PAL. !!! FIX !!! [DONE] -//Use timer->setInterval( int msec ) to fix this on the fly -// timer->start(20); + // This isn't very accurate for NTSC: This is early by 40 msec per frame. // This is because it's discarding the 0.6666... on the end of the fraction. // Alas, 6 doesn't divide cleanly into 10. :-P - timer->start(vjs.hardwareTypeNTSC ? 16 : 20); +//Should we defer this until SyncUI? Probably. +//No, it doesn't work, because it uses setInterval() instead of start()... +// timer->start(vjs.hardwareTypeNTSC ? 16 : 20); // We set this initially, to make VJ behave somewhat as it would if no // cart were inserted and the BIOS was set as active... @@ -338,6 +352,7 @@ void MainWin::LoadFile(QString file) void MainWin::SyncUI(void) { // Set toolbar buttons/menus based on settings read in (sync the UI)... + // (Really, this is to sync command line options passed in) blurAct->setChecked(vjs.glFilter); x1Act->setChecked(zoomLevel == 1); x2Act->setChecked(zoomLevel == 2); @@ -346,6 +361,13 @@ void MainWin::SyncUI(void) ntscAct->setChecked(vjs.hardwareTypeNTSC); palAct->setChecked(!vjs.hardwareTypeNTSC); powerAct->setIcon(vjs.hardwareTypeNTSC ? powerRed : powerGreen); + + fullScreen = vjs.fullscreen; + SetFullScreen(fullScreen); + + // Reset the timer to be what was set in the command line (if any): +// timer->setInterval(vjs.hardwareTypeNTSC ? 16 : 20); + timer->start(vjs.hardwareTypeNTSC ? 16 : 20); } @@ -367,7 +389,13 @@ void MainWin::keyPressEvent(QKeyEvent * e) e->accept(); return; } - +/* + if (e->key() == Qt::Key_F9) + { + ToggleFullScreen(); + return; + } +*/ HandleKeys(e, true); } @@ -788,6 +816,57 @@ void MainWin::FrameAdvance(void) } +void MainWin::SetFullScreen(bool state/*= true*/) +{ +#if 0 + QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); + QSize size = settings.value("size", QSize(400, 400)).toSize(); + resize(size); + move(pos); + settings.setValue("pos", pos()); + settings.setValue("size", size()); +#endif + if (state) + { + mainWinPosition = pos(); +// mainWinSize = size(); + menuBar()->hide(); + statusBar()->hide(); + showFullScreen(); + QRect r = QApplication::desktop()->availableGeometry(); +// double targetWidth = 320.0, targetHeight = (vjs.hardwareTypeNTSC ? 240.0 : 256.0); + double targetWidth = (double)VIRTUAL_SCREEN_WIDTH, + targetHeight = (double)(vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL); + double aspectRatio = targetWidth / targetHeight; + // NOTE: Really should check here to see which dimension constrains the other. + // Right now, we assume that height is the constraint. + int newWidth = (int)(aspectRatio * (double)r.height()); + + videoWidget->setFixedSize(newWidth, r.height()); + showFullScreen(); + } + else + { + menuBar()->show(); + statusBar()->show(); + showNormal(); + ResizeMainWindow(); + move(mainWinPosition); + } + + // For some reason, this doesn't work: If the emu is paused, toggling from + // fullscreen to windowed (& vice versa) shows a white screen. +// videoWidget->updateGL(); +} + + +void MainWin::ToggleFullScreen(void) +{ + fullScreen = !fullScreen; + SetFullScreen(fullScreen); +} + + void MainWin::ShowMemoryBrowserWin(void) { memBrowseWin->show(); @@ -802,9 +881,18 @@ void MainWin::ShowCPUBrowserWin(void) } +void MainWin::ShowOPBrowserWin(void) +{ + opBrowseWin->show(); + opBrowseWin->RefreshContents(); +} + + void MainWin::ResizeMainWindow(void) { - videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); +// videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); + videoWidget->setFixedSize(zoomLevel * VIRTUAL_SCREEN_WIDTH, + zoomLevel * (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL)); show(); for(int i=0; i<2; i++) @@ -821,11 +909,11 @@ void MainWin::ResizeMainWindow(void) void MainWin::ReadSettings(void) { QSettings settings("Underground Software", "Virtual Jaguar"); - QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); + mainWinPosition = settings.value("pos", QPoint(200, 200)).toPoint(); QSize size = settings.value("size", QSize(400, 400)).toSize(); resize(size); - move(pos); - pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint(); + move(mainWinPosition); + QPoint pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint(); filePickWin->move(pos); zoomLevel = settings.value("zoom", 2).toInt();