@@ -40,6 +40,11 @@ QgsAttributeTableFilterModel::QgsAttributeTableFilterModel( QgsMapCanvas *canvas
40
40
setDynamicSortFilter ( true );
41
41
setSortRole ( QgsAttributeTableModel::SortRole );
42
42
connect ( layer (), &QgsVectorLayer::selectionChanged, this , &QgsAttributeTableFilterModel::selectionChanged );
43
+
44
+ mReloadVisibleTimer .setSingleShot ( true );
45
+ connect ( &mReloadVisibleTimer , &QTimer::timeout, this , &QgsAttributeTableFilterModel::reloadVisible );
46
+ mFilterFeaturesTimer .setSingleShot ( true );
47
+ connect ( &mFilterFeaturesTimer , &QTimer::timeout, this , &QgsAttributeTableFilterModel::filterFeatures );
43
48
}
44
49
45
50
bool QgsAttributeTableFilterModel::lessThan ( const QModelIndex &left, const QModelIndex &right ) const
@@ -322,42 +327,42 @@ void QgsAttributeTableFilterModel::setFilterMode( FilterMode filterMode )
322
327
switch ( mFilterMode )
323
328
{
324
329
case ShowVisible:
325
- disconnect ( mCanvas , &QgsMapCanvas::extentsChanged, this , &QgsAttributeTableFilterModel::reloadVisible );
326
- disconnect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::reloadVisible );
327
- disconnect ( layer (), &QgsVectorLayer::geometryChanged, this , &QgsAttributeTableFilterModel::reloadVisible );
328
- disconnect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::reloadVisible );
330
+ disconnect ( mCanvas , &QgsMapCanvas::extentsChanged, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
331
+ disconnect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
332
+ disconnect ( layer (), &QgsVectorLayer::geometryChanged, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
333
+ disconnect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
329
334
break ;
330
335
case ShowAll:
331
336
case ShowEdited:
332
337
case ShowSelected:
333
338
break ;
334
339
case ShowFilteredList:
335
- disconnect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::filterFeatures );
340
+ disconnect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::startTimedFilterFeatures );
341
+ disconnect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::startTimedFilterFeatures );
336
342
disconnect ( layer (), &QgsVectorLayer::attributeValueChanged, this , &QgsAttributeTableFilterModel::onAttributeValueChanged );
337
343
disconnect ( layer (), &QgsVectorLayer::geometryChanged, this , &QgsAttributeTableFilterModel::onGeometryChanged );
338
- disconnect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::filterFeatures );
339
344
break ;
340
345
}
341
346
342
347
// setup new connections
343
348
switch ( filterMode )
344
349
{
345
350
case ShowVisible:
346
- connect ( mCanvas , &QgsMapCanvas::extentsChanged, this , &QgsAttributeTableFilterModel::reloadVisible );
347
- connect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::reloadVisible );
348
- connect ( layer (), &QgsVectorLayer::geometryChanged, this , &QgsAttributeTableFilterModel::reloadVisible );
349
- connect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::reloadVisible );
351
+ connect ( mCanvas , &QgsMapCanvas::extentsChanged, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
352
+ connect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
353
+ connect ( layer (), &QgsVectorLayer::geometryChanged, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
354
+ connect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::startTimedReloadVisible );
350
355
generateListOfVisibleFeatures ();
351
356
break ;
352
357
case ShowAll:
353
358
case ShowEdited:
354
359
case ShowSelected:
355
360
break ;
356
361
case ShowFilteredList:
357
- connect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::filterFeatures );
362
+ connect ( layer (), &QgsVectorLayer::featureAdded, this , &QgsAttributeTableFilterModel::startTimedFilterFeatures );
363
+ connect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::startTimedFilterFeatures );
358
364
connect ( layer (), &QgsVectorLayer::attributeValueChanged, this , &QgsAttributeTableFilterModel::onAttributeValueChanged );
359
365
connect ( layer (), &QgsVectorLayer::geometryChanged, this , &QgsAttributeTableFilterModel::onGeometryChanged );
360
- connect ( mTableModel , &QgsAttributeTableModel::finished, this , &QgsAttributeTableFilterModel::filterFeatures );
361
366
break ;
362
367
}
363
368
@@ -420,6 +425,7 @@ void QgsAttributeTableFilterModel::reloadVisible()
420
425
{
421
426
generateListOfVisibleFeatures ();
422
427
invalidateFilter ();
428
+ emit visibleReloaded ();
423
429
}
424
430
425
431
void QgsAttributeTableFilterModel::onAttributeValueChanged ( QgsFeatureId fid, int idx, const QVariant &value )
@@ -429,18 +435,28 @@ void QgsAttributeTableFilterModel::onAttributeValueChanged( QgsFeatureId fid, in
429
435
430
436
if ( mFilterExpression .referencedAttributeIndexes ( layer ()->fields () ).contains ( idx ) )
431
437
{
432
- filterFeatures ();
438
+ startTimedFilterFeatures ();
433
439
}
434
440
}
435
441
436
442
void QgsAttributeTableFilterModel::onGeometryChanged ()
437
443
{
438
444
if ( mFilterExpression .needsGeometry () )
439
445
{
440
- filterFeatures ();
446
+ startTimedFilterFeatures ();
441
447
}
442
448
}
443
449
450
+ void QgsAttributeTableFilterModel::startTimedReloadVisible ()
451
+ {
452
+ mReloadVisibleTimer .start ( 10 );
453
+ }
454
+
455
+ void QgsAttributeTableFilterModel::startTimedFilterFeatures ()
456
+ {
457
+ mFilterFeaturesTimer .start ( 10 );
458
+ }
459
+
444
460
void QgsAttributeTableFilterModel::filterFeatures ()
445
461
{
446
462
if ( !mFilterExpression .isValid () )
@@ -490,6 +506,8 @@ void QgsAttributeTableFilterModel::filterFeatures()
490
506
setFilteredFeatures ( filteredFeatures );
491
507
492
508
QApplication::restoreOverrideCursor ();
509
+
510
+ emit featuresFiltered ();
493
511
}
494
512
495
513
0 commit comments