//when user clicks apply button void QgsProjectProperties::apply() { // Set the map units // Note. Qt 3.2.3 and greater have a function selectedId() that // can be used instead of the two part technique here QGis::UnitType mapUnit; if ( radMeters->isChecked() ) { mapUnit = QGis::Meters; } else if ( radFeet->isChecked() ) { mapUnit = QGis::Feet; } else { mapUnit = QGis::Degrees; } QgsMapRenderer* myRender = mMapCanvas->mapRenderer(); myRender->setMapUnits( mapUnit ); myRender->setProjectionsEnabled( cbxProjectionEnabled->isChecked() ); // Only change the projection if there is a node in the tree // selected that has an srid. This prevents error if the user // selects a top-level node rather than an actual coordinate // system long myCRSID = projectionSelector->selectedCrsId(); if ( myCRSID ) { QgsCoordinateReferenceSystem srs( myCRSID, QgsCoordinateReferenceSystem::InternalCrsId ); myRender->setDestinationSrs( srs ); // write the currently selected projections _proj string_ to project settings QgsDebugMsg( QString( "SpatialRefSys/ProjectCRSProj4String: %1" ).arg( projectionSelector->selectedProj4String() ) ); QgsProject::instance()->writeEntry( "SpatialRefSys", "/ProjectCRSProj4String", projectionSelector->selectedProj4String() ); // Set the map units to the projected coordinates if we are projecting if ( isProjected() ) { // If we couldn't get the map units, default to the value in the // projectproperties dialog box (set above) if ( srs.mapUnits() != QGis::UnknownUnit ) myRender->setMapUnits( srs.mapUnits() ); } } // Set the project title QgsProject::instance()->title( title() ); // set the mouse display precision method and the // number of decimal places for the manual option // Note. Qt 3.2.3 and greater have a function selectedId() that // can be used instead of the two part technique here if ( radAutomatic->isChecked() ) QgsProject::instance()->writeEntry( "PositionPrecision", "/Automatic", true ); else QgsProject::instance()->writeEntry( "PositionPrecision", "/Automatic", false ); QgsProject::instance()->writeEntry( "PositionPrecision", "/DecimalPlaces", spinBoxDP->value() ); // Announce that we may have a new display precision setting emit displayPrecisionChanged(); //set the colour for selections QColor myColour = pbnSelectionColour->color(); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorRedPart", myColour.red() ); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorGreenPart", myColour.green() ); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorBluePart", myColour.blue() ); QgsRenderer::setSelectionColor( myColour ); //set the colour for canvas myColour = pbnCanvasColor->color(); QgsProject::instance()->writeEntry( "Gui", "/CanvasColorRedPart", myColour.red() ); QgsProject::instance()->writeEntry( "Gui", "/CanvasColorGreenPart", myColour.green() ); QgsProject::instance()->writeEntry( "Gui", "/CanvasColorBluePart", myColour.blue() ); //write the digitizing settings int topologicalEditingEnabled = ( mEnableTopologicalEditingCheckBox->checkState() == Qt::Checked ) ? 1 : 0; QgsProject::instance()->writeEntry( "Digitizing", "/TopologicalEditing", topologicalEditingEnabled ); int avoidPolygonIntersectionsEnabled = ( mAvoidIntersectionsCheckBox->checkState() == Qt::Checked ) ? 1 : 0; QgsProject::instance()->writeEntry( "Digitizing", "/AvoidPolygonIntersections", avoidPolygonIntersectionsEnabled ); QMap<QString, LayerEntry>::const_iterator layerEntryIt; //store the layer snapping settings as string lists QStringList layerIdList; QStringList snapToList; QStringList toleranceList; QStringList enabledList; for ( layerEntryIt = mSnappingLayerSettings.constBegin(); layerEntryIt != mSnappingLayerSettings.constEnd(); ++layerEntryIt ) { layerIdList << layerEntryIt.key(); toleranceList << QString::number( layerEntryIt->tolerance, 'f' ); if ( layerEntryIt->checked ) { enabledList << "enabled"; } else { enabledList << "disabled"; } if ( layerEntryIt->snapTo == 0 ) { snapToList << "to_vertex"; } else if ( layerEntryIt->snapTo == 1 ) { snapToList << "to_segment"; } else //to vertex and segment { snapToList << "to_vertex_and_segment"; } } if ( mSnappingLayerSettings.size() > 0 ) { QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingList", layerIdList ); QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnapToList", snapToList ); QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingToleranceList", toleranceList ); QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingEnabledList", enabledList ); } //todo XXX set canvas colour emit refresh(); }
//when user clicks apply button void QgsProjectProperties::apply() { // Set the map units // Note. Qt 3.2.3 and greater have a function selectedId() that // can be used instead of the two part technique here QGis::UnitType mapUnit; if ( radMeters->isChecked() ) { mapUnit = QGis::Meters; } else if ( radFeet->isChecked() ) { mapUnit = QGis::Feet; } else if ( radDMS->isChecked() ) { mapUnit = QGis::DegreesMinutesSeconds; } else { mapUnit = QGis::Degrees; } QgsMapRenderer* myRender = mMapCanvas->mapRenderer(); myRender->setMapUnits( mapUnit ); myRender->setProjectionsEnabled( cbxProjectionEnabled->isChecked() ); // Only change the projection if there is a node in the tree // selected that has an srid. This prevents error if the user // selects a top-level node rather than an actual coordinate // system long myCRSID = projectionSelector->selectedCrsId(); if ( myCRSID ) { QgsCoordinateReferenceSystem srs( myCRSID, QgsCoordinateReferenceSystem::InternalCrsId ); myRender->setDestinationSrs( srs ); QgsDebugMsg( QString( "Selected CRS " ) + srs.description() ); // write the currently selected projections _proj string_ to project settings QgsDebugMsg( QString( "SpatialRefSys/ProjectCRSProj4String: %1" ).arg( projectionSelector->selectedProj4String() ) ); QgsProject::instance()->writeEntry( "SpatialRefSys", "/ProjectCRSProj4String", projectionSelector->selectedProj4String() ); // Set the map units to the projected coordinates if we are projecting if ( isProjected() ) { // If we couldn't get the map units, default to the value in the // projectproperties dialog box (set above) if ( srs.mapUnits() != QGis::UnknownUnit ) myRender->setMapUnits( srs.mapUnits() ); } } // Set the project title QgsProject::instance()->title( title() ); // set the mouse display precision method and the // number of decimal places for the manual option // Note. Qt 3.2.3 and greater have a function selectedId() that // can be used instead of the two part technique here QgsProject::instance()->writeEntry( "PositionPrecision", "/Automatic", radAutomatic->isChecked() ); QgsProject::instance()->writeEntry( "PositionPrecision", "/DecimalPlaces", spinBoxDP->value() ); // Announce that we may have a new display precision setting emit displayPrecisionChanged(); QgsProject::instance()->writeEntry( "Paths", "/Absolute", cbxAbsolutePath->currentIndex() == 0 ); //set the color for selections QColor myColor = pbnSelectionColor->color(); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorRedPart", myColor.red() ); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorGreenPart", myColor.green() ); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorBluePart", myColor.blue() ); QgsProject::instance()->writeEntry( "Gui", "/SelectionColorAlphaPart", myColor.alpha() ); QgsRenderer::setSelectionColor( myColor ); //set the color for canvas myColor = pbnCanvasColor->color(); QgsProject::instance()->writeEntry( "Gui", "/CanvasColorRedPart", myColor.red() ); QgsProject::instance()->writeEntry( "Gui", "/CanvasColorGreenPart", myColor.green() ); QgsProject::instance()->writeEntry( "Gui", "/CanvasColorBluePart", myColor.blue() ); QStringList noIdentifyLayerList; for ( int i = 0; i < twIdentifyLayers->rowCount(); i++ ) { QCheckBox *cb = qobject_cast<QCheckBox *>( twIdentifyLayers->cellWidget( i, 2 ) ); if ( cb && !cb->isChecked() ) { QString id = twIdentifyLayers->item( i, 0 )->data( Qt::UserRole ).toString(); noIdentifyLayerList << id; } } QgsProject::instance()->writeEntry( "Identify", "/disabledLayers", noIdentifyLayerList ); //todo XXX set canvas color emit refresh(); }