Skip to content

Commit 146dca4

Browse files
committedMar 18, 2019
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 de6a27d commit 146dca4

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed
 

‎src/app/qgsgeometryvalidationmodel.cpp‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ QgsGeometryValidationModel::QgsGeometryValidationModel( QgsGeometryValidationSer
2525
: QAbstractItemModel( parent )
2626
, mGeometryValidationService( geometryValidationService )
2727
{
28+
connect( mGeometryValidationService, &QgsGeometryValidationService::singleGeometryCheckCleared, this, &QgsGeometryValidationModel::onSingleGeometryCheckCleared );
2829
connect( mGeometryValidationService, &QgsGeometryValidationService::geometryCheckCompleted, this, &QgsGeometryValidationModel::onGeometryCheckCompleted );
2930
connect( mGeometryValidationService, &QgsGeometryValidationService::geometryCheckStarted, this, &QgsGeometryValidationModel::onGeometryCheckStarted );
3031
connect( mGeometryValidationService, &QgsGeometryValidationService::topologyChecksUpdated, this, &QgsGeometryValidationModel::onTopologyChecksUpdated );
@@ -248,6 +249,24 @@ void QgsGeometryValidationModel::setCurrentLayer( QgsVectorLayer *currentLayer )
248249
endResetModel();
249250
}
250251

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

‎src/app/qgsgeometryvalidationmodel.h‎

Lines changed: 1 addition & 0 deletions
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‎

Lines changed: 6 additions & 0 deletions
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‎

Lines changed: 7 additions & 0 deletions
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)
Please sign in to comment.