|
10 | 10 | __copyright__ = 'Copyright 2018, The QGIS Project'
|
11 | 11 |
|
12 | 12 | import qgis # NOQA
|
13 |
| -from qgis.PyQt.QtCore import QStringListModel |
| 13 | +from qgis.PyQt.QtCore import QStringListModel, QItemSelectionModel |
14 | 14 | from qgis.PyQt.QtTest import QAbstractItemModelTester, QSignalSpy
|
15 | 15 | from qgis.core import (
|
16 | 16 | QgsLayerTree,
|
17 | 17 | QgsLayerTreeModel,
|
18 | 18 | QgsProject,
|
19 | 19 | QgsVectorLayer,
|
| 20 | + QgsCategorizedSymbolRenderer, |
| 21 | + QgsRendererCategory, |
| 22 | + QgsMarkerSymbol, |
| 23 | + QgsMapLayerLegend |
20 | 24 | )
|
21 | 25 | from qgis.gui import QgsLayerTreeView, QgsLayerTreeViewDefaultActions
|
22 | 26 | from qgis.testing import start_app, unittest
|
@@ -655,6 +659,43 @@ def testNode2IndexMethods(self):
|
655 | 659 | tree_layer2_index = view.node2sourceIndex(node2)
|
656 | 660 | self.assertEqual(tree_layer2_index, view.node2sourceIndex(node2))
|
657 | 661 |
|
| 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 | + |
658 | 699 |
|
659 | 700 | if __name__ == '__main__':
|
660 | 701 | unittest.main()
|
0 commit comments