From 0b1fd34c3e1470c6c1c1a699c581b941cfb32a03 Mon Sep 17 00:00:00 2001 From: "Juergen E. Fischer" Date: Tue, 24 Jan 2012 09:43:55 +0100 Subject: [PATCH] QgsVectorLayer: use featureAtId() in selectedFeatures() (fixes #4856) --- src/core/qgsvectorlayer.cpp | 39 ++++--------------------------------- 1 file changed, 4 insertions(+), 35 deletions(-) diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index d3affe10b48..3b742ed0f0c 100755 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -3971,44 +3971,13 @@ const QgsFeatureIds& QgsVectorLayer::selectedFeaturesIds() const QgsFeatureList QgsVectorLayer::selectedFeatures() { - if ( !mDataProvider ) - { - return QgsFeatureList(); - } - QgsFeatureList features; - QgsAttributeList allAttrs = mDataProvider->attributeIndexes(); - mFetchAttributes = pendingAllAttributesList(); - - for ( QgsFeatureIds::iterator it = mSelectedFeatureIds.begin(); it != mSelectedFeatureIds.end(); ++it ) + foreach( QgsFeatureId fid, mSelectedFeatureIds ) { - QgsFeature feat; - - bool selectionIsAddedFeature = false; - - // Check this selected item against the uncommitted added features - for ( QgsFeatureList::iterator iter = mAddedFeatures.begin(); iter != mAddedFeatures.end(); ++iter ) - { - if ( *it == iter->id() ) - { - feat = QgsFeature( *iter ); - selectionIsAddedFeature = true; - break; - } - } - - // if the geometry is not newly added, get it from provider - if ( !selectionIsAddedFeature ) - { - mDataProvider->featureAtId( *it, feat, true, allAttrs ); - } - - updateFeatureAttributes( feat ); - updateFeatureGeometry( feat ); - - features << feat; - } // for each selected + features.push_back( QgsFeature() ); + featureAtId( fid, features.back(), true, true ); + } return features; }