Skip to content

Commit 43e905d

Browse files
committedApr 25, 2018
Add support for visible features in onFeatureAdded, onGeometryChanged and onAttributeValueChanged
1 parent 5e5fdf9 commit 43e905d

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed
 

‎src/core/qgspointlocator.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,7 @@ QgsPointLocator::QgsPointLocator( QgsVectorLayer *layer, const QgsCoordinateRefe
636636
connect( mLayer, &QgsVectorLayer::featureAdded, this, &QgsPointLocator::onFeatureAdded );
637637
connect( mLayer, &QgsVectorLayer::featureDeleted, this, &QgsPointLocator::onFeatureDeleted );
638638
connect( mLayer, &QgsVectorLayer::geometryChanged, this, &QgsPointLocator::onGeometryChanged );
639+
connect( mLayer, &QgsVectorLayer::attributeValueChanged, this, &QgsPointLocator::onAttributeValueChanged );
639640
connect( mLayer, &QgsVectorLayer::dataChanged, this, &QgsPointLocator::destroyIndex );
640641
}
641642

@@ -834,6 +835,30 @@ void QgsPointLocator::onFeatureAdded( QgsFeatureId fid )
834835
if ( !f.hasGeometry() )
835836
return;
836837

838+
std::unique_ptr< QgsFeatureRenderer > renderer( mLayer->renderer() ? mLayer->renderer()->clone() : nullptr );
839+
QgsRenderContext *ctx = nullptr;
840+
if ( mContext )
841+
{
842+
mContext->expressionContext() << QgsExpressionContextUtils::layerScope( mLayer );
843+
ctx = mContext.get();
844+
if ( renderer && ctx )
845+
{
846+
bool pass = false;
847+
renderer->startRender( *ctx, mLayer->fields() );
848+
849+
ctx->expressionContext().setFeature( f );
850+
if ( !renderer->willRenderFeature( f, *ctx ) )
851+
{
852+
pass = true;
853+
}
854+
855+
renderer->stopRender( *ctx );
856+
renderer.release();
857+
if ( pass )
858+
return;
859+
}
860+
}
861+
837862
if ( mTransform.isValid() )
838863
{
839864
try
@@ -884,6 +909,14 @@ void QgsPointLocator::onGeometryChanged( QgsFeatureId fid, const QgsGeometry &ge
884909
onFeatureAdded( fid );
885910
}
886911

912+
void QgsPointLocator::onAttributeValueChanged( QgsFeatureId fid, int idx, const QVariant &value )
913+
{
914+
Q_UNUSED( idx );
915+
Q_UNUSED( value );
916+
onFeatureDeleted( fid );
917+
onFeatureAdded( fid );
918+
}
919+
887920

888921
QgsPointLocator::Match QgsPointLocator::nearestVertex( const QgsPointXY &point, double tolerance, MatchFilter *filter )
889922
{

‎src/core/qgspointlocator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ class CORE_EXPORT QgsPointLocator : public QObject
274274
void onFeatureAdded( QgsFeatureId fid );
275275
void onFeatureDeleted( QgsFeatureId fid );
276276
void onGeometryChanged( QgsFeatureId fid, const QgsGeometry &geom );
277+
void onAttributeValueChanged( QgsFeatureId fid, int idx, const QVariant &value );
277278

278279
private:
279280
//! Storage manager

0 commit comments

Comments
 (0)
Please sign in to comment.