28 , mCustomLayerOrder( other.mCustomLayerOrder )
29 , mHasCustomLayerOrder( other.mHasCustomLayerOrder )
37 return _qgis_listQPointerToRaw( mCustomLayerOrder );
44 if ( newOrder == mCustomLayerOrder )
47 mCustomLayerOrder = newOrder;
50 if ( mHasCustomLayerOrder )
56 QList<QgsMapLayer *> layers;
58 for (
const auto &layerId : customLayerOrder )
69 layers.append( layer );
77 if ( mHasCustomLayerOrder )
83 QList<QgsMapLayer *> layers;
84 const QList< QgsLayerTreeLayer * > foundLayers =
findLayers();
85 for (
const auto &treeLayer : foundLayers )
92 layers.append( layer );
100 return mHasCustomLayerOrder;
105 if ( hasCustomLayerOrder == mHasCustomLayerOrder )
127 QDomDocument doc = parentElement.ownerDocument();
128 QDomElement elem = doc.createElement( QStringLiteral(
"layer-tree-group" ) );
133 node->writeXml( elem, context );
135 QDomElement customOrderElem = doc.createElement( QStringLiteral(
"custom-order" ) );
136 customOrderElem.setAttribute( QStringLiteral(
"enabled" ), mHasCustomLayerOrder ? 1 : 0 );
137 elem.appendChild( customOrderElem );
139 for (
QgsMapLayer *layer : qgis::as_const( mCustomLayerOrder ) )
145 QDomElement layerElem = doc.createElement( QStringLiteral(
"item" ) );
146 layerElem.appendChild( doc.createTextNode( layer->id() ) );
147 customOrderElem.appendChild( layerElem );
150 elem.appendChild( customOrderElem );
152 parentElement.appendChild( elem );
167 void QgsLayerTree::nodeAddedChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo )
172 QList<QgsMapLayer *> layers;
175 for (
int i = indexFrom; i <= indexTo; ++i )
186 layers << nodeL->layer();
190 for (
QgsMapLayer *layer : qgis::as_const( layers ) )
192 if ( !mCustomLayerOrder.contains( layer ) && layer )
193 mCustomLayerOrder.append( layer );
200 void QgsLayerTree::nodeRemovedChildren()
203 auto layer = layers.begin();
205 while ( layer != layers.end() )
208 layer = layers.erase( layer );
219 const bool emitSignal = _qgis_listRawToQPointer( layers ) == mCustomLayerOrder;
228 void QgsLayerTree::addMissingLayers()
230 bool changed =
false;
232 const QList< QgsLayerTreeLayer * > layers =
findLayers();
233 for (
const auto layer : layers )
235 if ( !mCustomLayerOrder.contains( layer->layer() ) &&
236 layer->layer() && layer->layer()->isSpatial() )
238 mCustomLayerOrder.append( layer->layer() );
246 if ( mHasCustomLayerOrder )
255 QDomElement customOrderElem = elem.firstChildElement( QStringLiteral(
"custom-order" ) );
256 if ( !customOrderElem.isNull() )
260 QDomElement itemElem = customOrderElem.firstChildElement( QStringLiteral(
"item" ) );
261 while ( !itemElem.isNull() )
263 order.append( itemElem.text() );
264 itemElem = itemElem.nextSiblingElement( QStringLiteral(
"item" ) );
The class is used as a container of context for various read/write operations on other objects...
void readChildrenFromXml(QDomElement &element, const QgsReadWriteContext &context)
Read children from XML and append them to the group.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
Base class for all map layer types.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
void removeAllChildren()
Remove all child nodes.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
void layerOrderChanged()
Emitted when the layer order has changed.
void customLayerOrderChanged()
Emitted when the custom layer order has changed.
QList< QgsMapLayer * > customLayerOrder() const
The order in which layers will be rendered on the canvas.
void removedChildren(QgsLayerTreeNode *node, int indexFrom, int indexTo)
Emitted when one or more nodes has been removed from a node within the tree.
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
Namespace with helper functions for layer tree operations.
void addedChildren(QgsLayerTreeNode *node, int indexFrom, int indexTo)
Emitted when one or more nodes have been added to a node within the tree.
void writeCommonXml(QDomElement &element)
Write common XML elements.
void setHasCustomLayerOrder(bool hasCustomLayerOrder)
Determines if the layer order should be derived from the layer tree or if a custom override order sha...
void clear()
Clear any information from this layer tree.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
This class is a base class for nodes in a layer tree.
bool hasCustomLayerOrder() const
Determines if the layer order should be derived from the layer tree or if a custom override order sha...
void readLayerOrderFromXml(const QDomElement &doc)
Load the layer order from an XML element.
void hasCustomLayerOrderChanged(bool hasCustomLayerOrder)
Emitted when the hasCustomLayerOrder flag changes.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
QList< QgsMapLayer * > layerOrder() const
The order in which layers will be rendered on the canvas.
QgsLayerTreeGroup(const QString &name=QString(), bool checked=true)
Constructor.
void setCustomLayerOrder(const QList< QgsMapLayer *> &customLayerOrder)
The order in which layers will be rendered on the canvas.
void writeXml(QDomElement &parentElement, const QgsReadWriteContext &context) override
Write layer tree to XML.
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.
static QgsLayerTree * readXml(QDomElement &element, const QgsReadWriteContext &context)
Load the layer tree from an XML element.
void readCommonXml(QDomElement &element)
Read common XML elements.
virtual bool isSpatial() const
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
QgsLayerTree()
Create a new empty layer tree.
QList< QgsLayerTreeNode * > mChildren
list of children - node is responsible for their deletion
QList< QgsLayerTreeLayer * > findLayers() const
Find all layer nodes.
QgsLayerTreeLayer * findLayer(QgsMapLayer *layer) const
Find layer node representing the map layer.
QgsLayerTree * clone() const override
Create a copy of the node. Returns new instance.
Layer tree node points to a map layer.