21#include "moc_qgslayertree.cpp"
30 , mCustomLayerOrder( other.mCustomLayerOrder )
31 , mHasCustomLayerOrder( other.mHasCustomLayerOrder )
36void QgsLayerTree::init()
44 return _qgis_listQPointerToRaw( mCustomLayerOrder );
51 if ( newOrder == mCustomLayerOrder )
54 mCustomLayerOrder = newOrder;
57 if ( mHasCustomLayerOrder )
63 QList<QgsMapLayer *> layers;
76 layers.append( layer );
84 if ( mHasCustomLayerOrder )
96 return mHasCustomLayerOrder;
117 auto tree = std::make_unique< QgsLayerTree >();
119 tree->readCommonXml( element );
121 tree->readChildrenFromXml( element, context );
128 QDomDocument doc = parentElement.ownerDocument();
129 QDomElement elem = doc.createElement( QStringLiteral(
"layer-tree-group" ) );
134 node->writeXml( elem, context );
136 QDomElement customOrderElem = doc.createElement( QStringLiteral(
"custom-order" ) );
137 customOrderElem.setAttribute( QStringLiteral(
"enabled" ), mHasCustomLayerOrder ? 1 : 0 );
138 elem.appendChild( customOrderElem );
140 for (
QgsMapLayer *layer : std::as_const( mCustomLayerOrder ) )
146 QDomElement layerElem = doc.createElement( QStringLiteral(
"item" ) );
147 layerElem.appendChild( doc.createTextNode( layer->id() ) );
148 customOrderElem.appendChild( layerElem );
151 elem.appendChild( customOrderElem );
153 parentElement.appendChild( elem );
168void QgsLayerTree::nodeAddedChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo )
173 QList<QgsMapLayer *> layers;
176 for (
int i = indexFrom; i <= indexTo; ++i )
186 for ( QgsLayerTreeLayer *nodeL : nodeLayers )
187 layers << nodeL->layer();
191 for ( QgsMapLayer *layer : std::as_const( layers ) )
193 if ( !mCustomLayerOrder.contains( layer ) && layer )
194 mCustomLayerOrder.append( layer );
201void QgsLayerTree::nodeRemovedChildren()
204 auto layer = layers.begin();
206 while ( layer != layers.end() )
209 layer = layers.erase( layer );
220 const bool emitSignal = _qgis_listRawToQPointer( layers ) == mCustomLayerOrder;
229void QgsLayerTree::addMissingLayers()
231 bool changed =
false;
233 const QList< QgsLayerTreeLayer * > layers =
findLayers();
234 for (
const auto layer : layers )
236 if ( !mCustomLayerOrder.contains( layer->layer() ) &&
237 layer->layer() && layer->layer()->isSpatial() )
239 mCustomLayerOrder.append( layer->layer() );
247 if ( mHasCustomLayerOrder )
256 QDomElement customOrderElem = elem.firstChildElement( QStringLiteral(
"custom-order" ) );
257 if ( !customOrderElem.isNull() )
261 QDomElement itemElem = customOrderElem.firstChildElement( QStringLiteral(
"item" ) );
262 while ( !itemElem.isNull() )
264 order.append( itemElem.text() );
265 itemElem = itemElem.nextSiblingElement( QStringLiteral(
"item" ) );
Layer tree group node serves as a container for layers and further groups.
QList< QgsMapLayer * > layerOrderRespectingGroupLayers() const
Returns an ordered list of map layers in the group, ignoring any layers which are child layers of Qgs...
QList< QgsLayerTreeNode * > layerAndCustomNodeOrderRespectingGroupLayers() const
Returns an ordered list of map layers and custom nodes in the group, ignoring any layers which are ch...
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.
QgsLayerTreeNode(NodeType t, bool checked=true)
Constructor.
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
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.
static std::unique_ptr< QgsLayerTree > readXml(const QDomElement &element, const QgsReadWriteContext &context)
Load the layer tree from an XML element.
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.
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.
QList< QgsLayerTreeNode * > layerAndCustomNodeOrder() const
The order in which layers and custom nodes 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.