def nest_groups(parent: QgsLayerTreeGroup, groupnames: List[str], prepend: bool = True) -> QgsLayerTreeGroup: '''recursively nests groups in order of groupnames''' if len(groupnames) == 0: return parent next_parent = parent.findGroup(groupnames[0]) if not next_parent: next_parent = (parent.insertGroup(0, groupnames[0]) if prepend else parent.addGroup(groupnames[0])) return nest_groups(next_parent, groupnames[1:], prepend=prepend)
def test_group_layer_nested(self): """ Test group node with child nodes converted to group layer """ group_node = QgsLayerTreeGroup('my group') options = QgsGroupLayer.LayerOptions(QgsCoordinateTransformContext()) group_layer = group_node.convertToGroupLayer(options) self.assertFalse(group_layer.childLayers()) layer = QgsVectorLayer("Point?field=fldtxt:string", "layer1", "memory") group_node.addLayer(layer) group2 = group_node.addGroup('child group 1') layer2 = QgsVectorLayer("Point?field=fldtxt:string", "layer2", "memory") group_node.addLayer(layer2) layer3 = QgsVectorLayer("Point?field=fldtxt:string", "layer3", "memory") layer3_node = group2.addLayer(layer3) group3 = group2.addGroup('grand child group 1') group4 = group2.addGroup('grand child group 2') layer4 = QgsVectorLayer("Point?field=fldtxt:string", "layer4", "memory") layer4_node = group3.addLayer(layer4) layer5 = QgsVectorLayer("Point?field=fldtxt:string", "layer5", "memory") layer5_node = group4.addLayer(layer5) self.assertEqual(group_layer.childLayers(), [layer2, layer5, layer4, layer3, layer]) layer5_node.setItemVisibilityChecked(False) self.assertEqual(group_layer.childLayers(), [layer2, layer4, layer3, layer]) group2.setItemVisibilityChecked(False) self.assertEqual(group_layer.childLayers(), [layer2, layer]) group2.setItemVisibilityCheckedRecursive(True) self.assertEqual(group_layer.childLayers(), [layer2, layer5, layer4, layer3, layer])