Skip to content

Commit 1e29996

Browse files
committed
[processing] Allow QgsVectorLayerSelectedFeatureSource to
create expression context scopes Allows algorithms which require the underlying layer scope to operate correctly when running in selected features only mode. Fixes #17170 (cherry-picked from d5617b8)
1 parent c1af6ec commit 1e29996

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

python/core/qgsvectorlayerfeatureiterator.sip.in

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ Setup the simplification of geometries to fetch using the specified simplify met
153153

154154

155155

156-
class QgsVectorLayerSelectedFeatureSource : QgsFeatureSource
156+
class QgsVectorLayerSelectedFeatureSource : QgsFeatureSource, QgsExpressionContextScopeGenerator
157157
{
158158
%Docstring
159159
QgsFeatureSource subclass for the selected features from a :py:class:`QgsVectorLayer`.
@@ -185,6 +185,8 @@ the QgsVectorLayerSelectedFeatureSource will not be reflected.
185185

186186
virtual QString sourceName() const;
187187

188+
virtual QgsExpressionContextScope *createExpressionContextScope() const;
189+
188190

189191

190192
};

src/core/qgsvectorlayerfeatureiterator.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,7 @@ QgsVectorLayerSelectedFeatureSource::QgsVectorLayerSelectedFeatureSource( QgsVec
10831083
, mSelectedFeatureIds( layer->selectedFeatureIds() )
10841084
, mWkbType( layer->wkbType() )
10851085
, mName( layer->name() )
1086+
, mLayer( layer )
10861087
{}
10871088

10881089
QgsFeatureIterator QgsVectorLayerSelectedFeatureSource::getFeatures( const QgsFeatureRequest &request ) const
@@ -1127,3 +1128,11 @@ QString QgsVectorLayerSelectedFeatureSource::sourceName() const
11271128
{
11281129
return mName;
11291130
}
1131+
1132+
QgsExpressionContextScope *QgsVectorLayerSelectedFeatureSource::createExpressionContextScope() const
1133+
{
1134+
if ( mLayer )
1135+
return mLayer->createExpressionContextScope();
1136+
else
1137+
return nullptr;
1138+
}

src/core/qgsvectorlayerfeatureiterator.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
#include "qgsfields.h"
2222
#include "qgscoordinatereferencesystem.h"
2323
#include "qgsfeaturesource.h"
24+
#include "qgsexpressioncontextscopegenerator.h"
2425

26+
#include <QPointer>
2527
#include <QSet>
2628
#include <memory>
2729

@@ -285,7 +287,7 @@ class CORE_EXPORT QgsVectorLayerFeatureIterator : public QgsAbstractFeatureItera
285287
* QgsFeatureSource subclass for the selected features from a QgsVectorLayer.
286288
* \since QGIS 3.0
287289
*/
288-
class CORE_EXPORT QgsVectorLayerSelectedFeatureSource : public QgsFeatureSource
290+
class CORE_EXPORT QgsVectorLayerSelectedFeatureSource : public QgsFeatureSource, public QgsExpressionContextScopeGenerator
289291
{
290292
public:
291293

@@ -302,6 +304,7 @@ class CORE_EXPORT QgsVectorLayerSelectedFeatureSource : public QgsFeatureSource
302304
QgsWkbTypes::Type wkbType() const override;
303305
long featureCount() const override;
304306
QString sourceName() const override;
307+
QgsExpressionContextScope *createExpressionContextScope() const override;
305308

306309

307310
private:
@@ -311,6 +314,7 @@ class CORE_EXPORT QgsVectorLayerSelectedFeatureSource : public QgsFeatureSource
311314
QgsFeatureIds mSelectedFeatureIds;
312315
QgsWkbTypes::Type mWkbType = QgsWkbTypes::Unknown;
313316
QString mName;
317+
QPointer< QgsVectorLayer > mLayer;
314318

315319
};
316320

0 commit comments

Comments
 (0)