16 if ( !file.open( QIODevice::ReadOnly ) )
18 errorMessage = QString(
"Can not open file" );
24 if ( !doc.setContent( &file, &message ) )
26 errorMessage = message;
30 QFileInfo fileinfo( file );
31 QDir::setCurrent( fileinfo.absoluteDir().path() );
38 Q_UNUSED( errorMessage );
43 QDomNodeList ids = doc.elementsByTagName(
"id" );
44 for (
int i = 0; i < ids.size(); ++i )
46 QDomNode idnode = ids.at( i );
47 QDomElement idElem = idnode.toElement();
48 QString oldid = idElem.text();
50 QString layername = oldid.left( oldid.length() - 17 );
51 QDateTime dt = QDateTime::currentDateTime();
52 QString newid = layername + dt.toString(
"yyyyMMddhhmmsszzz" ) + QString::number( qrand() );
53 idElem.firstChild().setNodeValue( newid );
54 QDomNodeList treeLayerNodes = doc.elementsByTagName(
"layer-tree-layer" );
56 for (
int i = 0; i < treeLayerNodes.count(); ++i )
58 QDomNode layerNode = treeLayerNodes.at( i );
59 QDomElement layerElem = layerNode.toElement();
60 if ( layerElem.attribute(
"id" ) == oldid )
62 layerNode.toElement().setAttribute(
"id", newid );
67 QDomElement layerTreeElem = doc.documentElement().firstChildElement(
"layer-tree-group" );
68 bool loadInLegend =
true;
69 if ( !layerTreeElem.isNull() )
78 QList<QgsLayerTreeNode*> nodes = root->
children();
91 if ( !path.endsWith(
".qlr" ) )
92 path = path.append(
".qlr" );
95 QFileInfo fileinfo( file );
97 QDomDocument doc(
"qgis-layer-definition" );
98 QDomElement qgiselm = doc.createElement(
"qlr" );
99 doc.appendChild( qgiselm );
100 QList<QgsLayerTreeNode*> nodes = selectedTreeNodes;
109 QDomElement layerselm = doc.createElement(
"maplayers" );
110 QList<QgsLayerTreeLayer*> layers = root->
findLayers();
113 QDomElement layerelm = doc.createElement(
"maplayer" );
115 layerselm.appendChild( layerelm );
117 qgiselm.appendChild( layerselm );
119 if ( file.open( QFile::WriteOnly | QFile::Truncate ) )
121 QTextStream qlayerstream( &file );
122 doc.save( qlayerstream, 2 );
127 errorMessage = file.errorString();
Layer tree group node serves as a container for layers and further groups.
void readChildrenFromXML(QDomElement &element)
Read children from XML and append them to the group.
bool writeLayerXML(QDomElement &layerElement, QDomDocument &document, QString relativeBasePath=QString::null)
stores state in Dom node
bool takeChild(QgsLayerTreeNode *node)
Remove a child from a node.
QgsMapLayer * layer() const
virtual QgsLayerTreeNode * clone() const =0
Create a copy of the node. Returns new instance.
static QgsMapLayerRegistry * instance()
static bool exportLayerDefinition(QString path, QList< QgsLayerTreeNode * > selectedTreeNodes, QString &errorMessage)
void insertChildNodes(int index, QList< QgsLayerTreeNode * > nodes)
Insert existing nodes at specified position. The nodes must not have a parent yet. The nodes will be owned by this group.
QList< QgsMapLayer * > addMapLayers(QList< QgsMapLayer * > theMapLayers, bool addToLegend=true, bool takeOwnership=true)
Add a list of layers to the map of loaded layers.
QList< QgsLayerTreeLayer * > findLayers() const
Find all layer nodes. Searches recursively the whole sub-tree.
This class is a base class for nodes in a layer tree.
QList< QgsLayerTreeNode * > children()
Get list of children of the node. Children are owned by the parent.
virtual void writeXML(QDomElement &parentElement) override
Write group (tree) as XML element <layer-tree-group> and add it to the given parent element...
void addChildNode(QgsLayerTreeNode *node)
Append an existing node. The node must not have a parent yet. The node will be owned by this group...
static QList< QgsMapLayer * > fromLayerDefinition(QDomDocument &document)
Creates a new layer from a layer defininition document.
static bool loadLayerDefinition(const QString &path, QgsLayerTreeGroup *rootGroup, QString &errorMessage)
Layer tree node points to a map layer.