@@ -25,6 +25,8 @@ email : matthias@opengis.ch
25
25
#include " qgsvectorlayerfeaturepool.h"
26
26
#include " qgsfeedback.h"
27
27
#include " qgsreadwritelocker.h"
28
+ #include " qgsmessagebar.h"
29
+ #include " qgsmessagebaritem.h"
28
30
29
31
#include < QtConcurrent>
30
32
#include < QFutureWatcher>
@@ -139,7 +141,7 @@ void QgsGeometryValidationService::onBeforeCommitChanges( QgsVectorLayer *layer
139
141
{
140
142
if ( !layer->allowCommit () )
141
143
{
142
- emit warning ( tr ( " Can not save yet, we'll need to run some topology checks on your dataset first ..." ) );
144
+ showMessage ( tr ( " Running geometry validation checks before saving ..." ) );
143
145
}
144
146
145
147
mLayerChecks [layer].commitPending = true ;
@@ -154,6 +156,14 @@ void QgsGeometryValidationService::onEditingStopped( QgsVectorLayer *layer )
154
156
clearTopologyChecks ( layer );
155
157
}
156
158
159
+ void QgsGeometryValidationService::showMessage ( const QString &message )
160
+ {
161
+ mMessageBar ->popWidget ( mMessageBarItem );
162
+ mMessageBarItem = QgsMessageBar::createMessage ( tr ( " Geometry Validation" ), message );
163
+ mMessageBarItem ->setDuration ( 5 );
164
+ mMessageBar ->pushItem ( mMessageBarItem );
165
+ }
166
+
157
167
void QgsGeometryValidationService::cleanupLayerChecks ( QgsVectorLayer *layer )
158
168
{
159
169
if ( !mLayerChecks .contains ( layer ) )
@@ -335,6 +345,11 @@ void QgsGeometryValidationService::processFeature( QgsVectorLayer *layer, QgsFea
335
345
emit geometryCheckCompleted ( layer, fid, allErrors );
336
346
}
337
347
348
+ void QgsGeometryValidationService::setMessageBar ( QgsMessageBar *messageBar )
349
+ {
350
+ mMessageBar = messageBar;
351
+ }
352
+
338
353
void QgsGeometryValidationService::triggerTopologyChecks ( QgsVectorLayer *layer )
339
354
{
340
355
cancelTopologyCheck ( layer );
@@ -418,8 +433,20 @@ void QgsGeometryValidationService::triggerTopologyChecks( QgsVectorLayer *layer
418
433
if ( mLayerChecks [layer].topologyCheckFutureWatcher == futureWatcher )
419
434
mLayerChecks [layer].topologyCheckFutureWatcher = nullptr ;
420
435
421
- if ( allErrors.empty () && !mLayerChecks [layer].singleFeatureCheckErrors .empty () && mLayerChecks [layer].commitPending )
436
+ if ( !allErrors.empty () || !mLayerChecks [layer].singleFeatureCheckErrors .empty () )
437
+ {
438
+ if ( mLayerChecks [layer].commitPending )
439
+ showMessage ( tr ( " Geometry errors have been found. Please fix the errors before saving the layer." ) );
440
+ else
441
+ showMessage ( tr ( " Geometry errors have been found." ) );
442
+ }
443
+ if ( allErrors.empty () && mLayerChecks [layer].singleFeatureCheckErrors .empty () && mLayerChecks [layer].commitPending )
444
+ {
422
445
layer->commitChanges ();
446
+ mMessageBar ->popWidget ( mMessageBarItem );
447
+ mMessageBarItem = nullptr ;
448
+ }
449
+
423
450
mLayerChecks [layer].commitPending = false ;
424
451
} );
425
452
0 commit comments