Window::Window () : QMainWindow (NULL) { try { viewer = new GLViewer; } catch (GLViewer::Exception e) { cerr << e.getMessage () << endl; exit (1); } setCentralWidget (viewer); #if DEBUG cout << "/ ! \\ Building in Debug mode. Performance will be impacted" << endl; #else viewer->setBaseSize(500, 500); #endif initControlWidget (); QDockWidget * controlDockWidget = new QDockWidget (this); controlDockWidget->setWidget (controlWidget); controlDockWidget->adjustSize (); addDockWidget (Qt::RightDockWidgetArea, controlDockWidget); controlDockWidget->setFloating(true); controlDockWidget->setFeatures (QDockWidget::AllDockWidgetFeatures); controlDockWidget->adjustSize(); controlDockWidget->move(0, 0); QDockWidget * focalDockWidget = new QDockWidget (this); focalDockWidget->setWidget(focalWidget); focalDockWidget->adjustSize (); addDockWidget (Qt::LeftDockWidgetArea, focalDockWidget); focalDockWidget->setFloating(true); focalDockWidget->setFeatures (QDockWidget::AllDockWidgetFeatures); focalDockWidget->adjustSize(); focalDockWidget->move(200, 0); QDockWidget* rayTracerDockWidget = new QDockWidget(this); rayTracerDockWidget->setWidget(rayTracerWidget); rayTracerDockWidget->adjustSize (); addDockWidget (Qt::TopDockWidgetArea, rayTracerDockWidget); rayTracerDockWidget->setFloating(true); rayTracerDockWidget->setFeatures (QDockWidget::AllDockWidgetFeatures); rayTracerDockWidget->adjustSize(); // Move widgets around the raytracer QDesktopWidget desktop; QRect mainScreenSize = desktop.availableGeometry(desktop.primaryScreen()); controlDockWidget->move(mainScreenSize.width() - 200, 0); rayTracerDockWidget->move(0, 0); focalDockWidget->move(0, mainScreenSize.height() - focalDockWidget->height()); statusBar()->showMessage(""); }
bool MainWindowImpl::loadFile( QFileInfo const & fi ) { if( ! fi.isFile() ) return false; // FIXME: this dispatch needs to be generalized. QString fn( fi.filePath() ); // fi.absoluteFilePath() ); bool worked = false; if( impl->gstate.board().fileNameMatches(fn) ) { worked = impl->gstate.board().s11nLoad(fn); } else if( impl->gstate.fileNameMatches(fn) ) { worked = this->loadGame(fn); } else if( fn.endsWith(".wiki") ) { worked = true; QString lbl = QString("Wiki: %1").arg(fi.fileName()); QDockWidget * win = new QDockWidget( lbl, this ); qboard::WikiLiteView * v = new qboard::WikiLiteView; win->setAttribute(Qt::WA_DeleteOnClose); win->setWidget( v ); win->move( impl->gv->viewport()->mapToGlobal(QPoint(0,0)) ); win->resize( impl->gv->viewport()->size() ); win->setFloating(true); this->addDockWidget(Qt::RightDockWidgetArea, win ); v->parseFile(fn); win->setWindowTitle( v->windowTitle() ); } else if( QRegExp("\\.[jq]s$",Qt::CaseInsensitive).indexIn(fn) > 0 ) { QScriptEngine & js( impl->gstate.jsEngine() ); qDebug() << "[ running script"<<fn<<"]"; QScriptValue rv = qboard::jsInclude( &js, fn ); if( rv.isError() ) { QStringList bt( js.uncaughtExceptionBacktrace() ); QScriptValue exv = rv.isError() ? rv : js.uncaughtException(); QString msg("Script threw or returned an exception:\n"); msg += exv.toString() + "\nBacktrace:\n" + bt.join("\n"); QMessageBox::warning( this, "JavaScript Exception", msg, QMessageBox::Ok, QMessageBox::Ok ); worked = false; } else { worked = true; } qDebug() << "[ done running script"<<fn<<"]"; } else if( QRegExp("\\.(html|txt)$",Qt::CaseInsensitive).indexIn(fn) > 0 ) { #if QT_VERSION >= 0x040400 QBoardDocsBrowser * b = new QBoardDocsBrowser; b->setHome(fn); b->setWindowTitle(fn); b->show(); worked = true; #else QMessageBox::warning( this, "Not implemented!", "MainWindowImpl::loadFile(*.{txt,html}) not implemented for Qt < 4.4", QMessageBox::Ok, QMessageBox::Ok ); worked = false; #endif } else if( QRegExp("\\.(png|jpg|gif|xpm|svg|bmp)$",Qt::CaseInsensitive).indexIn(fn) > 0 ) { // ^^^ FIXME: get the list of image formats from somewhere dynamic const size_t threshold = 10 * 1024; // ^^^ fixme: ^^^^ do this based on image resolution, not file size, cuz many // large-sized PNGs are quite small. if( fi.size() < threshold ) { worked = this->loadPiece(fi); } else { worked = this->impl->gstate.board().s11nLoad(fn); // fi.absoluteFilePath()); } } if( worked ) { this->statusBar()->showMessage("Loaded: "+fn); // fi.absoluteFilePath()); } else { this->statusBar()->showMessage("Load FAILED: "+fn); // fi.absoluteFilePath()); } return worked; }