void QgsServer::setupNetworkAccessManager() { QSettings settings; QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance(); QNetworkDiskCache *cache = new QNetworkDiskCache( nullptr ); qint64 cacheSize = sSettings.cacheSize(); QString cacheDirectory = sSettings.cacheDirectory(); cache->setCacheDirectory( cacheDirectory ); cache->setMaximumCacheSize( cacheSize ); QgsMessageLog::logMessage( QStringLiteral( "cacheDirectory: %1" ).arg( cache->cacheDirectory() ), QStringLiteral( "Server" ), Qgis::Info ); QgsMessageLog::logMessage( QStringLiteral( "maximumCacheSize: %1" ).arg( cache->maximumCacheSize() ), QStringLiteral( "Server" ), Qgis::Info ); nam->setCache( cache ); }
MyWebPage::MyWebPage(QObject *parent) : QWebPage(parent) { auto pNAM = networkAccessManager(); QNetworkDiskCache * pNDC = new QNetworkDiskCache(parent); pNDC->setCacheDirectory(getDataDir()+"/cache"); qint64 size = pNDC->cacheSize(); size = pNDC->maximumCacheSize(); const qint64 desired = 1024*1024*1024; if (size < desired) { pNDC->setMaximumCacheSize(desired); size = pNDC->maximumCacheSize(); } QString dir = pNDC->cacheDirectory(); pNAM->setCache(pNDC); auto cj = new CookieJar(parent); pNAM->setCookieJar(cj); }
/** * @brief QgsServer::setupNetworkAccessManager */ void QgsServer::setupNetworkAccessManager() { QSettings settings; QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance(); QNetworkDiskCache *cache = new QNetworkDiskCache( 0 ); QString cacheDirectory = settings.value( "cache/directory", QgsApplication::qgisSettingsDirPath() + "cache" ).toString(); qint64 cacheSize = settings.value( "cache/size", 50 * 1024 * 1024 ).toULongLong(); QgsDebugMsg( QString( "setCacheDirectory: %1" ).arg( cacheDirectory ) ); QgsDebugMsg( QString( "setMaximumCacheSize: %1" ).arg( cacheSize ) ); cache->setCacheDirectory( cacheDirectory ); cache->setMaximumCacheSize( cacheSize ); QgsDebugMsg( QString( "cacheDirectory: %1" ).arg( cache->cacheDirectory() ) ); QgsDebugMsg( QString( "maximumCacheSize: %1" ).arg( cache->maximumCacheSize() ) ); nam->setCache( cache ); }
int main( int argc, char * argv[] ) { #ifndef _MSC_VER qInstallMsgHandler( dummyMessageHandler ); #endif QgsApplication qgsapp( argc, argv, getenv( "DISPLAY" ) ); //Default prefix path may be altered by environment variable char* prefixPath = getenv( "QGIS_PREFIX_PATH" ); if ( prefixPath ) { QgsApplication::setPrefixPath( prefixPath, TRUE ); } #if !defined(Q_OS_WIN) else { // init QGIS's paths - true means that all path will be inited from prefix QgsApplication::setPrefixPath( CMAKE_INSTALL_PREFIX, TRUE ); } #endif #if defined(MAPSERVER_SKIP_ECW) QgsDebugMsg( "Skipping GDAL ECW drivers in server." ); QgsApplication::skipGdalDriver( "ECW" ); QgsApplication::skipGdalDriver( "JP2ECW" ); #endif QSettings settings; QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance(); QNetworkDiskCache *cache = new QNetworkDiskCache( 0 ); QString cacheDirectory = settings.value( "cache/directory", QgsApplication::qgisSettingsDirPath() + "cache" ).toString(); qint64 cacheSize = settings.value( "cache/size", 50 * 1024 * 1024 ).toULongLong(); QgsDebugMsg( QString( "setCacheDirectory: %1" ).arg( cacheDirectory ) ); QgsDebugMsg( QString( "setMaximumCacheSize: %1" ).arg( cacheSize ) ); cache->setCacheDirectory( cacheDirectory ); cache->setMaximumCacheSize( cacheSize ); QgsDebugMsg( QString( "cacheDirectory: %1" ).arg( cache->cacheDirectory() ) ); QgsDebugMsg( QString( "maximumCacheSize: %1" ).arg( cache->maximumCacheSize() ) ); nam->setCache( cache ); QDomImplementation::setInvalidDataPolicy( QDomImplementation::DropInvalidChars ); // Instantiate the plugin directory so that providers are loaded QgsProviderRegistry::instance( QgsApplication::pluginPath() ); QgsDebugMsg( "Prefix PATH: " + QgsApplication::prefixPath() ); QgsDebugMsg( "Plugin PATH: " + QgsApplication::pluginPath() ); QgsDebugMsg( "PkgData PATH: " + QgsApplication::pkgDataPath() ); QgsDebugMsg( "User DB PATH: " + QgsApplication::qgisUserDbFilePath() ); QgsDebugMsg( qgsapp.applicationDirPath() + "/qgis_wms_server.log" ); QgsApplication::createDB(); //init qgis.db (e.g. necessary for user crs) //create config cache and search for config files in the current directory. //These configurations are used if no mapfile parameter is present in the request QString defaultConfigFilePath; QFileInfo projectFileInfo = defaultProjectFile(); //try to find a .qgs file in the server directory if ( projectFileInfo.exists() ) { defaultConfigFilePath = projectFileInfo.absoluteFilePath(); } else { QFileInfo adminSLDFileInfo = defaultAdminSLD(); if ( adminSLDFileInfo.exists() ) { defaultConfigFilePath = adminSLDFileInfo.absoluteFilePath(); } } //create cache for capabilities XML QgsCapabilitiesCache capabilitiesCache; //creating QgsMapRenderer is expensive (access to srs.db), so we do it here before the fcgi loop QgsMapRenderer* theMapRenderer = new QgsMapRenderer(); theMapRenderer->setLabelingEngine( new QgsPalLabeling() ); while ( fcgi_accept() >= 0 ) { printRequestInfos(); //print request infos if in debug mode //use QgsGetRequestHandler in case of HTTP GET and QgsSOAPRequestHandler in case of HTTP POST QgsRequestHandler* theRequestHandler = 0; char* requestMethod = getenv( "REQUEST_METHOD" ); if ( requestMethod != NULL ) { if ( strcmp( requestMethod, "POST" ) == 0 ) { //QgsDebugMsg( "Creating QgsSOAPRequestHandler" ); //theRequestHandler = new QgsSOAPRequestHandler(); theRequestHandler = new QgsPostRequestHandler(); } else { QgsDebugMsg( "Creating QgsGetRequestHandler" ); theRequestHandler = new QgsGetRequestHandler(); } } else { QgsDebugMsg( "Creating QgsGetRequestHandler" ); theRequestHandler = new QgsGetRequestHandler(); } QMap<QString, QString> parameterMap; try { parameterMap = theRequestHandler->parseInput(); } catch ( QgsMapServiceException& e ) { QgsDebugMsg( "An exception was thrown during input parsing" ); theRequestHandler->sendServiceException( e ); continue; } QMap<QString, QString>::const_iterator paramIt; //set admin config file to wms server object QString configFilePath( defaultConfigFilePath ); paramIt = parameterMap.find( "MAP" ); if ( paramIt == parameterMap.constEnd() ) { QgsDebugMsg( QString( "Using default configuration file path: %1" ).arg( defaultConfigFilePath ) ); } else { configFilePath = paramIt.value(); } QgsConfigParser* adminConfigParser = QgsConfigCache::instance()->searchConfiguration( configFilePath ); if ( !adminConfigParser ) { QgsDebugMsg( "parse error on config file " + configFilePath ); theRequestHandler->sendServiceException( QgsMapServiceException( "", "Configuration file problem : perhaps you left off the .qgs extension?" ) ); continue; } //sld parser might need information about request parameters adminConfigParser->setParameterMap( parameterMap ); //request to WMS? QString serviceString; paramIt = parameterMap.find( "SERVICE" ); if ( paramIt == parameterMap.constEnd() ) { #ifndef QGISDEBUG serviceString = parameterMap.value( "SERVICE", "WMS" ); #else QgsDebugMsg( "unable to find 'SERVICE' parameter, exiting..." ); theRequestHandler->sendServiceException( QgsMapServiceException( "ServiceNotSpecified", "Service not specified. The SERVICE parameter is mandatory" ) ); delete theRequestHandler; continue; #endif } else { serviceString = paramIt.value(); } QgsWMSServer* theServer = 0; if ( serviceString == "WFS" ) { delete theServer; QgsWFSServer* theServer = 0; try { theServer = new QgsWFSServer( parameterMap ); } catch ( QgsMapServiceException e ) //admin.sld may be invalid { theRequestHandler->sendServiceException( e ); continue; } theServer->setAdminConfigParser( adminConfigParser ); //request type QString request = parameterMap.value( "REQUEST" ); if ( request.isEmpty() ) { //do some error handling QgsDebugMsg( "unable to find 'REQUEST' parameter, exiting..." ); theRequestHandler->sendServiceException( QgsMapServiceException( "OperationNotSupported", "Please check the value of the REQUEST parameter" ) ); delete theRequestHandler; delete theServer; continue; } if ( request.compare( "GetCapabilities", Qt::CaseInsensitive ) == 0 ) { QDomDocument capabilitiesDocument; try { capabilitiesDocument = theServer->getCapabilities(); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } QgsDebugMsg( "sending GetCapabilities response" ); theRequestHandler->sendGetCapabilitiesResponse( capabilitiesDocument ); delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "DescribeFeatureType", Qt::CaseInsensitive ) == 0 ) { QDomDocument describeDocument; try { describeDocument = theServer->describeFeatureType(); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } QgsDebugMsg( "sending GetCapabilities response" ); theRequestHandler->sendGetCapabilitiesResponse( describeDocument ); delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetFeature", Qt::CaseInsensitive ) == 0 ) { //output format for GetFeature QString outputFormat = parameterMap.value( "OUTPUTFORMAT" ); try { if ( theServer->getFeature( *theRequestHandler, outputFormat ) != 0 ) { delete theRequestHandler; delete theServer; continue; } else { delete theRequestHandler; delete theServer; continue; } } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } } else if ( request.compare( "Transaction", Qt::CaseInsensitive ) == 0 ) { QDomDocument transactionDocument; try { transactionDocument = theServer->transaction( parameterMap.value( "REQUEST_BODY" ) ); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } QgsDebugMsg( "sending Transaction response" ); theRequestHandler->sendGetCapabilitiesResponse( transactionDocument ); delete theRequestHandler; delete theServer; continue; } return 0; } try { theServer = new QgsWMSServer( parameterMap, theMapRenderer ); } catch ( QgsMapServiceException e ) //admin.sld may be invalid { theRequestHandler->sendServiceException( e ); continue; } theServer->setAdminConfigParser( adminConfigParser ); //request type QString request = parameterMap.value( "REQUEST" ); if ( request.isEmpty() ) { //do some error handling QgsDebugMsg( "unable to find 'REQUEST' parameter, exiting..." ); theRequestHandler->sendServiceException( QgsMapServiceException( "OperationNotSupported", "Please check the value of the REQUEST parameter" ) ); delete theRequestHandler; delete theServer; continue; } QString version = parameterMap.value( "VERSION", "1.3.0" ); bool getProjectSettings = ( request.compare( "GetProjectSettings", Qt::CaseInsensitive ) == 0 ); if ( getProjectSettings ) { version = "1.3.0"; //getProjectSettings extends WMS 1.3.0 capabilities } if ( request.compare( "GetCapabilities", Qt::CaseInsensitive ) == 0 || getProjectSettings ) { const QDomDocument* capabilitiesDocument = capabilitiesCache.searchCapabilitiesDocument( configFilePath, getProjectSettings ? "projectSettings" : version ); if ( !capabilitiesDocument ) //capabilities xml not in cache. Create a new one { QgsDebugMsg( "Capabilities document not found in cache" ); QDomDocument doc; try { doc = theServer->getCapabilities( version, getProjectSettings ); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } capabilitiesCache.insertCapabilitiesDocument( configFilePath, getProjectSettings ? "projectSettings" : version, &doc ); capabilitiesDocument = capabilitiesCache.searchCapabilitiesDocument( configFilePath, getProjectSettings ? "projectSettings" : version ); } else { QgsDebugMsg( "Found capabilities document in cache" ); } if ( capabilitiesDocument ) { theRequestHandler->sendGetCapabilitiesResponse( *capabilitiesDocument ); } delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetMap", Qt::CaseInsensitive ) == 0 ) { QImage* result = 0; try { result = theServer->getMap(); } catch ( QgsMapServiceException& ex ) { QgsDebugMsg( "Caught exception during GetMap request" ); theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } if ( result ) { QgsDebugMsg( "Sending GetMap response" ); theRequestHandler->sendGetMapResponse( serviceString, result ); QgsDebugMsg( "Response sent" ); } else { //do some error handling QgsDebugMsg( "result image is 0" ); } delete result; delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetFeatureInfo", Qt::CaseInsensitive ) == 0 ) { QDomDocument featureInfoDoc; try { if ( theServer->getFeatureInfo( featureInfoDoc, version ) != 0 ) { delete theRequestHandler; delete theServer; continue; } } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); delete theRequestHandler; delete theServer; continue; } QString infoFormat = parameterMap.value( "INFO_FORMAT" ); theRequestHandler->sendGetFeatureInfoResponse( featureInfoDoc, infoFormat ); delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetContext", Qt::CaseInsensitive ) == 0 ) { try { QDomDocument doc = theServer->getContext(); theRequestHandler->sendGetStyleResponse( doc ); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); } delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetStyles", Qt::CaseInsensitive ) == 0 || request.compare( "GetStyle", Qt::CaseInsensitive ) == 0 ) // GetStyle for compatibility with earlier QGIS versions { try { QDomDocument doc = theServer->getStyle(); theRequestHandler->sendGetStyleResponse( doc ); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); } delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetLegendGraphic", Qt::CaseInsensitive ) == 0 || request.compare( "GetLegendGraphics", Qt::CaseInsensitive ) == 0 ) // GetLegendGraphics for compatibility with earlier QGIS versions { QImage* result = 0; try { result = theServer->getLegendGraphics(); } catch ( QgsMapServiceException& ex ) { QgsDebugMsg( "Caught exception during GetLegendGraphic request" ); theRequestHandler->sendServiceException( ex ); } if ( result ) { QgsDebugMsg( "Sending GetLegendGraphic response" ); //sending is the same for GetMap and GetLegendGraphic theRequestHandler->sendGetMapResponse( serviceString, result ); QgsDebugMsg( "Response sent" ); } else { //do some error handling QgsDebugMsg( "result image is 0" ); } delete result; delete theRequestHandler; delete theServer; continue; } else if ( request.compare( "GetPrint", Qt::CaseInsensitive ) == 0 ) { QByteArray* printOutput = 0; try { printOutput = theServer->getPrint( theRequestHandler->format() ); } catch ( QgsMapServiceException& ex ) { theRequestHandler->sendServiceException( ex ); } if ( printOutput ) { theRequestHandler->sendGetPrintResponse( printOutput ); } delete printOutput; delete theRequestHandler; delete theServer; continue; } else//unknown request { QgsMapServiceException e( "OperationNotSupported", "Operation " + request + " not supported" ); theRequestHandler->sendServiceException( e ); delete theRequestHandler; delete theServer; } } delete theMapRenderer; QgsDebugMsg( "************* all done ***************" ); return 0; }
/** * \class QgsOptions - Set user options and preferences * Constructor */ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) : QDialog( parent, fl ) { setupUi( this ); connect( cmbTheme, SIGNAL( activated( const QString& ) ), this, SLOT( themeChanged( const QString& ) ) ); connect( cmbTheme, SIGNAL( highlighted( const QString& ) ), this, SLOT( themeChanged( const QString& ) ) ); connect( cmbTheme, SIGNAL( textChanged( const QString& ) ), this, SLOT( themeChanged( const QString& ) ) ); connect( this, SIGNAL( accepted() ), this, SLOT( saveOptions() ) ); cmbIdentifyMode->addItem( tr( "Current layer" ), 0 ); cmbIdentifyMode->addItem( tr( "Top down, stop at first" ), 1 ); cmbIdentifyMode->addItem( tr( "Top down" ), 2 ); // read the current browser and set it QSettings settings; int identifyMode = settings.value( "/Map/identifyMode", 0 ).toInt(); cmbIdentifyMode->setCurrentIndex( cmbIdentifyMode->findData( identifyMode ) ); cbxAutoFeatureForm->setChecked( settings.value( "/Map/identifyAutoFeatureForm", false ).toBool() ); double identifyValue = settings.value( "/Map/identifyRadius", QGis::DEFAULT_IDENTIFY_RADIUS ).toDouble(); QgsDebugMsg( QString( "Standard Identify radius setting read from settings file: %1" ).arg( identifyValue ) ); if ( identifyValue <= 0.0 ) identifyValue = QGis::DEFAULT_IDENTIFY_RADIUS; spinBoxIdentifyValue->setMinimum( 0.01 ); spinBoxIdentifyValue->setValue( identifyValue ); //local directories to search when looking for an SVG with a given basename QString myPaths = settings.value( "svg/searchPathsForSVG", "" ).toString(); if ( !myPaths.isEmpty() ) { QStringList myPathList = myPaths.split( "|" ); QStringList::const_iterator pathIt = myPathList.constBegin(); for ( ; pathIt != myPathList.constEnd(); ++pathIt ) { QListWidgetItem* newItem = new QListWidgetItem( mListSVGPaths ); newItem->setText( *pathIt ); newItem->setFlags( Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable ); mListSVGPaths->addItem( newItem ); } } //Network timeout mNetworkTimeoutSpinBox->setValue( settings.value( "/qgis/networkAndProxy/networkTimeout", "60000" ).toInt() ); //Web proxy settings grpProxy->setChecked( settings.value( "proxy/proxyEnabled", "0" ).toBool() ); leProxyHost->setText( settings.value( "proxy/proxyHost", "" ).toString() ); leProxyPort->setText( settings.value( "proxy/proxyPort", "" ).toString() ); leProxyUser->setText( settings.value( "proxy/proxyUser", "" ).toString() ); leProxyPassword->setText( settings.value( "proxy/proxyPassword", "" ).toString() ); //available proxy types mProxyTypeComboBox->insertItem( 0, "DefaultProxy" ); mProxyTypeComboBox->insertItem( 1, "Socks5Proxy" ); mProxyTypeComboBox->insertItem( 2, "HttpProxy" ); mProxyTypeComboBox->insertItem( 3, "HttpCachingProxy" ); mProxyTypeComboBox->insertItem( 4, "FtpCachingProxy" ); QString settingProxyType = settings.value( "proxy/proxyType", "DefaultProxy" ).toString(); mProxyTypeComboBox->setCurrentIndex( mProxyTypeComboBox->findText( settingProxyType ) ); //URLs excluded not going through proxies QString proxyExcludedURLs = settings.value( "proxy/proxyExcludedUrls", "" ).toString(); if ( !proxyExcludedURLs.isEmpty() ) { QStringList splittedUrls = proxyExcludedURLs.split( "|" ); QStringList::const_iterator urlIt = splittedUrls.constBegin(); for ( ; urlIt != splittedUrls.constEnd(); ++urlIt ) { QListWidgetItem* newItem = new QListWidgetItem( mExcludeUrlListWidget ); newItem->setText( *urlIt ); newItem->setFlags( Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable ); mExcludeUrlListWidget->addItem( newItem ); } } #if QT_VERSION >= 0x40500 // cache settings QNetworkDiskCache *cache = qobject_cast<QNetworkDiskCache*>( QgsNetworkAccessManager::instance()->cache() ); if ( cache ) { mCacheDirectory->setText( cache->cacheDirectory() ); mCacheSize->setMinimum( 0 ); mCacheSize->setMaximum( std::numeric_limits<int>::max() ); mCacheSize->setSingleStep( 1024 ); QgsDebugMsg( QString( "set cacheSize: %1" ).arg( cache->maximumCacheSize() ) ); mCacheSize->setValue( cache->maximumCacheSize() / 1024 ); } #else grpUrlExclude->setHidden( true ); grpCache->setHidden( true ); #endif //wms search server leWmsSearch->setText( settings.value( "/qgis/WMSSearchUrl", "http://geopole.org/wms/search?search=%1&type=rss" ).toString() ); // set the current theme cmbTheme->setItemText( cmbTheme->currentIndex(), settings.value( "/Themes" ).toString() ); // set the attribute table behaviour cmbAttrTableBehaviour->clear(); cmbAttrTableBehaviour->addItem( tr( "Show all features" ) ); cmbAttrTableBehaviour->addItem( tr( "Show selected features" ) ); cmbAttrTableBehaviour->addItem( tr( "Show features in current canvas" ) ); cmbAttrTableBehaviour->setCurrentIndex( settings.value( "/qgis/attributeTableBehaviour", 0 ).toInt() ); // set the display update threshold spinBoxUpdateThreshold->setValue( settings.value( "/Map/updateThreshold" ).toInt() ); //set the default projection behaviour radio buttongs if ( settings.value( "/Projections/defaultBehaviour" ).toString() == "prompt" ) { radPromptForProjection->setChecked( true ); } else if ( settings.value( "/Projections/defaultBehaviour" ).toString() == "useProject" ) { radUseProjectProjection->setChecked( true ); } else //useGlobal { radUseGlobalProjection->setChecked( true ); } txtGlobalWkt->setText( settings.value( "/Projections/defaultProjectionString", GEOPROJ4 ).toString() ); // populate combo box with ellipsoids getEllipsoidList(); QString myEllipsoidId = settings.value( "/qgis/measure/ellipsoid", "WGS84" ).toString(); cmbEllipsoid->setItemText( cmbEllipsoid->currentIndex(), getEllipsoidName( myEllipsoidId ) ); // Set the units for measuring QString myUnitsTxt = settings.value( "/qgis/measure/displayunits", "meters" ).toString(); if ( myUnitsTxt == "feet" ) { radFeet->setChecked( true ); } else { radMeters->setChecked( true ); } QButtonGroup* angleButtonGroup = new QButtonGroup( this ); angleButtonGroup->addButton( mDegreesRadioButton ); angleButtonGroup->addButton( mRadiansRadioButton ); angleButtonGroup->addButton( mGonRadioButton ); QString myAngleUnitsTxt = settings.value( "/qgis/measure/angleunits", "degrees" ).toString(); if ( myAngleUnitsTxt == "gon" ) { mGonRadioButton->setChecked( true ); } else if ( myAngleUnitsTxt == "radians" ) { mRadiansRadioButton->setChecked( true ); } else //degrees { mDegreesRadioButton->setChecked( true ); } // set decimal places of the measure tool int decimalPlaces = settings.value( "/qgis/measure/decimalplaces", "3" ).toInt(); mDecimalPlacesSpinBox->setRange( 0, 12 ); mDecimalPlacesSpinBox->setValue( decimalPlaces ); // set if base unit of measure tool should be changed bool baseUnit = settings.value( "qgis/measure/keepbaseunit", false ).toBool(); if ( baseUnit == true ) { mKeepBaseUnitCheckBox->setChecked( true ); } else { mKeepBaseUnitCheckBox->setChecked( false ); } // add the themes to the combo box on the option dialog QDir myThemeDir( ":/images/themes/" ); myThemeDir.setFilter( QDir::Dirs ); QStringList myDirList = myThemeDir.entryList( QStringList( "*" ) ); cmbTheme->clear(); for ( int i = 0; i < myDirList.count(); i++ ) { if ( myDirList[i] != "." && myDirList[i] != ".." ) { cmbTheme->addItem( myDirList[i] ); } } // set the theme combo cmbTheme->setCurrentIndex( cmbTheme->findText( settings.value( "/Themes", "default" ).toString() ) ); //set the state of the checkboxes chkAntiAliasing->setChecked( settings.value( "/qgis/enable_anti_aliasing", false ).toBool() ); chkUseRenderCaching->setChecked( settings.value( "/qgis/enable_render_caching", false ).toBool() ); chkUseSymbologyNG->setChecked( settings.value( "/qgis/use_symbology_ng", false ).toBool() ); // Slightly awkard here at the settings value is true to use QImage, // but the checkbox is true to use QPixmap chkUseQPixmap->setChecked( !( settings.value( "/qgis/use_qimage_to_render", true ).toBool() ) ); chkAddedVisibility->setChecked( settings.value( "/qgis/new_layers_visible", true ).toBool() ); cbxLegendClassifiers->setChecked( settings.value( "/qgis/showLegendClassifiers", false ).toBool() ); cbxHideSplash->setChecked( settings.value( "/qgis/hideSplash", false ).toBool() ); cbxAttributeTableDocked->setChecked( settings.value( "/qgis/dockAttributeTable", false ).toBool() ); cbxIdentifyResultsDocked->setChecked( settings.value( "/qgis/dockIdentifyResults", false ).toBool() ); cbxSnappingOptionsDocked->setChecked( settings.value( "/qgis/dockSnapping", false ).toBool() ); cbxAddPostgisDC->setChecked( settings.value( "/qgis/addPostgisDC", false ).toBool() ); cbxAddNewLayersToCurrentGroup->setChecked( settings.value( "/qgis/addNewLayersToCurrentGroup", false ).toBool() ); cbxCreateRasterLegendIcons->setChecked( settings.value( "/qgis/createRasterLegendIcons", true ).toBool() ); //set the color for selections int myRed = settings.value( "/qgis/default_selection_color_red", 255 ).toInt(); int myGreen = settings.value( "/qgis/default_selection_color_green", 255 ).toInt(); int myBlue = settings.value( "/qgis/default_selection_color_blue", 0 ).toInt(); int myAlpha = settings.value( "/qgis/default_selection_color_alpha", 255 ).toInt(); pbnSelectionColor->setColor( QColor( myRed, myGreen, myBlue, myAlpha ) ); //set the default color for canvas background myRed = settings.value( "/qgis/default_canvas_color_red", 255 ).toInt(); myGreen = settings.value( "/qgis/default_canvas_color_green", 255 ).toInt(); myBlue = settings.value( "/qgis/default_canvas_color_blue", 255 ).toInt(); pbnCanvasColor->setColor( QColor( myRed, myGreen, myBlue ) ); // set the default color for the measure tool myRed = settings.value( "/qgis/default_measure_color_red", 180 ).toInt(); myGreen = settings.value( "/qgis/default_measure_color_green", 180 ).toInt(); myBlue = settings.value( "/qgis/default_measure_color_blue", 180 ).toInt(); pbnMeasureColor->setColor( QColor( myRed, myGreen, myBlue ) ); capitaliseCheckBox->setChecked( settings.value( "qgis/capitaliseLayerName", QVariant( false ) ).toBool() ); chbAskToSaveProjectChanges->setChecked( settings.value( "qgis/askToSaveProjectChanges", QVariant( true ) ).toBool() ); chbWarnOldProjectVersion->setChecked( settings.value( "/qgis/warnOldProjectVersion", QVariant( true ) ).toBool() ); cmbWheelAction->setCurrentIndex( settings.value( "/qgis/wheel_action", 0 ).toInt() ); spinZoomFactor->setValue( settings.value( "/qgis/zoom_factor", 2 ).toDouble() ); // // Locale settings // QString mySystemLocale = QLocale::system().name(); lblSystemLocale->setText( tr( "Detected active locale on your system: %1" ).arg( mySystemLocale ) ); QString myUserLocale = settings.value( "locale/userLocale", "" ).toString(); QStringList myI18nList = i18nList(); cboLocale->addItems( myI18nList ); if ( myI18nList.contains( myUserLocale ) ) { cboLocale->setCurrentIndex( myI18nList.indexOf( myUserLocale ) ); } bool myLocaleOverrideFlag = settings.value( "locale/overrideFlag", false ).toBool(); grpLocale->setChecked( myLocaleOverrideFlag ); //set elements in digitizing tab mLineWidthSpinBox->setValue( settings.value( "/qgis/digitizing/line_width", 1 ).toInt() ); QColor digitizingColor; myRed = settings.value( "/qgis/digitizing/line_color_red", 255 ).toInt(); myGreen = settings.value( "/qgis/digitizing/line_color_green", 0 ).toInt(); myBlue = settings.value( "/qgis/digitizing/line_color_blue", 0 ).toInt(); mLineColorToolButton->setColor( QColor( myRed, myGreen, myBlue ) ); //default snap mode mDefaultSnapModeComboBox->insertItem( 0, tr( "To vertex" ), "to vertex" ); mDefaultSnapModeComboBox->insertItem( 1, tr( "To segment" ), "to segment" ); mDefaultSnapModeComboBox->insertItem( 2, tr( "To vertex and segment" ), "to vertex and segment" ); QString defaultSnapString = settings.value( "/qgis/digitizing/default_snap_mode", "to vertex" ).toString(); mDefaultSnapModeComboBox->setCurrentIndex( mDefaultSnapModeComboBox->findData( defaultSnapString ) ); mDefaultSnappingToleranceSpinBox->setValue( settings.value( "/qgis/digitizing/default_snapping_tolerance", 0 ).toDouble() ); mSearchRadiusVertexEditSpinBox->setValue( settings.value( "/qgis/digitizing/search_radius_vertex_edit", 10 ).toDouble() ); int index; if ( settings.value( "/qgis/digitizing/default_snapping_tolerance_unit", 0 ).toInt() == QgsTolerance::MapUnits ) { index = mDefaultSnappingToleranceComboBox->findText( tr( "map units" ) ); } else { index = mDefaultSnappingToleranceComboBox->findText( tr( "pixels" ) ); } mDefaultSnappingToleranceComboBox->setCurrentIndex( index ); if ( settings.value( "/qgis/digitizing/search_radius_vertex_edit_unit", QgsTolerance::Pixels ).toInt() == QgsTolerance::MapUnits ) { index = mSearchRadiusVertexEditComboBox->findText( tr( "map units" ) ); } else { index = mSearchRadiusVertexEditComboBox->findText( tr( "pixels" ) ); } mSearchRadiusVertexEditComboBox->setCurrentIndex( index ); //vertex marker mMarkersOnlyForSelectedCheckBox->setChecked( settings.value( "/qgis/digitizing/marker_only_for_selected", false ).toBool() ); mMarkerStyleComboBox->addItem( tr( "Semi transparent circle" ) ); mMarkerStyleComboBox->addItem( tr( "Cross" ) ); mMarkerStyleComboBox->addItem( tr( "None" ) ); QString markerStyle = settings.value( "/qgis/digitizing/marker_style", "Cross" ).toString(); if ( markerStyle == "SemiTransparentCircle" ) { mMarkerStyleComboBox->setCurrentIndex( mMarkerStyleComboBox->findText( tr( "Semi transparent circle" ) ) ); } else if ( markerStyle == "Cross" ) { mMarkerStyleComboBox->setCurrentIndex( mMarkerStyleComboBox->findText( tr( "Cross" ) ) ); } else if ( markerStyle == "None" ) { mMarkerStyleComboBox->setCurrentIndex( mMarkerStyleComboBox->findText( tr( "None" ) ) ); } mMarkerSizeSpinBox->setValue( settings.value( "/qgis/digitizing/marker_size", 3 ).toInt() ); chkReuseLastValues->setChecked( settings.value( "/qgis/digitizing/reuseLastValues", false ).toBool() ); chkDisableAttributeValuesDlg->setChecked( settings.value( "/qgis/digitizing/disable_enter_attribute_values_dialog", false ).toBool() ); #ifdef Q_WS_MAC //MH: disable incremental update on Mac for now to avoid problems with resizing groupBox_5->setEnabled( false ); #endif //Q_WS_MAC //overlay placement algorithm mOverlayAlgorithmComboBox->insertItem( 0, tr( "Central point (fastest)" ) ); mOverlayAlgorithmComboBox->insertItem( 1, tr( "Chain (fast)" ) ); mOverlayAlgorithmComboBox->insertItem( 2, tr( "Popmusic tabu chain (slow)" ) ); mOverlayAlgorithmComboBox->insertItem( 3, tr( "Popmusic tabu (slow)" ) ); mOverlayAlgorithmComboBox->insertItem( 4, tr( "Popmusic chain (very slow)" ) ); QString overlayAlgorithmString = settings.value( "qgis/overlayPlacementAlgorithm", "Central point" ).toString(); if ( overlayAlgorithmString == "Chain" ) { mOverlayAlgorithmComboBox->setCurrentIndex( 1 ); } else if ( overlayAlgorithmString == "Popmusic tabu chain" ) { mOverlayAlgorithmComboBox->setCurrentIndex( 2 ); } else if ( overlayAlgorithmString == "Popmusic tabu" ) { mOverlayAlgorithmComboBox->setCurrentIndex( 3 ); } else if ( overlayAlgorithmString == "Popmusic chain" ) { mOverlayAlgorithmComboBox->setCurrentIndex( 4 ); } else { mOverlayAlgorithmComboBox->setCurrentIndex( 0 ); } //default is central point restoreGeometry( settings.value( "/Windows/Options/geometry" ).toByteArray() ); tabWidget->setCurrentIndex( settings.value( "/Windows/Options/row" ).toInt() ); }