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;
 
   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;
 
  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" ) );
 
Layer tree group node serves as a container for layers and further groups.
void removeAllChildren()
Remove all child nodes.
void readChildrenFromXml(QDomElement &element, const QgsReadWriteContext &context)
Read children from XML and append them to the group.
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.
This class is a base class for nodes in a layer tree.
void readCommonXml(QDomElement &element)
Read common XML elements.
void removedChildren(QgsLayerTreeNode *node, int indexFrom, int indexTo)
Emitted when one or more nodes has been removed from a node within the tree.
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 * > children()
Gets list of children of the node. Children are owned by the parent.
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.
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.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
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.
void layerOrderChanged()
Emitted when the layer order has changed.
QList< QgsMapLayer * > customLayerOrder() const
The order in which layers will be rendered on the canvas.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
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...
The class is used as a container of context for various read/write operations on other objects.
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.