Save layer changes on successful repair

when there are topology errors which are fixed subsequently, make sure that the layer can be saved again
This commit is contained in:
Matthias Kuhn 2018-12-04 13:44:03 +01:00
parent cafa652c02
commit 9e0b9e76e2
No known key found for this signature in database
GPG Key ID: 7A7F1A1C90C3E6A7
2 changed files with 7 additions and 1 deletions

View File

@ -145,7 +145,7 @@ void QgsGeometryValidationService::onFeatureDeleted( QgsVectorLayer *layer, QgsF
void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer ) void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer )
{ {
if ( !mLayerChecks[layer].topologyChecks.empty() ) // TODO && topologyChecks not fulfilled if ( !mBypassChecks && !mLayerChecks[layer].topologyChecks.empty() )
{ {
if ( !layer->allowCommit() ) if ( !layer->allowCommit() )
{ {
@ -461,7 +461,9 @@ void QgsGeometryValidationService::triggerTopologyChecks( QgsVectorLayer *layer
} }
if ( allErrors.empty() && mLayerChecks[layer].singleFeatureCheckErrors.empty() && mLayerChecks[layer].commitPending ) if ( allErrors.empty() && mLayerChecks[layer].singleFeatureCheckErrors.empty() && mLayerChecks[layer].commitPending )
{ {
mBypassChecks = true;
layer->commitChanges(); layer->commitChanges();
mBypassChecks = false;
mMessageBar->popWidget( mMessageBarItem ); mMessageBar->popWidget( mMessageBarItem );
mMessageBarItem = nullptr; mMessageBarItem = nullptr;
} }

View File

@ -122,6 +122,10 @@ class QgsGeometryValidationService : public QObject
QgsMessageBar *mMessageBar = nullptr; QgsMessageBar *mMessageBar = nullptr;
QgsMessageBarItem *mMessageBarItem = nullptr; QgsMessageBarItem *mMessageBarItem = nullptr;
// when checks do complete successfully and changes need to be saved
// this variable is used to indicate that it's safe to bypass the checks
bool mBypassChecks = false;
}; };
#endif // QGSGEOMETRYVALIDATIONSERVICE_H #endif // QGSGEOMETRYVALIDATIONSERVICE_H