55#include " qgslayertreeutils.h"
66
77
8+ QgsLayerTreeNode::QgsLayerTreeNode (QgsLayerTreeNode::NodeType t)
9+ : mNodeType(t)
10+ , mParent(0 )
11+ , mExpanded(true )
12+ {
13+ }
14+
15+ QgsLayerTreeNode::QgsLayerTreeNode (const QgsLayerTreeNode& other)
16+ : QObject()
17+ , mNodeType(other.mNodeType )
18+ , mParent(0 )
19+ , mExpanded(other.mExpanded )
20+ , mProperties(other.mProperties )
21+ {
22+ QList<QgsLayerTreeNode*> clonedChildren;
23+ foreach (QgsLayerTreeNode* child, other.mChildren )
24+ clonedChildren << child->clone ();
25+ insertChildren (-1 , clonedChildren);
26+ }
27+
828QgsLayerTreeNode* QgsLayerTreeNode::readXML (QDomElement& element)
929{
1030 QgsLayerTreeNode* node = 0 ;
@@ -109,6 +129,14 @@ QgsLayerTreeGroup::QgsLayerTreeGroup(const QString& name, Qt::CheckState checked
109129{
110130}
111131
132+ QgsLayerTreeGroup::QgsLayerTreeGroup (const QgsLayerTreeGroup& other)
133+ : QgsLayerTreeNode(other)
134+ , mName(other.mName )
135+ , mChecked(other.mChecked )
136+ , mChangingChildVisibility(false )
137+ {
138+ }
139+
112140
113141QgsLayerTreeGroup* QgsLayerTreeGroup::addGroup (const QString &name)
114142{
@@ -214,6 +242,26 @@ QgsLayerTreeLayer *QgsLayerTreeGroup::findLayer(const QString& layerId)
214242 return 0 ;
215243}
216244
245+ QgsLayerTreeGroup* QgsLayerTreeGroup::findGroup (const QString& name)
246+ {
247+ foreach (QgsLayerTreeNode* child, mChildren )
248+ {
249+ if (child->nodeType () == QgsLayerTreeNode::NodeGroup)
250+ {
251+ QgsLayerTreeGroup* childGroup = static_cast <QgsLayerTreeGroup*>(child);
252+ if (childGroup->name () == name)
253+ return childGroup;
254+ else
255+ {
256+ QgsLayerTreeGroup* grp = childGroup->findGroup (name);
257+ if (grp)
258+ return grp;
259+ }
260+ }
261+ }
262+ return 0 ;
263+ }
264+
217265QgsLayerTreeGroup* QgsLayerTreeGroup::readXML (QDomElement& element)
218266{
219267 if (element.tagName () != " layer-tree-group" )
@@ -273,6 +321,11 @@ QString QgsLayerTreeGroup::dump() const
273321 return header + childrenDump.join ( " \n " );
274322}
275323
324+ QgsLayerTreeNode* QgsLayerTreeGroup::clone () const
325+ {
326+ return new QgsLayerTreeGroup (*this );
327+ }
328+
276329void QgsLayerTreeGroup::setVisible (Qt::CheckState state)
277330{
278331 if (mChecked == state)
@@ -298,6 +351,19 @@ void QgsLayerTreeGroup::setVisible(Qt::CheckState state)
298351 }
299352}
300353
354+ QStringList QgsLayerTreeGroup::childLayerIds () const
355+ {
356+ QStringList lst;
357+ foreach (QgsLayerTreeNode* child, mChildren )
358+ {
359+ if (child->nodeType () == NodeGroup)
360+ lst << static_cast <QgsLayerTreeGroup*>(child)->childLayerIds ();
361+ else if (child->nodeType () == NodeLayer)
362+ lst << static_cast <QgsLayerTreeLayer*>(child)->layerId ();
363+ }
364+ return lst;
365+ }
366+
301367
302368void QgsLayerTreeGroup::layerDestroyed ()
303369{
@@ -353,18 +419,38 @@ QgsLayerTreeLayer::QgsLayerTreeLayer(QgsMapLayer *layer)
353419}
354420
355421QgsLayerTreeLayer::QgsLayerTreeLayer (QString layerId, QString name)
356- : QgsLayerTreeNode(NodeLayer), mLayerId(layerId), mLayer(0 ), mVisible(true )
422+ : QgsLayerTreeNode(NodeLayer)
423+ , mLayerId(layerId)
424+ , mLayerName(name)
425+ , mLayer(0 )
426+ , mVisible(true )
427+ {
428+ attachToLayer ();
429+ }
430+
431+ QgsLayerTreeLayer::QgsLayerTreeLayer (const QgsLayerTreeLayer& other)
432+ : QgsLayerTreeNode(other)
433+ , mLayerId(other.mLayerId )
434+ , mLayerName(other.mLayerName )
435+ , mLayer(0 )
436+ , mVisible(other.mVisible )
437+ {
438+ attachToLayer ();
439+ }
440+
441+ void QgsLayerTreeLayer::attachToLayer ()
357442{
358443 // layer is not necessarily already loaded
359- QgsMapLayer* l = QgsMapLayerRegistry::instance ()->mapLayer (layerId );
444+ QgsMapLayer* l = QgsMapLayerRegistry::instance ()->mapLayer (mLayerId );
360445 if (l)
361446 {
362447 mLayer = l;
363448 mLayerName = l->name ();
364449 }
365450 else
366451 {
367- mLayerName = name.isEmpty () ? " (?)" : name;
452+ if (mLayerName .isEmpty ())
453+ mLayerName = " (?)" ;
368454 // wait for the layer to be eventually loaded
369455 connect (QgsMapLayerRegistry::instance (), SIGNAL (layersAdded (QList<QgsMapLayer*>)), this , SLOT (registryLayersAdded (QList<QgsMapLayer*>)));
370456 }
@@ -425,6 +511,11 @@ QString QgsLayerTreeLayer::dump() const
425511 return QString ( " LAYER: %1 visible=%2 expanded=%3 id=%4\n " ).arg ( layerName () ).arg ( mVisible ).arg ( mExpanded ).arg ( layerId () );
426512}
427513
514+ QgsLayerTreeNode* QgsLayerTreeLayer::clone () const
515+ {
516+ return new QgsLayerTreeLayer (*this );
517+ }
518+
428519void QgsLayerTreeLayer::registryLayersAdded (QList<QgsMapLayer*> layers)
429520{
430521 foreach (QgsMapLayer* l, layers)
0 commit comments