void Updatable::save() { ConfigurationManager& params = configurationManager(); params.startObjectParameters(prefixPath(), "Updatable", this); if ( name() != "unamed" ) { params.createParameter(prefixPath(), "name", name()); } }
QString QgsApplication::showSettings() { QString myState = tr( "Application state:\n" "Prefix:\t\t%1\n" "Plugin Path:\t\t%2\n" "Package Data Path:\t%3\n" "Active Theme Name:\t%4\n" "Active Theme Path:\t%5\n" "Default Theme Path:\t%6\n" "SVG Search Paths:\t%7\n" "User DB Path:\t%8\n" ) .arg( prefixPath() ) .arg( pluginPath() ) .arg( pkgDataPath() ) .arg( themeName() ) .arg( activeThemePath() ) .arg( defaultThemePath() ) .arg( svgPaths().join( tr( "\n\t\t", "match indentation of application state" ) ) ) .arg( qgisMasterDbFilePath() ); return myState; }
void QgsApplication::init( QString customConfigPath ) { if ( customConfigPath.isEmpty() ) { if ( getenv( "QGIS_CUSTOM_CONFIG_PATH" ) ) { customConfigPath = getenv( "QGIS_CUSTOM_CONFIG_PATH" ); } else { customConfigPath = QStringLiteral( "%1/.qgis3/" ).arg( QDir::homePath() ); } } qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" ); qRegisterMetaType<QgsProcessingFeatureSourceDefinition>( "QgsProcessingFeatureSourceDefinition" ); qRegisterMetaType<QgsProcessingOutputLayerDefinition>( "QgsProcessingOutputLayerDefinition" ); QString prefixPath( getenv( "QGIS_PREFIX_PATH" ) ? getenv( "QGIS_PREFIX_PATH" ) : applicationDirPath() ); // QgsDebugMsg( QString( "prefixPath(): %1" ).arg( prefixPath ) ); // check if QGIS is run from build directory (not the install directory) QFile f; // "/../../.." is for Mac bundled app in build directory Q_FOREACH ( const QString &path, QStringList() << "" << "/.." << "/bin" << "/../../.." ) { f.setFileName( prefixPath + path + "/qgisbuildpath.txt" ); if ( f.exists() ) break; } if ( f.exists() && f.open( QIODevice::ReadOnly ) ) { ABISYM( mRunningFromBuildDir ) = true; ABISYM( mBuildSourcePath ) = f.readLine().trimmed(); ABISYM( mBuildOutputPath ) = f.readLine().trimmed(); qDebug( "Running from build directory!" ); qDebug( "- source directory: %s", ABISYM( mBuildSourcePath ).toUtf8().data() ); qDebug( "- output directory of the build: %s", ABISYM( mBuildOutputPath ).toUtf8().data() ); #ifdef _MSC_VER ABISYM( mCfgIntDir ) = prefixPath.split( '/', QString::SkipEmptyParts ).last(); qDebug( "- cfg: %s", ABISYM( mCfgIntDir ).toUtf8().data() ); #endif } if ( ABISYM( mRunningFromBuildDir ) ) { // we run from source directory - not installed to destination (specified prefix) ABISYM( mPrefixPath ) = QString(); // set invalid path #if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA) setPluginPath( ABISYM( mBuildOutputPath ) + '/' + QString( QGIS_PLUGIN_SUBDIR ) + '/' + ABISYM( mCfgIntDir ) ); #else setPluginPath( ABISYM( mBuildOutputPath ) + '/' + QStringLiteral( QGIS_PLUGIN_SUBDIR ) ); #endif setPkgDataPath( ABISYM( mBuildSourcePath ) ); // directly source path - used for: doc, resources, svg ABISYM( mLibraryPath ) = ABISYM( mBuildOutputPath ) + '/' + QGIS_LIB_SUBDIR + '/'; #if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA) ABISYM( mLibexecPath ) = ABISYM( mBuildOutputPath ) + '/' + QGIS_LIBEXEC_SUBDIR + '/' + ABISYM( mCfgIntDir ) + '/'; #else ABISYM( mLibexecPath ) = ABISYM( mBuildOutputPath ) + '/' + QGIS_LIBEXEC_SUBDIR + '/'; #endif } else { char *prefixPath = getenv( "QGIS_PREFIX_PATH" ); if ( !prefixPath ) { #if defined(Q_OS_MACX) || defined(Q_OS_WIN) setPrefixPath( applicationDirPath(), true ); #elif defined(ANDROID) // this is "/data/data/org.qgis.qgis" in android QDir myDir( QDir::homePath() ); myDir.cdUp(); QString myPrefix = myDir.absolutePath(); setPrefixPath( myPrefix, true ); #else QDir myDir( applicationDirPath() ); myDir.cdUp(); QString myPrefix = myDir.absolutePath(); setPrefixPath( myPrefix, true ); #endif } else { setPrefixPath( prefixPath, true ); } } if ( !customConfigPath.isEmpty() ) { ABISYM( mConfigPath ) = customConfigPath + '/'; // make sure trailing slash is included } ABISYM( mDefaultSvgPaths ) << qgisSettingsDirPath() + QStringLiteral( "svg/" ); ABISYM( mAuthDbDirPath ) = qgisSettingsDirPath(); if ( getenv( "QGIS_AUTH_DB_DIR_PATH" ) ) { setAuthDatabaseDirPath( getenv( "QGIS_AUTH_DB_DIR_PATH" ) ); } // store system environment variables passed to application, before they are adjusted QMap<QString, QString> systemEnvVarMap; QString passfile( QStringLiteral( "QGIS_AUTH_PASSWORD_FILE" ) ); // QString, for comparison Q_FOREACH ( const QString &varStr, QProcess::systemEnvironment() ) { int pos = varStr.indexOf( QLatin1Char( '=' ) ); if ( pos == -1 ) continue; QString varStrName = varStr.left( pos ); QString varStrValue = varStr.mid( pos + 1 ); if ( varStrName != passfile ) { systemEnvVarMap.insert( varStrName, varStrValue ); } }
LONG WINAPI QgsCrashHandler::handle( LPEXCEPTION_POINTERS exception ) { QgsDebugMsg( "CRASH!!!" ); DWORD processID = GetCurrentProcessId(); DWORD threadID = GetCurrentThreadId(); QString symbolPath; if ( !QgsApplication::isRunningFromBuildDir() ) { symbolPath = getenv( "QGIS_PREFIX_PATH" ); symbolPath = symbolPath + "\\pdb;http://msdl.microsoft.com/download/symbols;http://download.osgeo.org/osgeo4w/symstore"; } else { QString pdbPath = getenv( "QGIS_PDB_PATH" ); QString appPath = QgsApplication::applicationDirPath(); symbolPath += QString( "%1;%2;http://msdl.microsoft.com/download/symbols;http://download.osgeo.org/osgeo4w/symstore" ) .arg( appPath ) .arg( pdbPath ); } QString ptrStr = QString( "0x%1" ).arg( ( quintptr )exception, QT_POINTER_SIZE * 2, 16, QChar( '0' ) ); QString fileName = QStandardPaths::standardLocations( QStandardPaths::TempLocation ).at( 0 ) + "/qgis-crash-info-" + QString::number( processID ); QgsDebugMsg( fileName ); QStringList arguments; arguments = QCoreApplication::arguments(); // TODO In future this needs to be moved out into a "session state" file because we can't trust this is valid in // a crash. arguments << QgsProject::instance()->fileName(); QStringList reportData; reportData.append( QStringLiteral( "QGIS Version: %1" ).arg( Qgis::QGIS_VERSION ) ); if ( QString( Qgis::QGIS_DEV_VERSION ) == QLatin1String( "exported" ) ) { reportData.append( QStringLiteral( "QGIS code branch: Release %1.%2" ) .arg( Qgis::QGIS_VERSION_INT / 10000 ).arg( Qgis::QGIS_VERSION_INT / 100 % 100 ) ); } else { reportData.append( QStringLiteral( "QGIS code revision: %1" ).arg( Qgis::QGIS_DEV_VERSION ) ); } reportData.append( QStringLiteral( "Compiled against Qt: %1" ).arg( QT_VERSION_STR ) ); reportData.append( QStringLiteral( "Running against Qt: %1" ).arg( qVersion() ) ); reportData.append( QStringLiteral( "Compiled against GDAL: %1" ).arg( GDAL_RELEASE_NAME ) ); reportData.append( QStringLiteral( "Running against GDAL: %1" ).arg( GDALVersionInfo( "RELEASE_NAME" ) ) ); QFile file( fileName ); if ( file.open( QIODevice::WriteOnly | QIODevice::Text ) ) { QTextStream stream( &file ); stream << QString::number( processID ) << endl; stream << QString::number( threadID ) << endl; stream << ptrStr << endl; stream << symbolPath << endl; stream << arguments.join( " " ) << endl; stream << reportData.join( "\n" ) << endl; } file.close(); QStringList args; args << fileName; QString prefixPath( getenv( "QGIS_PREFIX_PATH" ) ? getenv( "QGIS_PREFIX_PATH" ) : QApplication::applicationDirPath() ); QString path = prefixPath + "/qgiscrashhandler.exe"; QgsDebugMsg( path ); QProcess::execute( path, args ); return TRUE; }
std::string dataPath(const std::string path) { return prefixPath() + "/" + path; }