X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=56c57473b51b8d8b1685a0913aee38a8088b05d4;hb=d59de2a3408a34b53772bfd4b00cd3e8dc50a03b;hp=b9c07243955367481a916c417680fde52932010f;hpb=8fa19895c8308c0a1aee537f971c740eea4bab9e;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index b9c0724..56c5747 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -44,6 +44,7 @@ #include "generaltab.h" #include "version.h" #include "debug/memorybrowser.h" +#include "debug/cpubrowser.h" #include "dac.h" #include "jaguar.h" @@ -98,6 +99,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), helpWin = new HelpWindow(this); filePickWin = new FilePickerWindow(this); memBrowseWin = new MemoryBrowserWindow(this); + cpuBrowseWin = new CPUBrowserWindow(this); videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -199,12 +201,21 @@ 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")); // memBrowseAct->setCheckable(true); connect(memBrowseAct, SIGNAL(triggered()), this, SLOT(ShowMemoryBrowserWin())); + cpuBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("CPU Browser"), this); + cpuBrowseAct->setStatusTip(tr("Shows the Jaguar CPU browser window")); +// memBrowseAct->setCheckable(true); + connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin())); + // Misc. connections... connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); connect(filePickWin, SIGNAL(FilePickerHiding()), this, SLOT(Unpause())); @@ -224,6 +235,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), { debugMenu = menuBar()->addMenu(tr("&Debug")); debugMenu->addAction(memBrowseAct); + debugMenu->addAction(cpuBrowseAct); } helpMenu = menuBar()->addMenu(tr("&Help")); @@ -244,11 +256,13 @@ 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); } // Create status bar @@ -329,6 +343,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); @@ -337,6 +352,9 @@ void MainWin::SyncUI(void) ntscAct->setChecked(vjs.hardwareTypeNTSC); palAct->setChecked(!vjs.hardwareTypeNTSC); powerAct->setIcon(vjs.hardwareTypeNTSC ? powerRed : powerGreen); + + fullScreen = vjs.fullscreen; + SetFullScreen(fullScreen); } @@ -358,7 +376,13 @@ void MainWin::keyPressEvent(QKeyEvent * e) e->accept(); return; } - +/* + if (e->key() == Qt::Key_F9) + { + ToggleFullScreen(); + return; + } +*/ HandleKeys(e, true); } @@ -779,6 +803,44 @@ void MainWin::FrameAdvance(void) } +void MainWin::SetFullScreen(bool state/*= true*/) +{ + if (state) + { + menuBar()->hide(); + statusBar()->hide(); + showFullScreen(); + QRect r = QApplication::desktop()->availableGeometry(); + double targetWidth = 320.0, targetHeight = (vjs.hardwareTypeNTSC ? 240.0 : 256.0); + 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(); + } + + // 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(); @@ -786,6 +848,13 @@ void MainWin::ShowMemoryBrowserWin(void) } +void MainWin::ShowCPUBrowserWin(void) +{ + cpuBrowseWin->show(); + cpuBrowseWin->RefreshContents(); +} + + void MainWin::ResizeMainWindow(void) { videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));