17#include "moc_qgslayertree.cpp"
28 , mCustomLayerOrder( other.mCustomLayerOrder )
29 , mHasCustomLayerOrder( other.mHasCustomLayerOrder )
34void QgsLayerTree::init()
42 return _qgis_listQPointerToRaw( mCustomLayerOrder );
49 if ( newOrder == mCustomLayerOrder )
52 mCustomLayerOrder = newOrder;
55 if ( mHasCustomLayerOrder )
61 QList<QgsMapLayer *> layers;
74 layers.append( layer );
82 if ( mHasCustomLayerOrder )
94 return mHasCustomLayerOrder;
121 QDomDocument doc = parentElement.ownerDocument();
122 QDomElement elem = doc.createElement( QStringLiteral(
"layer-tree-group" ) );
127 node->writeXml( elem, context );
129 QDomElement customOrderElem = doc.createElement( QStringLiteral(
"custom-order" ) );
130 customOrderElem.setAttribute( QStringLiteral(
"enabled" ), mHasCustomLayerOrder ? 1 : 0 );
131 elem.appendChild( customOrderElem );
133 for (
QgsMapLayer *layer : std::as_const( mCustomLayerOrder ) )
139 QDomElement layerElem = doc.createElement( QStringLiteral(
"item" ) );
140 layerElem.appendChild( doc.createTextNode( layer->id() ) );
141 customOrderElem.appendChild( layerElem );
144 elem.appendChild( customOrderElem );
146 parentElement.appendChild( elem );
161void QgsLayerTree::nodeAddedChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo )
166 QList<QgsMapLayer *> layers;
169 for (
int i = indexFrom; i <= indexTo; ++i )
180 layers << nodeL->layer();
184 for (
QgsMapLayer *layer : std::as_const( layers ) )
186 if ( !mCustomLayerOrder.contains( layer ) && layer )
187 mCustomLayerOrder.append( layer );
194void QgsLayerTree::nodeRemovedChildren()
197 auto layer = layers.begin();
199 while ( layer != layers.end() )
202 layer = layers.erase( layer );
213 const bool emitSignal = _qgis_listRawToQPointer( layers ) == mCustomLayerOrder;
222void QgsLayerTree::addMissingLayers()
224 bool changed =
false;
226 const QList< QgsLayerTreeLayer * > layers =
findLayers();
227 for (
const auto layer : layers )
229 if ( !mCustomLayerOrder.contains( layer->layer() ) &&
230 layer->layer() && layer->layer()->isSpatial() )
232 mCustomLayerOrder.append( layer->layer() );
240 if ( mHasCustomLayerOrder )
249 QDomElement customOrderElem = elem.firstChildElement( QStringLiteral(
"custom-order" ) );
250 if ( !customOrderElem.isNull() )
254 QDomElement itemElem = customOrderElem.firstChildElement( QStringLiteral(
"item" ) );
255 while ( !itemElem.isNull() )
257 order.append( itemElem.text() );
258 itemElem = itemElem.nextSiblingElement( QStringLiteral(
"item" ) );
Layer tree group node serves as a container for layers and further groups.
void readChildrenFromXml(const QDomElement &element, const QgsReadWriteContext &context)
Read children from XML and append them to the group.
QList< QgsMapLayer * > layerOrderRespectingGroupLayers() const
Returns an ordered list of map layers in the group, ignoring any layers which are child layers of Qgs...
void removeAllChildren()
Remove all child nodes.
QList< QgsLayerTreeLayer * > findLayers() const
Find all layer nodes.
QgsLayerTreeLayer * findLayer(QgsMapLayer *layer) const
Find layer node representing the map layer.
Layer tree node points to a map layer.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
Base class for nodes in a layer tree.
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.
void writeCommonXml(QDomElement &element)
Write common XML elements.
void addedChildren(QgsLayerTreeNode *node, int indexFrom, int indexTo)
Emitted when one or more nodes have been added to a node within the tree.
QList< QgsLayerTreeNode * > mChildren
list of children - node is responsible for their deletion
void readCommonXml(const QDomElement &element)
Read common XML elements.
Namespace with helper functions for layer tree operations.
bool hasCustomLayerOrder() const
Determines if the layer order should be derived from the layer tree or if a custom override order sha...
void customLayerOrderChanged()
Emitted when the custom layer order has changed.
void readLayerOrderFromXml(const QDomElement &doc)
Load the layer order from an XML element.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
void writeXml(QDomElement &parentElement, const QgsReadWriteContext &context) override
Write layer tree to XML.
QList< QgsMapLayer * > layerOrder() const
The order in which layers will be rendered on the canvas.
QgsLayerTree()
Create a new empty layer tree.
void hasCustomLayerOrderChanged(bool hasCustomLayerOrder)
Emitted when the hasCustomLayerOrder flag changes.
void clear()
Clear any information from this layer tree.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
void setHasCustomLayerOrder(bool hasCustomLayerOrder)
Determines if the layer order should be derived from the layer tree or if a custom override order sha...
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
static QgsLayerTree * readXml(QDomElement &element, const QgsReadWriteContext &context)
Load the layer tree from an XML element.
void setCustomLayerOrder(const QList< QgsMapLayer * > &customLayerOrder)
The order in which layers will be rendered on the canvas.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
void layerOrderChanged()
Emitted when the layer order has changed.
QList< QgsMapLayer * > customLayerOrder() const
The order in which layers will be rendered on the canvas.
QgsLayerTree * clone() const override
Create a copy of the node. Returns new instance.
Base class for all map layer types.
virtual bool isSpatial() const
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
A container for the context for various read/write operations on objects.
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.