// Create GLC_Object to display void GLWidget::CreateScene() { // Load mesh from a file QFile manFile(":man.obj"); m_World= GLC_Factory::instance()->createWorldFromFile(manFile); }
QgsGrassModule::QgsGrassModule( QgsGrassTools *tools, QString moduleName, QgisInterface *iface, bool direct, QWidget *parent, Qt::WindowFlags f ) : QWidget( parent, f ) , QgsGrassModuleBase() , mOptions( 0 ) , mSuccess( false ) , mDirect( direct ) { Q_UNUSED( f ); QgsDebugMsg( "called" ); setupUi( this ); // use fixed width font because module's output may be formatted mOutputTextBrowser->setStyleSheet( QStringLiteral( "font-family: Monospace; font-size: 9pt;" ) ); lblModuleName->setText( tr( "Module: %1" ).arg( moduleName ) ); mTools = tools; mIface = iface; mCanvas = mIface->mapCanvas(); //mParent = parent; /* Read module description and create options */ // Open QGIS module description QString mpath = QgsGrass::modulesConfigDirPath() + "/" + moduleName + ".qgm"; QgsDebugMsg( QString( "mpath = %1" ).arg( mpath ) ); QFile qFile( mpath ); if ( !qFile.exists() ) { mErrors.append( tr( "The module file (%1) not found." ).arg( mpath ) ); return; } if ( ! qFile.open( QIODevice::ReadOnly ) ) { mErrors.append( tr( "Cannot open module file (%1)" ).arg( mpath ) ); return; } QDomDocument qDoc( QStringLiteral( "qgisgrassmodule" ) ); QString err; int line, column; if ( !qDoc.setContent( &qFile, &err, &line, &column ) ) { QString errmsg = tr( "Cannot read module file (%1)" ).arg( mpath ) + tr( "\n%1\nat line %2 column %3" ).arg( err ).arg( line ).arg( column ); QgsDebugMsg( errmsg ); mErrors.append( errmsg ); qFile.close(); return; } qFile.close(); QDomElement qDocElem = qDoc.documentElement(); // Read GRASS module description QString xName = qDocElem.attribute( QStringLiteral( "module" ) ); QString xDocName = qDocElem.attribute( QStringLiteral( "manual" ) ); if ( xDocName.isEmpty() ) { xDocName = xName; } // Binary modules on windows has .exe extension // but not all modules have to be binary (can be scripts) // => test if the module is in path and if it is not // add .exe and test again #ifdef Q_OS_WIN mXName = QgsGrass::findModule( xName ); if ( mXName.isNull() ) { QgsDebugMsg( "Module " + xName + " not found" ); mErrors.append( tr( "Module %1 not found" ).arg( xName ) ); return; } #else mXName = xName; #endif QVBoxLayout *layout = new QVBoxLayout( mTabWidget->widget( 0 ) ); layout->setContentsMargins( 0, 0, 0, 0 ); if ( xName == QLatin1String( "r.mapcalc" ) ) { mOptions = new QgsGrassMapcalc( mTools, this, mIface, mTabWidget->widget( 0 ) ); } else { mOptions = new QgsGrassModuleStandardOptions( mTools, this, mIface, mXName, qDocElem, mDirect, mTabWidget->widget( 0 ) ); } layout->addWidget( dynamic_cast<QWidget *>( mOptions ) ); if ( !mOptions->errors().isEmpty() ) { mErrors.append( mOptions->errors() ); } // Hide display if there is no output if ( !mOptions->hasOutput( QgsGrassModuleOption::Vector ) && !mOptions->hasOutput( QgsGrassModuleOption::Raster ) ) { mViewButton->hide(); } mViewButton->setEnabled( false ); // Create manual if available QString gisBase = getenv( "GISBASE" ); QString manPath = gisBase + "/docs/html/" + xDocName + ".html"; QFile manFile( manPath ); if ( manFile.exists() ) { mManualTextBrowser->setOpenExternalLinks( true ); mManualTextBrowser->setSource( QUrl::fromLocalFile( manPath ) ); } else { mManualTextBrowser->clear(); mManualTextBrowser->textCursor().insertImage( QStringLiteral( ":/grass/error.png" ) ); mManualTextBrowser->insertPlainText( tr( "Cannot find man page %1" ).arg( manPath ) ); mManualTextBrowser->insertPlainText( tr( "Please ensure you have the GRASS documentation installed." ) ); } connect( &mProcess, &QProcess::readyReadStandardOutput, this, &QgsGrassModule::readStdout ); connect( &mProcess, &QProcess::readyReadStandardError, this, &QgsGrassModule::readStderr ); connect( &mProcess, static_cast<void ( QProcess::* )( int, QProcess::ExitStatus )>( &QProcess::finished ), this, &QgsGrassModule::finished ); const char *env = "GRASS_MESSAGE_FORMAT=gui"; char *envstr = new char[strlen( env ) + 1]; strcpy( envstr, env ); putenv( envstr ); mOutputTextBrowser->setReadOnly( true ); }