@@ -20,13 +20,11 @@ QgsLayerTreeModel::QgsLayerTreeModel(QgsLayerTreeGroup* rootNode, QObject *paren
20
20
{
21
21
Q_ASSERT (mRootNode );
22
22
23
- // connect to all existing nodes
24
- connectToNode (mRootNode );
25
-
26
23
connect (mRootNode , SIGNAL (willAddChildren (QgsLayerTreeNode*,int ,int )), this , SLOT (nodeWillAddChildren (QgsLayerTreeNode*,int ,int )));
27
24
connect (mRootNode , SIGNAL (addedChildren (QgsLayerTreeNode*,int ,int )), this , SLOT (nodeAddedChildren (QgsLayerTreeNode*,int ,int )));
28
25
connect (mRootNode , SIGNAL (willRemoveChildren (QgsLayerTreeNode*,int ,int )), this , SLOT (nodeWillRemoveChildren (QgsLayerTreeNode*,int ,int )));
29
26
connect (mRootNode , SIGNAL (removedChildren (QgsLayerTreeNode*,int ,int )), this , SLOT (nodeRemovedChildren ()));
27
+ connect (mRootNode , SIGNAL (visibilityChanged (QgsLayerTreeNode*,Qt::CheckState)), this , SLOT (nodeVisibilityChanged (QgsLayerTreeNode*)));
30
28
}
31
29
32
30
QgsLayerTreeModel::~QgsLayerTreeModel ()
@@ -36,19 +34,6 @@ QgsLayerTreeModel::~QgsLayerTreeModel()
36
34
mSymbologyNodes .clear ();
37
35
}
38
36
39
- void QgsLayerTreeModel::connectToNode (QgsLayerTreeNode* node)
40
- {
41
- connect (node, SIGNAL (visibilityChanged (Qt::CheckState)), this , SLOT (nodeVisibilityChanded ()));
42
-
43
- if (QgsLayerTree::isLayer (node) && testFlag (ShowSymbology))
44
- {
45
- addSymbologyToLayer (QgsLayerTree::toLayer (node));
46
- }
47
-
48
- foreach (QgsLayerTreeNode* child, node->children ())
49
- connectToNode (child);
50
- }
51
-
52
37
QgsLayerTreeNode* QgsLayerTreeModel::index2node (const QModelIndex& index) const
53
38
{
54
39
if (!index .isValid ())
@@ -378,8 +363,23 @@ void QgsLayerTreeModel::nodeAddedChildren(QgsLayerTreeNode* node, int indexFrom,
378
363
379
364
endInsertRows ();
380
365
381
- for (int i = indexFrom; i <= indexTo; ++i)
382
- connectToNode ( node->children ()[i] );
366
+ if (testFlag (ShowSymbology))
367
+ {
368
+ // collect layers for which we need to add symbology
369
+ QList<QgsLayerTreeLayer*> newLayerNodes;
370
+ QList<QgsLayerTreeNode*> children = node->children ();
371
+ for (int i = indexFrom; i <= indexTo; ++i)
372
+ {
373
+ QgsLayerTreeNode* child = children.at (i);
374
+ if (QgsLayerTree::isLayer (child))
375
+ newLayerNodes << QgsLayerTree::toLayer (child);
376
+ else if (QgsLayerTree::isGroup (child))
377
+ newLayerNodes << QgsLayerTree::toGroup (child)->findLayers ();
378
+ }
379
+
380
+ foreach (QgsLayerTreeLayer* newLayerNode, newLayerNodes)
381
+ addSymbologyToLayer (newLayerNode);
382
+ }
383
383
}
384
384
385
385
void QgsLayerTreeModel::nodeWillRemoveChildren (QgsLayerTreeNode* node, int indexFrom, int indexTo)
@@ -398,9 +398,8 @@ void QgsLayerTreeModel::nodeRemovedChildren()
398
398
endRemoveRows ();
399
399
}
400
400
401
- void QgsLayerTreeModel::nodeVisibilityChanded ( )
401
+ void QgsLayerTreeModel::nodeVisibilityChanged (QgsLayerTreeNode* node )
402
402
{
403
- QgsLayerTreeNode* node = qobject_cast<QgsLayerTreeNode*>(sender ());
404
403
Q_ASSERT (node);
405
404
406
405
QModelIndex index = node2index (node);
0 commit comments