Skip to content

Commit be1e3f2

Browse files
committedMar 31, 2023
Add test
1 parent deb1246 commit be1e3f2

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed
 

‎src/core/layertree/qgslayertreemodellegendnode.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -352,9 +352,9 @@ QgsSymbolLegendNode::~QgsSymbolLegendNode() = default;
352352
Qt::ItemFlags QgsSymbolLegendNode::flags() const
353353
{
354354
if ( mItem.isCheckable() )
355-
return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
355+
return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable;
356356
else
357-
return Qt::ItemIsEnabled;
357+
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
358358
}
359359

360360

@@ -1043,9 +1043,9 @@ QgsRasterSymbolLegendNode::QgsRasterSymbolLegendNode( QgsLayerTreeLayer *nodeLay
10431043
Qt::ItemFlags QgsRasterSymbolLegendNode::flags() const
10441044
{
10451045
if ( mCheckable )
1046-
return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
1046+
return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable;
10471047
else
1048-
return Qt::ItemIsEnabled;
1048+
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
10491049
}
10501050

10511051
QVariant QgsRasterSymbolLegendNode::data( int role ) const

‎tests/src/python/test_qgslayertreeview.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@
1010
__copyright__ = 'Copyright 2018, The QGIS Project'
1111

1212
import qgis # NOQA
13-
from qgis.PyQt.QtCore import QStringListModel
13+
from qgis.PyQt.QtCore import QStringListModel, QItemSelectionModel
1414
from qgis.PyQt.QtTest import QAbstractItemModelTester, QSignalSpy
1515
from qgis.core import (
1616
QgsLayerTree,
1717
QgsLayerTreeModel,
1818
QgsProject,
1919
QgsVectorLayer,
20+
QgsCategorizedSymbolRenderer,
21+
QgsRendererCategory,
22+
QgsMarkerSymbol,
23+
QgsMapLayerLegend
2024
)
2125
from qgis.gui import QgsLayerTreeView, QgsLayerTreeViewDefaultActions
2226
from qgis.testing import start_app, unittest
@@ -655,6 +659,43 @@ def testNode2IndexMethods(self):
655659
tree_layer2_index = view.node2sourceIndex(node2)
656660
self.assertEqual(tree_layer2_index, view.node2sourceIndex(node2))
657661

662+
def test_selected_legend_nodes(self):
663+
layer = QgsVectorLayer("Point?field=fldtxt:string",
664+
"layer1", "memory")
665+
666+
cat1 = QgsRendererCategory(1, QgsMarkerSymbol.createSimple({}), 'cat 1')
667+
cat2 = QgsRendererCategory(2, QgsMarkerSymbol.createSimple({}),
668+
'cat 2')
669+
cat3 = QgsRendererCategory(1, QgsMarkerSymbol.createSimple({}),
670+
'cat 3')
671+
672+
renderer = QgsCategorizedSymbolRenderer('fldtext', [cat1, cat2, cat3])
673+
layer.setRenderer(renderer)
674+
layer.setLegend(QgsMapLayerLegend.defaultVectorLegend(layer))
675+
676+
root = QgsLayerTree()
677+
model = QgsLayerTreeModel(root)
678+
layer_tree_layer = root.addLayer(layer)
679+
view = QgsLayerTreeView()
680+
view.setModel(model)
681+
682+
legend_nodes = model.layerLegendNodes(layer_tree_layer)
683+
self.assertEqual(len(legend_nodes), 3)
684+
685+
index = model.legendNode2index(legend_nodes[0])
686+
self.assertTrue(index.isValid())
687+
self.assertEqual(model.index2legendNode(index), legend_nodes[0])
688+
index2 = model.legendNode2index(legend_nodes[2])
689+
self.assertTrue(index2.isValid())
690+
self.assertEqual(model.index2legendNode(index2), legend_nodes[2])
691+
692+
self.assertFalse(view.selectedLegendNodes())
693+
694+
view.selectionModel().select(view.proxyModel().mapFromSource(index), QItemSelectionModel.ClearAndSelect)
695+
view.selectionModel().select(view.proxyModel().mapFromSource(index2), QItemSelectionModel.Select)
696+
697+
self.assertCountEqual(view.selectedLegendNodes(), [legend_nodes[0], legend_nodes[2]])
698+
658699

659700
if __name__ == '__main__':
660701
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.