Skip to content

Commit d527fed

Browse files
committedOct 15, 2018
Autosave after successful check
1 parent 417fa06 commit d527fed

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed
 

‎src/app/qgsgeometryvalidationservice.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer
139139
{
140140
emit warning( tr( "Can not save yet, we'll need to run some topology checks on your dataset first..." ) );
141141
}
142+
143+
mLayerChecks[layer].commitPending = true;
144+
142145
triggerTopologyChecks( layer );
143146
}
144147
}
@@ -193,7 +196,7 @@ void QgsGeometryValidationService::enableLayerChecks( QgsVectorLayer *layer )
193196
precision = 8;
194197
}
195198

196-
checkInformation.context = qgis::make_unique<QgsGeometryCheckContext>( precision, mProject->crs(), mProject->transformContext() );
199+
checkInformation.context = qgis::make_unique<QgsGeometryCheckContext>( 10, mProject->crs(), mProject->transformContext() );
197200

198201
QList<QgsGeometryCheck *> layerChecks;
199202

@@ -311,6 +314,7 @@ void QgsGeometryValidationService::processFeature( QgsVectorLayer *layer, QgsFea
311314
QgsFeature feature = layer->getFeature( fid );
312315

313316
const auto &checks = mLayerChecks[layer].singleFeatureChecks;
317+
mLayerChecks[layer].singleFeatureCheckErrors.remove( fid );
314318

315319
// The errors are going to be sent out via a signal. We cannot keep ownership in here (or can we?)
316320
// nor can we be sure that a single slot is connected to the signal. So make it a shared_ptr.
@@ -323,6 +327,9 @@ void QgsGeometryValidationService::processFeature( QgsVectorLayer *layer, QgsFea
323327
allErrors.append( std::shared_ptr<QgsSingleGeometryCheckError>( error ) );
324328
}
325329

330+
if ( !allErrors.empty() )
331+
mLayerChecks[layer].singleFeatureCheckErrors.insert( fid, allErrors );
332+
326333
emit geometryCheckCompleted( layer, fid, allErrors );
327334
}
328335

@@ -408,6 +415,10 @@ void QgsGeometryValidationService::triggerTopologyChecks( QgsVectorLayer *layer
408415
futureWatcher->deleteLater();
409416
if ( mLayerChecks[layer].topologyCheckFutureWatcher == futureWatcher )
410417
mLayerChecks[layer].topologyCheckFutureWatcher = nullptr;
418+
419+
if ( allErrors.empty() && !mLayerChecks[layer].singleFeatureCheckErrors.empty() && mLayerChecks[layer].commitPending )
420+
layer->commitChanges();
421+
mLayerChecks[layer].commitPending = false;
411422
} );
412423

413424
mLayerChecks[layer].topologyCheckFutureWatcher = futureWatcher;

‎src/app/qgsgeometryvalidationservice.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,14 @@ class QgsGeometryValidationService : public QObject
9898
struct VectorLayerCheckInformation
9999
{
100100
QList< QgsSingleGeometryCheck * > singleFeatureChecks;
101+
QMap<QgsFeatureId, QList< std::shared_ptr<QgsSingleGeometryCheckError > > > singleFeatureCheckErrors;
101102
QList< QgsGeometryCheck *> topologyChecks;
102103
QFutureWatcher<void> *topologyCheckFutureWatcher = nullptr;
103104
QList<QgsFeedback *> topologyCheckFeedbacks; // will be deleted when topologyCheckFutureWatcher is delteed
104105
QList<std::shared_ptr<QgsGeometryCheckError>> topologyCheckErrors;
105106
QList<QMetaObject::Connection> connections;
106107
std::shared_ptr<QgsGeometryCheckContext> context;
108+
bool commitPending = false;
107109
};
108110

109111
QReadWriteLock mTopologyCheckLock;

0 commit comments

Comments
 (0)
Please sign in to comment.