Skip to content

Commit ef34ed8

Browse files
committed
Allow deactivating is valid checks in an edit session
If an is valid check is deactivated in an ongoing edit session, all check results are invalidated and removed. This will help a user to save his edits if he wants to even if is valid checks have been activated before.
1 parent c748aac commit ef34ed8

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)