mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-15 00:07:25 -05:00
Minor refactor of QgsMapLayerProxyModel
This commit is contained in:
parent
760af67d0f
commit
d56ddc25fb
@ -160,6 +160,13 @@ Returns the current filter string, if set.
|
||||
.. seealso:: :py:func:`setFilterString`
|
||||
|
||||
.. versionadded:: 3.4
|
||||
%End
|
||||
|
||||
bool acceptsLayer( QgsMapLayer *layer ) const;
|
||||
%Docstring
|
||||
Returns ``True`` if the proxy model accepts the specified map ``layer``.
|
||||
|
||||
.. versionadded:: 3.8
|
||||
%End
|
||||
|
||||
virtual bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const;
|
||||
|
||||
@ -92,24 +92,8 @@ void QgsMapLayerProxyModel::setExcludedProviders( const QStringList &providers )
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
void QgsMapLayerProxyModel::setFilterString( const QString &filter )
|
||||
bool QgsMapLayerProxyModel::acceptsLayer( QgsMapLayer *layer ) const
|
||||
{
|
||||
mFilterString = filter;
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const
|
||||
{
|
||||
if ( mFilters.testFlag( All ) && mExceptList.isEmpty() && mLayerWhitelist.isEmpty() && mExcludedProviders.isEmpty() && mFilterString.isEmpty() )
|
||||
return true;
|
||||
|
||||
QModelIndex index = sourceModel()->index( source_row, 0, source_parent );
|
||||
|
||||
if ( sourceModel()->data( index, QgsMapLayerModel::EmptyRole ).toBool()
|
||||
|| sourceModel()->data( index, QgsMapLayerModel::AdditionalRole ).toBool() )
|
||||
return true;
|
||||
|
||||
QgsMapLayer *layer = static_cast<QgsMapLayer *>( index.internalPointer() );
|
||||
if ( !layer )
|
||||
return false;
|
||||
|
||||
@ -161,6 +145,26 @@ bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex
|
||||
return false;
|
||||
}
|
||||
|
||||
void QgsMapLayerProxyModel::setFilterString( const QString &filter )
|
||||
{
|
||||
mFilterString = filter;
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const
|
||||
{
|
||||
if ( mFilters.testFlag( All ) && mExceptList.isEmpty() && mLayerWhitelist.isEmpty() && mExcludedProviders.isEmpty() && mFilterString.isEmpty() )
|
||||
return true;
|
||||
|
||||
QModelIndex index = sourceModel()->index( source_row, 0, source_parent );
|
||||
|
||||
if ( sourceModel()->data( index, QgsMapLayerModel::EmptyRole ).toBool()
|
||||
|| sourceModel()->data( index, QgsMapLayerModel::AdditionalRole ).toBool() )
|
||||
return true;
|
||||
|
||||
return acceptsLayer( static_cast<QgsMapLayer *>( index.internalPointer() ) );
|
||||
}
|
||||
|
||||
bool QgsMapLayerProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const
|
||||
{
|
||||
// empty row is always first
|
||||
|
||||
@ -162,6 +162,13 @@ class CORE_EXPORT QgsMapLayerProxyModel : public QSortFilterProxyModel
|
||||
*/
|
||||
QString filterString() const { return mFilterString; }
|
||||
|
||||
/**
|
||||
* Returns TRUE if the proxy model accepts the specified map \a layer.
|
||||
*
|
||||
* \since QGIS 3.8
|
||||
*/
|
||||
bool acceptsLayer( QgsMapLayer *layer ) const;
|
||||
|
||||
bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
|
||||
bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override;
|
||||
|
||||
|
||||
@ -72,6 +72,9 @@ class TestQgsMapLayerProxyModel(unittest.TestCase):
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'l1')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
|
||||
def testFilterGeometryType(self):
|
||||
""" test filtering by geometry type """
|
||||
QgsProject.instance().clear()
|
||||
@ -93,24 +96,49 @@ class TestQgsMapLayerProxyModel(unittest.TestCase):
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 2')
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.PointLayer)
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.LineLayer)
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 4')
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.NoGeometry)
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 3')
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertTrue(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.HasGeometry)
|
||||
self.assertEqual(m.rowCount(), 3)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
|
||||
self.assertEqual(m.data(m.index(1, 0)), 'layer 2')
|
||||
self.assertEqual(m.data(m.index(2, 0)), 'layer 4')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.VectorLayer)
|
||||
self.assertEqual(m.rowCount(), 4)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
|
||||
@ -118,12 +146,27 @@ class TestQgsMapLayerProxyModel(unittest.TestCase):
|
||||
self.assertEqual(m.data(m.index(2, 0)), 'layer 3')
|
||||
self.assertEqual(m.data(m.index(3, 0)), 'layer 4')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertTrue(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.PluginLayer)
|
||||
self.assertEqual(m.rowCount(), 0)
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilters(QgsMapLayerProxyModel.RasterLayer)
|
||||
self.assertEqual(m.rowCount(), 0)
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
def testFilterString(self):
|
||||
""" test filtering by string"""
|
||||
QgsProject.instance().clear()
|
||||
@ -147,6 +190,11 @@ class TestQgsMapLayerProxyModel(unittest.TestCase):
|
||||
self.assertEqual(m.data(m.index(1, 0)), 'layer 1')
|
||||
self.assertEqual(m.data(m.index(2, 0)), 'lAyEr 2')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
m.setFilterString('')
|
||||
self.assertEqual(m.rowCount(), 4)
|
||||
|
||||
@ -173,32 +221,67 @@ class TestQgsMapLayerProxyModel(unittest.TestCase):
|
||||
self.assertEqual(m.data(m.index(2, 0)), 'layer 1')
|
||||
self.assertEqual(m.data(m.index(3, 0)), 'lAyEr 2')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertTrue(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
m.setExceptedLayerList([l1, l3])
|
||||
self.assertEqual(m.rowCount(), 2)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'final layer')
|
||||
self.assertEqual(m.data(m.index(1, 0)), 'lAyEr 2')
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
m.setExceptedLayerIds([l2.id(), l4.id()])
|
||||
self.assertEqual(m.rowCount(), 2)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'another')
|
||||
self.assertEqual(m.data(m.index(1, 0)), 'layer 1')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertTrue(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setLayerWhitelist([l1])
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setExceptedLayerIds([])
|
||||
self.assertEqual(m.rowCount(), 1)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertFalse(m.acceptsLayer(l2))
|
||||
self.assertFalse(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setLayerWhitelist([l2, l3])
|
||||
self.assertEqual(m.rowCount(), 2)
|
||||
self.assertEqual(m.data(m.index(0, 0)), 'another')
|
||||
self.assertEqual(m.data(m.index(1, 0)), 'lAyEr 2')
|
||||
|
||||
self.assertFalse(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertTrue(m.acceptsLayer(l3))
|
||||
self.assertFalse(m.acceptsLayer(l4))
|
||||
|
||||
m.setLayerWhitelist([])
|
||||
self.assertEqual(m.rowCount(), 4)
|
||||
|
||||
self.assertTrue(m.acceptsLayer(l1))
|
||||
self.assertTrue(m.acceptsLayer(l2))
|
||||
self.assertTrue(m.acceptsLayer(l3))
|
||||
self.assertTrue(m.acceptsLayer(l4))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user