Skip to content

Commit 7f142ad

Browse files
committedOct 15, 2018
Clear errors on stop editing
1 parent d17011e commit 7f142ad

File tree

4 files changed

+63
-19
lines changed

4 files changed

+63
-19
lines changed
 

‎src/app/qgsgeometryvalidationdock.cpp

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ void QgsGeometryValidationDock::setGeometryValidationModel( QgsGeometryValidatio
8585
mErrorListView->setModel( mGeometryValidationModel );
8686

8787
connect( mErrorListView->selectionModel(), &QItemSelectionModel::currentChanged, this, &QgsGeometryValidationDock::onCurrentErrorChanged );
88+
connect( mGeometryValidationModel, &QgsGeometryValidationModel::dataChanged, this, &QgsGeometryValidationDock::onDataChanged );
8889
connect( mGeometryValidationModel, &QgsGeometryValidationModel::rowsRemoved, this, &QgsGeometryValidationDock::updateCurrentError );
8990
connect( mGeometryValidationModel, &QgsGeometryValidationModel::rowsInserted, this, &QgsGeometryValidationDock::onRowsInserted );
9091
}
@@ -141,6 +142,15 @@ void QgsGeometryValidationDock::updateLayerTransform()
141142
mLayerTransform = QgsCoordinateTransform( mMapCanvas->currentLayer()->crs(), mMapCanvas->mapSettings().destinationCrs(), mMapCanvas->mapSettings().transformContext() );
142143
}
143144

145+
void QgsGeometryValidationDock::onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles )
146+
{
147+
Q_UNUSED( bottomRight )
148+
Q_UNUSED( roles )
149+
150+
if ( currentIndex() == topLeft )
151+
updateCurrentError();
152+
}
153+
144154
void QgsGeometryValidationDock::onRowsInserted()
145155
{
146156
if ( !isVisible() )
@@ -162,9 +172,15 @@ void QgsGeometryValidationDock::setGeometryValidationService( QgsGeometryValidat
162172

163173
void QgsGeometryValidationDock::updateCurrentError()
164174
{
175+
if ( mGeometryValidationModel->rowCount() == 0 )
176+
mErrorListView->selectionModel()->clearCurrentIndex();
177+
165178
mFeatureRubberband->hide();
179+
mFeatureRubberband->update();
166180
mErrorRubberband->hide();
181+
mErrorRubberband->update();
167182
mErrorLocationRubberband->hide();
183+
mErrorLocationRubberband->update();
168184

169185
onCurrentErrorChanged( currentIndex(), QModelIndex() );
170186
}
@@ -200,31 +216,36 @@ void QgsGeometryValidationDock::onCurrentErrorChanged( const QModelIndex &curren
200216
delete w;
201217

202218
delete mResolutionWidget->layout();
203-
const QStringList resolutionMethods = error->check()->resolutionMethods();
204-
QGridLayout *layout = new QGridLayout( mResolutionWidget );
205-
int resolutionIndex = 0;
206-
for ( const QString &resolutionMethod : resolutionMethods )
219+
220+
if ( error->status() != QgsGeometryCheckError::StatusFixed )
207221
{
208-
QToolButton *resolveBtn = new QToolButton( mResolutionWidget );
209-
resolveBtn->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCheckGeometry.svg" ) ) );
210-
layout->addWidget( resolveBtn, resolutionIndex, 0 );
211-
QLabel *resolveLabel = new QLabel( resolutionMethod, mResolutionWidget );
212-
resolveLabel->setWordWrap( true );
213-
layout->addWidget( resolveLabel, resolutionIndex, 1 );
214-
connect( resolveBtn, &QToolButton::clicked, this, [resolutionIndex, error, this]()
222+
const QStringList resolutionMethods = error->check()->resolutionMethods();
223+
QGridLayout *layout = new QGridLayout( mResolutionWidget );
224+
int resolutionIndex = 0;
225+
for ( const QString &resolutionMethod : resolutionMethods )
215226
{
216-
mGeometryValidationService->fixError( error, resolutionIndex );
217-
} );
218-
resolutionIndex++;
227+
QToolButton *resolveBtn = new QToolButton( mResolutionWidget );
228+
resolveBtn->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCheckGeometry.svg" ) ) );
229+
layout->addWidget( resolveBtn, resolutionIndex, 0 );
230+
QLabel *resolveLabel = new QLabel( resolutionMethod, mResolutionWidget );
231+
resolveLabel->setWordWrap( true );
232+
layout->addWidget( resolveLabel, resolutionIndex, 1 );
233+
connect( resolveBtn, &QToolButton::clicked, this, [resolutionIndex, error, this]()
234+
{
235+
mGeometryValidationService->fixError( error, resolutionIndex );
236+
} );
237+
resolutionIndex++;
238+
}
239+
240+
mResolutionWidget->setLayout( layout );
241+
242+
showHighlight( current );
219243
}
220-
mResolutionWidget->setLayout( layout );
221244
}
222245

223246
bool hasFeature = !FID_IS_NULL( current.data( QgsGeometryValidationModel::ErrorFeatureIdRole ) );
224247
mZoomToFeatureButton->setEnabled( hasFeature );
225248

226-
showHighlight( current );
227-
228249
switch ( mLastZoomToAction )
229250
{
230251
case ZoomToProblem:

‎src/app/qgsgeometryvalidationdock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class QgsGeometryValidationDock : public QgsDockWidget, public Ui_QgsGeometryVal
5252
void zoomToFeature();
5353
void triggerTopologyChecks();
5454
void updateLayerTransform();
55+
void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
5556
void onRowsInserted();
5657

5758
private:

‎src/app/qgsgeometryvalidationservice.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer
143143
}
144144
}
145145

146+
void QgsGeometryValidationService::onEditingStopped( QgsVectorLayer *layer )
147+
{
148+
cancelTopologyCheck( layer );
149+
clearTopologyChecks( layer );
150+
}
151+
146152
void QgsGeometryValidationService::cleanupLayerChecks( QgsVectorLayer *layer )
147153
{
148154
if ( !mLayerChecks.contains( layer ) )
@@ -256,6 +262,11 @@ void QgsGeometryValidationService::enableLayerChecks( QgsVectorLayer *layer )
256262
{
257263
onBeforeCommitChanges( layer );
258264
}, Qt::UniqueConnection );
265+
checkInformation.connections
266+
<< connect( layer, &QgsVectorLayer::editingStopped, this, [this, layer]()
267+
{
268+
onEditingStopped( layer );
269+
}, Qt::UniqueConnection );
259270
}
260271

261272
void QgsGeometryValidationService::cancelTopologyCheck( QgsVectorLayer *layer )
@@ -279,6 +290,14 @@ void QgsGeometryValidationService::cancelTopologyCheck( QgsVectorLayer *layer )
279290
}
280291
}
281292

293+
void QgsGeometryValidationService::clearTopologyChecks( QgsVectorLayer *layer )
294+
{
295+
QList<std::shared_ptr<QgsGeometryCheckError>> &allErrors = mLayerChecks[layer].topologyCheckErrors;
296+
allErrors.clear();
297+
298+
emit topologyChecksCleared( layer );
299+
}
300+
282301
void QgsGeometryValidationService::invalidateTopologyChecks( QgsVectorLayer *layer )
283302
{
284303
cancelTopologyCheck( layer );
@@ -309,8 +328,8 @@ void QgsGeometryValidationService::processFeature( QgsVectorLayer *layer, QgsFea
309328

310329
void QgsGeometryValidationService::triggerTopologyChecks( QgsVectorLayer *layer )
311330
{
312-
emit topologyChecksCleared( layer );
313331
cancelTopologyCheck( layer );
332+
clearTopologyChecks( layer );
314333

315334
QgsFeatureIds affectedFeatureIds;
316335
if ( layer->editBuffer() )
@@ -327,7 +346,7 @@ void QgsGeometryValidationService::triggerTopologyChecks( QgsVectorLayer *layer
327346
}
328347

329348
QList<std::shared_ptr<QgsGeometryCheckError>> &allErrors = mLayerChecks[layer].topologyCheckErrors;
330-
allErrors.clear();
349+
331350
QMap<QString, QgsFeatureIds> layerIds;
332351

333352
QgsFeatureRequest request = QgsFeatureRequest( affectedFeatureIds ).setSubsetOfAttributes( QgsAttributeList() );

‎src/app/qgsgeometryvalidationservice.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,16 @@ class QgsGeometryValidationService : public QObject
7979
void onGeometryChanged( QgsVectorLayer *layer, QgsFeatureId fid, const QgsGeometry &geometry );
8080
void onFeatureDeleted( QgsVectorLayer *layer, QgsFeatureId fid );
8181
void onBeforeCommitChanges( QgsVectorLayer *layer );
82+
void onEditingStopped( QgsVectorLayer *layer );
8283

8384
private:
8485
void cleanupLayerChecks( QgsVectorLayer *layer );
8586
void enableLayerChecks( QgsVectorLayer *layer );
8687

8788
void cancelTopologyCheck( QgsVectorLayer *layer );
8889

90+
void clearTopologyChecks( QgsVectorLayer *layer );
91+
8992
void invalidateTopologyChecks( QgsVectorLayer *layer );
9093

9194
void processFeature( QgsVectorLayer *layer, QgsFeatureId fid );

0 commit comments

Comments
 (0)
Please sign in to comment.