[SCM] qgis branch, master, updated. a2ee769957385f4e084c5e8b6ba178a8c877d1db
Giuseppe Sucameli
brush.tyler at gmail.com
Tue Mar 20 13:43:35 UTC 2012
The following commit has been merged in the master branch:
commit db1c401dd90e0e7ef6c7dc4e76113427dcfa32f1
Author: Giuseppe Sucameli <brush.tyler at gmail.com>
Date: Mon Mar 12 08:38:41 2012 +0100
"Run feature action" tool does the action for all the matching features (fix #5126)
diff --git a/src/app/qgsmaptoolfeatureaction.cpp b/src/app/qgsmaptoolfeatureaction.cpp
index 72e3232..7ab3873 100644
--- a/src/app/qgsmaptoolfeatureaction.cpp
+++ b/src/app/qgsmaptoolfeatureaction.cpp
@@ -72,6 +72,12 @@ void QgsMapToolFeatureAction::canvasReleaseEvent( QMouseEvent *e )
return;
}
+ if ( !mCanvas->layers().contains( layer ) )
+ {
+ // do not run actions on hidden layers
+ return;
+ }
+
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
if ( vlayer->actions()->size() == 0 )
{
@@ -110,7 +116,7 @@ bool QgsMapToolFeatureAction::doAction( QgsVectorLayer *layer, int x, int y )
if ( identifyValue <= 0.0 )
identifyValue = QGis::DEFAULT_IDENTIFY_RADIUS;
- QgsFeature feat;
+ QgsFeatureList featList;
// toLayerCoordinates will throw an exception for an 'invalid' point.
// For example, if you project a world map onto a globe using EPSG 2163
@@ -130,10 +136,8 @@ bool QgsMapToolFeatureAction::doAction( QgsVectorLayer *layer, int x, int y )
layer->select( layer->pendingAllAttributesList(), r, true, true );
QgsFeature f;
- if ( layer->nextFeature( f ) )
- feat = QgsFeature( f );
- else
- return false;
+ while ( layer->nextFeature( f ) )
+ featList << QgsFeature( f );
}
catch ( QgsCsException & cse )
{
@@ -142,15 +146,22 @@ bool QgsMapToolFeatureAction::doAction( QgsVectorLayer *layer, int x, int y )
QgsDebugMsg( QString( "Caught CRS exception %1" ).arg( cse.what() ) );
}
- int action = layer->actions()->defaultAction();
+ if ( featList.size() == 0 )
+ return false;
- // define custom substitutions: layer id and clicked coords
- QMap<QString, QVariant> substitutionMap;
- substitutionMap.insert( "$layerid", layer->id() );
- point = toLayerCoordinates( layer, point );
- substitutionMap.insert( "$clickx", point.x() );
- substitutionMap.insert( "$clicky", point.y() );
+ foreach ( QgsFeature feat, featList )
+ {
+ int actionIdx = layer->actions()->defaultAction();
+
+ // define custom substitutions: layer id and clicked coords
+ QMap<QString, QVariant> substitutionMap;
+ substitutionMap.insert( "$layerid", layer->id() );
+ point = toLayerCoordinates( layer, point );
+ substitutionMap.insert( "$clickx", point.x() );
+ substitutionMap.insert( "$clicky", point.y() );
+
+ layer->actions()->doAction( actionIdx, feat, &substitutionMap );
+ }
- layer->actions()->doAction( action, feat, &substitutionMap );
return true;
}
--
The Quantum GIS in Debian project
More information about the Pkg-grass-devel
mailing list