Skip to content

Commit c6823d8

Browse files
committedMay 11, 2020
split the disconnecting and connecting on filtermodel change to methods, so the disconnect can be called on qgsdualview before the reload of the layer without doing an invalidate() (called in setFilterMode of the qgsattributetablefiltermodel)
1 parent 99bbf4a commit c6823d8

File tree

4 files changed

+73
-47
lines changed

4 files changed

+73
-47
lines changed
 

‎python/gui/auto_generated/attributetable/qgsattributetablefiltermodel.sip.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ Gets a list of currently filtered feature ids
9292
Set the filter mode the filter will use.
9393

9494
:param filterMode: Sets the current mode of the filter
95+
%End
96+
97+
void disconnectFilterModeConnections();
98+
%Docstring
99+
Disconnect the connections set for the current filterMode
100+
%End
101+
102+
void connectFilterModeConnections( FilterMode filterMode );
103+
%Docstring
104+
Disconnect the connections set for the new ``filterMode``
95105
%End
96106

97107
FilterMode filterMode();

‎src/gui/attributetable/qgsattributetablefiltermodel.cpp

Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -323,54 +323,58 @@ void QgsAttributeTableFilterModel::setFilterMode( FilterMode filterMode )
323323
{
324324
if ( filterMode != mFilterMode )
325325
{
326-
// cleanup existing connections
327-
switch ( mFilterMode )
328-
{
329-
case ShowVisible:
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 );
334-
break;
335-
case ShowAll:
336-
case ShowEdited:
337-
case ShowSelected:
338-
break;
339-
case ShowFilteredList:
340-
disconnect( layer(), &QgsVectorLayer::featureAdded, this, &QgsAttributeTableFilterModel::startTimedFilterFeatures );
341-
disconnect( mTableModel, &QgsAttributeTableModel::finished, this, &QgsAttributeTableFilterModel::startTimedFilterFeatures );
342-
disconnect( layer(), &QgsVectorLayer::attributeValueChanged, this, &QgsAttributeTableFilterModel::onAttributeValueChanged );
343-
disconnect( layer(), &QgsVectorLayer::geometryChanged, this, &QgsAttributeTableFilterModel::onGeometryChanged );
344-
break;
345-
}
346-
347-
// setup new connections
348-
switch ( filterMode )
349-
{
350-
case ShowVisible:
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 );
355-
generateListOfVisibleFeatures();
356-
break;
357-
case ShowAll:
358-
case ShowEdited:
359-
case ShowSelected:
360-
break;
361-
case ShowFilteredList:
362-
connect( layer(), &QgsVectorLayer::featureAdded, this, &QgsAttributeTableFilterModel::startTimedFilterFeatures );
363-
connect( mTableModel, &QgsAttributeTableModel::finished, this, &QgsAttributeTableFilterModel::startTimedFilterFeatures );
364-
connect( layer(), &QgsVectorLayer::attributeValueChanged, this, &QgsAttributeTableFilterModel::onAttributeValueChanged );
365-
connect( layer(), &QgsVectorLayer::geometryChanged, this, &QgsAttributeTableFilterModel::onGeometryChanged );
366-
break;
367-
}
368-
326+
disconnectFilterModeConnections();
327+
connectFilterModeConnections( filterMode );
369328
mFilterMode = filterMode;
370329
invalidateFilter();
371330
}
372331
}
373332

333+
void QgsAttributeTableFilterModel::disconnectFilterModeConnections()
334+
{
335+
// cleanup existing connections
336+
switch ( mFilterMode )
337+
{
338+
case ShowVisible:
339+
disconnect( mCanvas, &QgsMapCanvas::extentsChanged, this, &QgsAttributeTableFilterModel::startTimedReloadVisible );
340+
disconnect( layer(), &QgsVectorLayer::featureAdded, this, &QgsAttributeTableFilterModel::startTimedReloadVisible );
341+
disconnect( layer(), &QgsVectorLayer::geometryChanged, this, &QgsAttributeTableFilterModel::startTimedReloadVisible );
342+
break;
343+
case ShowAll:
344+
case ShowEdited:
345+
case ShowSelected:
346+
break;
347+
case ShowFilteredList:
348+
disconnect( layer(), &QgsVectorLayer::featureAdded, this, &QgsAttributeTableFilterModel::startTimedFilterFeatures );
349+
disconnect( layer(), &QgsVectorLayer::attributeValueChanged, this, &QgsAttributeTableFilterModel::onAttributeValueChanged );
350+
disconnect( layer(), &QgsVectorLayer::geometryChanged, this, &QgsAttributeTableFilterModel::onGeometryChanged );
351+
break;
352+
}
353+
}
354+
355+
void QgsAttributeTableFilterModel::connectFilterModeConnections( QgsAttributeTableFilterModel::FilterMode filterMode )
356+
{
357+
// setup new connections
358+
switch ( filterMode )
359+
{
360+
case ShowVisible:
361+
connect( mCanvas, &QgsMapCanvas::extentsChanged, this, &QgsAttributeTableFilterModel::startTimedReloadVisible );
362+
connect( layer(), &QgsVectorLayer::featureAdded, this, &QgsAttributeTableFilterModel::startTimedReloadVisible );
363+
connect( layer(), &QgsVectorLayer::geometryChanged, this, &QgsAttributeTableFilterModel::startTimedReloadVisible );
364+
generateListOfVisibleFeatures();
365+
break;
366+
case ShowAll:
367+
case ShowEdited:
368+
case ShowSelected:
369+
break;
370+
case ShowFilteredList:
371+
connect( layer(), &QgsVectorLayer::featureAdded, this, &QgsAttributeTableFilterModel::startTimedFilterFeatures );
372+
connect( layer(), &QgsVectorLayer::attributeValueChanged, this, &QgsAttributeTableFilterModel::onAttributeValueChanged );
373+
connect( layer(), &QgsVectorLayer::geometryChanged, this, &QgsAttributeTableFilterModel::onGeometryChanged );
374+
break;
375+
}
376+
}
377+
374378
bool QgsAttributeTableFilterModel::filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const
375379
{
376380
Q_UNUSED( sourceParent )

‎src/gui/attributetable/qgsattributetablefiltermodel.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ class GUI_EXPORT QgsAttributeTableFilterModel: public QSortFilterProxyModel, pub
127127
*/
128128
void setFilterMode( FilterMode filterMode );
129129

130+
/**
131+
* Disconnect the connections set for the current filterMode
132+
*/
133+
void disconnectFilterModeConnections();
134+
135+
/**
136+
* Disconnect the connections set for the new \a filterMode
137+
*/
138+
void connectFilterModeConnections( FilterMode filterMode );
139+
130140
/**
131141
* The current filterModel
132142
*/

‎src/gui/attributetable/qgsdualview.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ void QgsDualView::setFilterMode( QgsAttributeTableFilterModel::FilterMode filter
293293
case QgsAttributeTableFilterModel::ShowAll:
294294
case QgsAttributeTableFilterModel::ShowEdited:
295295
case QgsAttributeTableFilterModel::ShowFilteredList:
296-
disconnect( mFilterModel, &QgsAttributeTableFilterModel::featuresFiltered, this, &QgsDualView::filterChanged );
296+
connect( mFilterModel, &QgsAttributeTableFilterModel::featuresFiltered, this, &QgsDualView::filterChanged );
297297
break;
298298

299299
case QgsAttributeTableFilterModel::ShowSelected:
@@ -317,16 +317,18 @@ void QgsDualView::setFilterMode( QgsAttributeTableFilterModel::FilterMode filter
317317
break;
318318
}
319319

320-
//update filter model
321-
mFilterModel->setFilterMode( filterMode );
322-
323320
if ( requiresTableReload )
324321
{
322+
//disconnect the connections of the current (old) filtermode before reload
323+
mFilterModel->disconnectFilterModeConnections();
324+
325325
mMasterModel->setRequest( r );
326326
whileBlocking( mLayerCache )->setCacheGeometry( needsGeometry );
327327
mMasterModel->loadLayer();
328328
}
329329

330+
//update filter model
331+
mFilterModel->setFilterMode( filterMode );
330332
emit filterChanged();
331333
}
332334

0 commit comments

Comments
 (0)
Please sign in to comment.