QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
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:
45 static inline bool isGroup( QgsLayerTreeNode *node ) { return node && node->nodeType() == QgsLayerTreeNode::NodeGroup; }
46
51 static inline bool isLayer( const QgsLayerTreeNode *node ) { return node && node->nodeType() == QgsLayerTreeNode::NodeLayer; }
52
58 static inline bool isCustomNode( const QgsLayerTreeNode *node ) { return node && node->nodeType() == QgsLayerTreeNode::NodeCustom; }
59
65 static inline QgsLayerTreeGroup *toGroup( QgsLayerTreeNode *node ) SIP_SKIP { return qobject_cast<QgsLayerTreeGroup *>( node ); }
66
72 static inline QgsLayerTreeLayer *toLayer( QgsLayerTreeNode *node ) SIP_SKIP { return qobject_cast<QgsLayerTreeLayer *>( node ); }
73
79 static inline const QgsLayerTreeLayer *toLayer( const QgsLayerTreeNode *node ) SIP_SKIP { return qobject_cast< const QgsLayerTreeLayer *>( node ); }
80
87 static inline QgsLayerTreeCustomNode *toCustomNode( QgsLayerTreeNode *node ) SIP_SKIP { return qobject_cast<QgsLayerTreeCustomNode *>( node ); }
88
93
94#ifdef SIP_RUN
95 // clang-format off
96 SIP_PYOBJECT __repr__();
97 % MethodCode
98 // override parent QgsLayerTreeGroup __repr__ and resort back to default repr for QgsLayerTree -- there's no extra useful context we can show
99 QString str = u"<qgis._core.QgsLayerTree object at 0x%1>"_s.arg( reinterpret_cast<quintptr>( sipCpp ), 2 * QT_POINTER_SIZE, 16, '0'_L1 );
100 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
101 % End
102// clang-format on
103#endif
104
115 QList<QgsMapLayer *> customLayerOrder() const;
116
127 void setCustomLayerOrder( const QList<QgsMapLayer *> &customLayerOrder );
128
139 void setCustomLayerOrder( const QStringList &customLayerOrder ) SIP_PYNAME( setCustomLayerOrderByIds );
140
150 QList<QgsMapLayer *> layerOrder() const;
151
159 bool hasCustomLayerOrder() const;
160
168 void setHasCustomLayerOrder( bool hasCustomLayerOrder );
169
185 QList<QgsLayerTreeNode *> layerAndCustomNodeOrder() const;
186
194 static std::unique_ptr< QgsLayerTree > readXml( const QDomElement &element, const QgsReadWriteContext &context ); // cppcheck-suppress duplInheritedMember
195
201 void readLayerOrderFromXml( const QDomElement &doc );
202
203 void writeXml( QDomElement &parentElement, const QgsReadWriteContext &context ) override;
204
205 QgsLayerTree *clone() const override SIP_FACTORY;
206
211 void clear();
212
213 signals:
214
220
226
234
235 private slots:
236 void nodeAddedChildren( QgsLayerTreeNode *node, int indexFrom, int indexTo );
237 void nodeRemovedChildren();
238
239 private:
240 QgsLayerTree( const QgsLayerTree &other );
241
242 void init();
243
244 void addMissingLayers();
245 QgsWeakMapLayerPointerList mCustomLayerOrder;
246 bool mHasCustomLayerOrder = false;
247
248 QgsLayerTree &operator=( const QgsLayerTree & ) = delete;
249};
250
251#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:133
#define SIP_PYNAME(name)
Definition qgis_sip.h:88
#define SIP_FACTORY
Definition qgis_sip.h:83
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.