Skip to content

Commit 77f2b60

Browse files
authored
Merge pull request #9298 from m-kuhn/is-valid-check-results-deactivate
[geometry validation] Allow deactivating is valid checks in an edit session
2 parents 22b052d + ef34ed8 commit 77f2b60

4 files changed

+33
-0
lines changed

src/app/qgsgeometryvalidationmodel.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ QgsGeometryValidationModel::QgsGeometryValidationModel( QgsGeometryValidationSer
2727
: QAbstractItemModel( parent )
2828
, mGeometryValidationService( geometryValidationService )
2929
{
30+
connect( mGeometryValidationService, &QgsGeometryValidationService::singleGeometryCheckCleared, this, &QgsGeometryValidationModel::onSingleGeometryCheckCleared );
3031
connect( mGeometryValidationService, &QgsGeometryValidationService::geometryCheckCompleted, this, &QgsGeometryValidationModel::onGeometryCheckCompleted );
3132
connect( mGeometryValidationService, &QgsGeometryValidationService::geometryCheckStarted, this, &QgsGeometryValidationModel::onGeometryCheckStarted );
3233
connect( mGeometryValidationService, &QgsGeometryValidationService::topologyChecksUpdated, this, &QgsGeometryValidationModel::onTopologyChecksUpdated );
@@ -250,6 +251,24 @@ void QgsGeometryValidationModel::setCurrentLayer( QgsVectorLayer *currentLayer )
250251
endResetModel();
251252
}
252253

254+
void QgsGeometryValidationModel::onSingleGeometryCheckCleared( QgsVectorLayer *layer )
255+
{
256+
auto &layerErrors = mErrorStorage[layer];
257+
258+
if ( mCurrentLayer == layer && !layerErrors.empty() )
259+
{
260+
beginRemoveRows( QModelIndex(), 0, layerErrors.size() - 1 );
261+
}
262+
263+
layerErrors.clear();
264+
265+
if ( mCurrentLayer == layer && !layerErrors.empty() )
266+
{
267+
endRemoveRows();
268+
}
269+
270+
}
271+
253272
void QgsGeometryValidationModel::onGeometryCheckCompleted( QgsVectorLayer *layer, QgsFeatureId fid, const QList<std::shared_ptr<QgsSingleGeometryCheckError>> &errors )
254273
{
255274
auto &layerErrors = mErrorStorage[layer];

src/app/qgsgeometryvalidationmodel.h

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class QgsGeometryValidationModel : public QAbstractItemModel
5353
void setCurrentLayer( QgsVectorLayer *currentLayer );
5454

5555
private slots:
56+
void onSingleGeometryCheckCleared( QgsVectorLayer *layer );
5657
void onGeometryCheckCompleted( QgsVectorLayer *layer, QgsFeatureId fid, const QList<std::shared_ptr<QgsSingleGeometryCheckError> > &errors );
5758
void onGeometryCheckStarted( QgsVectorLayer *layer, QgsFeatureId fid );
5859
void onTopologyChecksUpdated( QgsVectorLayer *layer, const QList<std::shared_ptr<QgsGeometryCheckError> > &errors );

src/app/qgsgeometryvalidationservice.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,12 @@ void QgsGeometryValidationService::enableLayerChecks( QgsVectorLayer *layer )
250250
singleGeometryChecks.append( dynamic_cast<QgsSingleGeometryCheck *>( check ) );
251251
}
252252

253+
if ( singleGeometryChecks.empty() )
254+
{
255+
mLayerChecks[layer].singleFeatureCheckErrors.clear();
256+
emit singleGeometryCheckCleared( layer );
257+
}
258+
253259
checkInformation.singleFeatureChecks = singleGeometryChecks;
254260

255261
// Topology checks

src/app/qgsgeometryvalidationservice.h

+7
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ class QgsGeometryValidationService : public QObject
7171
void setMessageBar( QgsMessageBar *messageBar );
7272

7373
signals:
74+
75+
/**
76+
* Emitted when geometry checks for this layer have been disabled and
77+
* any existing cached result should be cleared.
78+
*/
79+
void singleGeometryCheckCleared( QgsVectorLayer *layer );
80+
7481
void geometryCheckStarted( QgsVectorLayer *layer, QgsFeatureId fid );
7582
void geometryCheckCompleted( QgsVectorLayer *layer, QgsFeatureId fid, const QList<std::shared_ptr<QgsSingleGeometryCheckError>> &errors );
7683
void topologyChecksUpdated( QgsVectorLayer *layer, const QList<std::shared_ptr<QgsGeometryCheckError> > &errors );

0 commit comments

Comments
 (0)