From f3261e1037789029d8d4bf845fda654c40118b93 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Mon, 1 Oct 2018 17:00:47 +0200 Subject: [PATCH] Centralize invalidateTopologyChecks handling --- src/app/qgsgeometryvalidationservice.cpp | 26 ++++++++++++++---------- src/app/qgsgeometryvalidationservice.h | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/app/qgsgeometryvalidationservice.cpp b/src/app/qgsgeometryvalidationservice.cpp index 2ed2f43f877c..65057a394f1d 100644 --- a/src/app/qgsgeometryvalidationservice.cpp +++ b/src/app/qgsgeometryvalidationservice.cpp @@ -63,22 +63,25 @@ void QgsGeometryValidationService::onFeatureAdded( QgsVectorLayer *layer, QgsFea { if ( !mLayerChecks[layer].topologyChecks.empty() ) { - // TODO: Cancel topology checks - layer->setAllowCommit( false ); + invalidateTopologyChecks( layer ); } processFeature( layer, fid ); } void QgsGeometryValidationService::onGeometryChanged( QgsVectorLayer *layer, QgsFeatureId fid, const QgsGeometry &geometry ) { + Q_UNUSED( geometry ) + // It would be nice to use the geometry here for the tests. + // But: + // 1. other codepaths to the checks also have no geometry (feature added / feature deleted) + // 2. and looking it up from the edit buffer (in memory) is really fast. + // so in short: it's still a good idea, but not as important as on first thought. + if ( !mLayerChecks[layer].topologyChecks.empty() ) { - // TODO: Cancel topology checks - layer->setAllowCommit( false ); + invalidateTopologyChecks( layer ); } - Q_UNUSED( geometry ) - cancelChecks( layer, fid ); processFeature( layer, fid ); } @@ -86,11 +89,11 @@ void QgsGeometryValidationService::onFeatureDeleted( QgsVectorLayer *layer, QgsF { if ( !mLayerChecks[layer].topologyChecks.empty() ) { - // TODO: Cancel topology checks - layer->setAllowCommit( false ); + invalidateTopologyChecks( layer ); } - cancelChecks( layer, fid ); + // There should be no geometry errors on an inexistent feature, right? + emit geometryCheckCompleted( layer, fid, QList>() ); } void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer ) @@ -220,9 +223,10 @@ void QgsGeometryValidationService::cancelTopologyCheck( QgsVectorLayer *layer ) } } -void QgsGeometryValidationService::cancelChecks( QgsVectorLayer *layer, QgsFeatureId fid ) +void QgsGeometryValidationService::invalidateTopologyChecks( QgsVectorLayer *layer ) { - + cancelTopologyCheck( layer ); + layer->setAllowCommit( false ); } void QgsGeometryValidationService::processFeature( QgsVectorLayer *layer, QgsFeatureId fid ) diff --git a/src/app/qgsgeometryvalidationservice.h b/src/app/qgsgeometryvalidationservice.h index 78bc1127e948..daaebe50fc78 100644 --- a/src/app/qgsgeometryvalidationservice.h +++ b/src/app/qgsgeometryvalidationservice.h @@ -84,7 +84,7 @@ class QgsGeometryValidationService : public QObject void cancelTopologyCheck( QgsVectorLayer *layer ); - void cancelChecks( QgsVectorLayer *layer, QgsFeatureId fid ); + void invalidateTopologyChecks( QgsVectorLayer *layer ); void processFeature( QgsVectorLayer *layer, QgsFeatureId fid );