QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgslayertree.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayertree.h
3 --------------------------------------
4 Date : May 2014
5 Copyright : (C) 2014 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSLAYERTREE_H
17#define QGSLAYERTREE_H
18
20#include "qgslayertreegroup.h"
21#include "qgslayertreelayer.h"
22#include "qgslayertreenode.h"
23
24#include <QString>
25
26using namespace Qt::StringLiterals;
27
36class CORE_EXPORT QgsLayerTree : public QgsLayerTreeGroup
37{
38 Q_OBJECT
39
40 public:
41
46 static inline bool isGroup( QgsLayerTreeNode *node )
47 {
48 return node && node->nodeType() == QgsLayerTreeNode::NodeGroup;
49 }
50
55 static inline bool isLayer( const QgsLayerTreeNode *node )
56 {
57 return node && node->nodeType() == QgsLayerTreeNode::NodeLayer;
58 }
59
65 static inline bool isCustomNode( const QgsLayerTreeNode *node )
66 {
67 return node && node->nodeType() == QgsLayerTreeNode::NodeCustom;
68 }
69
76 {
77 return qobject_cast<QgsLayerTreeGroup *>( node );
78 }
79
86 {
87 return qobject_cast<QgsLayerTreeLayer *>( node );
88 }
89
95 static inline const QgsLayerTreeLayer *toLayer( const QgsLayerTreeNode *node ) SIP_SKIP
96 {
97 return qobject_cast< const QgsLayerTreeLayer *>( node );
98 }
99
107 {
108 return qobject_cast<QgsLayerTreeCustomNode *>( node );
109 }
110
114 QgsLayerTree();
115
116#ifdef SIP_RUN
117 SIP_PYOBJECT __repr__();
118 % MethodCode
119 // override parent QgsLayerTreeGroup __repr__ and resort back to default repr for QgsLayerTree -- there's no extra useful context we can show
120 QString str = u"<qgis._core.QgsLayerTree object at 0x%1>"_s.arg( reinterpret_cast<quintptr>( sipCpp ), 2 * QT_POINTER_SIZE, 16, '0'_L1 );
121 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
122 % End
123#endif
124
135 QList<QgsMapLayer *> customLayerOrder() const;
136
147 void setCustomLayerOrder( const QList<QgsMapLayer *> &customLayerOrder );
148
159 void setCustomLayerOrder( const QStringList &customLayerOrder ) SIP_PYNAME( setCustomLayerOrderByIds );
160
170 QList<QgsMapLayer *> layerOrder() const;
171
179 bool hasCustomLayerOrder() const;
180
188 void setHasCustomLayerOrder( bool hasCustomLayerOrder );
189
205 QList<QgsLayerTreeNode *> layerAndCustomNodeOrder() const;
206
214 static std::unique_ptr< QgsLayerTree > readXml( const QDomElement &element, const QgsReadWriteContext &context ); // cppcheck-suppress duplInheritedMember
215
221 void readLayerOrderFromXml( const QDomElement &doc );
222
223 void writeXml( QDomElement &parentElement, const QgsReadWriteContext &context ) override;
224
225 QgsLayerTree *clone() const override SIP_FACTORY;
226
231 void clear();
232
233 signals:
234
240
246
254
255 private slots:
256 void nodeAddedChildren( QgsLayerTreeNode *node, int indexFrom, int indexTo );
257 void nodeRemovedChildren();
258
259 private:
260 QgsLayerTree( const QgsLayerTree &other );
261
262 void init();
263
264 void addMissingLayers();
265 QgsWeakMapLayerPointerList mCustomLayerOrder;
266 bool mHasCustomLayerOrder = false;
267
268 QgsLayerTree &operator= ( const QgsLayerTree & ) = delete;
269};
270
271#endif // QGSLAYERTREE_H
Layer tree custom node serves as a node for objects that are not layers nor groups.
void writeXml(QDomElement &parentElement, const QgsReadWriteContext &context) override
Write group (tree) as XML element <layer-tree-group> and add it to the given parent element.
QgsLayerTreeGroup(const QString &name=QString(), bool checked=true)
Constructor.
QgsLayerTreeGroup * clone() const override
Returns a clone of the group.
static QgsLayerTreeGroup * readXml(const QDomElement &element, const QgsReadWriteContext &context)
Read group (tree) from XML element <layer-tree-group> and return the newly created group (or nullptr ...
Layer tree node points to a map layer.
@ NodeCustom
Leaf node pointing to a custom object.
@ NodeGroup
Container of other groups and layers.
@ NodeLayer
Leaf node pointing to a layer.
QgsLayerTreeNode(NodeType t, bool checked=true)
Constructor.
NodeType nodeType() const
Find out about type of the node. It is usually shorter to use convenience functions from QgsLayerTree...
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.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
QgsLayerTree()
Create a new empty layer tree.
void hasCustomLayerOrderChanged(bool hasCustomLayerOrder)
Emitted when the hasCustomLayerOrder flag changes.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
static const QgsLayerTreeLayer * toLayer(const QgsLayerTreeNode *node)
Cast node to a layer.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
void layerOrderChanged()
Emitted when the layer order has changed.
static bool isCustomNode(const QgsLayerTreeNode *node)
Check whether the node is a valid custom node.
static QgsLayerTreeCustomNode * toCustomNode(QgsLayerTreeNode *node)
Cast node to a custom node.
A container for the context for various read/write operations on objects.
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_PYNAME(name)
Definition qgis_sip.h:89
#define SIP_FACTORY
Definition qgis_sip.h:84
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.