23 #include <QDomElement> 24 #include <QStringList> 31 , mChangingChildVisibility( false )
82 QList<QgsLayerTreeNode*> nodes;
114 if ( childLayer->
layer() == layer )
158 if ( childLayer->
layerId() == layerId )
173 QList<QgsLayerTreeLayer*> list;
206 if ( element.tagName() !=
"layer-tree-group" )
209 QString
name = element.attribute(
"name" );
210 bool isExpanded = ( element.attribute(
"expanded",
"1" ) ==
"1" );
214 groupNode->setExpanded( isExpanded );
216 groupNode->readCommonXML( element );
218 groupNode->readChildrenFromXML( element );
225 QDomDocument doc = parentElement.ownerDocument();
226 QDomElement elem = doc.createElement(
"layer-tree-group" );
227 elem.setAttribute(
"name",
mName );
228 elem.setAttribute(
"expanded",
mExpanded ?
"1" :
"0" );
236 parentElement.appendChild( elem );
241 QList<QgsLayerTreeNode*> nodes;
242 QDomElement childElem = element.firstChildElement();
243 while ( !childElem.isNull() )
249 childElem = childElem.nextSiblingElement();
257 QString header = QString(
"GROUP: %1 visible=%2 expanded=%3\n" ).arg(
name() ).arg(
mChecked ).arg(
mExpanded );
258 QStringList childrenDump;
260 childrenDump << node->
dump().split(
"\n" );
261 for (
int i = 0; i < childrenDump.count(); ++i )
262 childrenDump[i].prepend(
" " );
263 return header + childrenDump.join(
"\n" );
330 bool hasVisible =
false, hasHidden =
false;
337 if ( layerVisible ) hasVisible =
true;
338 if ( !layerVisible ) hasHidden =
true;
343 if ( state == Qt::Checked || state == Qt::PartiallyChecked ) hasVisible =
true;
344 if ( state == Qt::Unchecked || state == Qt::PartiallyChecked ) hasHidden =
true;
348 Qt::CheckState newState;
349 if ( hasVisible && !hasHidden )
350 newState = Qt::Checked;
351 else if ( hasHidden && !hasVisible )
352 newState = Qt::Unchecked;
354 newState = Qt::PartiallyChecked;
void nodeVisibilityChanged(QgsLayerTreeNode *node)
Layer tree group node serves as a container for layers and further groups.
void removeChildren(int from, int count)
Remove child nodes from index "from". The nodes will be deleted.
void removeChildrenGroupWithoutLayers()
Remove all child group nodes without layers. The groupnodes will be deleted.
Base class for all map layer types.
static Qt::CheckState checkStateFromXml(QString txt)
Convert QString to Qt::CheckState.
QgsLayerTreeGroup * addGroup(const QString &name)
Append a new group node with given name. Newly created node is owned by this group.
void readChildrenFromXML(QDomElement &element)
Read children from XML and append them to the group.
static QString checkStateToXml(Qt::CheckState state)
Convert Qt::CheckState to QString.
static QgsLayerTreeGroup * readXML(QDomElement &element)
Read group (tree) from XML element <layer-tree-group> and return the newly created group (or null on ...
QgsMapLayer * layer() const
void removeAllChildren()
Remove all child nodes. The nodes will be deleted.
bool mExpanded
whether the node should be shown in GUI as expanded
static QgsMapLayerRegistry * instance()
NodeType nodeType()
Find out about type of the node. It is usually shorter to use convenience functions from QgsLayerTree...
virtual QString dump() const =0
Return string with layer tree structure. For debug purposes only.
void removeChildNode(QgsLayerTreeNode *node)
Remove a child node from this group. The node will be deleted.
void insertChildNodes(int index, QList< QgsLayerTreeNode * > nodes)
Insert existing nodes at specified position. The nodes must not have a parent yet. The nodes will be owned by this group.
virtual void writeXML(QDomElement &parentElement)=0
Write layer tree to XML.
void removeLayer(QgsMapLayer *layer)
Remove map layer's node from this group. The node will be deleted.
QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group. No type checking is done - use isGroup() to find out whether this operation is ...
QgsLayerTreeLayer * addLayer(QgsMapLayer *layer)
Append a new layer node for given map layer. Newly created node is owned by this group.
Qt::CheckState isVisible() const
void visibilityChanged(QgsLayerTreeNode *node, Qt::CheckState state)
Emitted when check state of a node within the tree has been changed.
QgsLayerTreeLayer * insertLayer(int index, QgsMapLayer *layer)
Insert a new layer node for given map layer at specified position. Newly created node is owned by thi...
void insertChildrenPrivate(int index, QList< QgsLayerTreeNode * > nodes)
Low-level insertion of children to the node. The children must not have any parent yet! ...
bool mChangingChildVisibility
QList< QgsLayerTreeLayer * > findLayers() const
Find all layer nodes. Searches recursively the whole sub-tree.
This class is a base class for nodes in a layer tree.
QString id() const
Get this layer's unique ID, this ID is used to access this layer from map layer registry.
void setVisible(Qt::CheckState visible)
virtual QgsLayerTreeNode * clone() const override
Return a clone of the group. The children are cloned too.
static QgsLayerTreeNode * readXML(QDomElement &element)
Read layer tree from XML. Returns new instance.
bool isExpanded() const
Return whether the node should be shown as expanded or collapsed in GUI.
QString name() const
Get group's name.
QList< QgsLayerTreeNode * > mChildren
list of children - node is responsible for their deletion
QList< QgsLayerTreeNode * > children()
Get list of children of the node. Children are owned by the parent.
bool isLayer(QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
Qt::CheckState isVisible() const
Return the check state of the group node.
virtual void writeXML(QDomElement &parentElement) override
Write group (tree) as XML element <layer-tree-group> and add it to the given parent element...
void removeChildrenPrivate(int from, int count, bool destroy=true)
Low-level removal of children from the node.
virtual QString dump() const override
Return text representation of the tree. For debugging purposes only.
void writeCommonXML(QDomElement &element)
void insertChildNode(int index, QgsLayerTreeNode *node)
Insert existing node at specified position. The node must not have a parent yet. The node will be own...
QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer. No type checking is done - use isLayer() to find out whether this operation is ...
QStringList findLayerIds() const
Find layer IDs used in all layer nodes. Searches recursively the whole sub-tree.
QgsLayerTreeGroup * findGroup(const QString &name)
Find group node with specified name. Searches recursively the whole sub-tree.
void addChildNode(QgsLayerTreeNode *node)
Append an existing node. The node must not have a parent yet. The node will be owned by this group...
QgsLayerTreeLayer * findLayer(const QString &layerId) const
Find layer node representing the map layer specified by its ID. Searches recursively the whole sub-tr...
container of other groups and layers
void updateVisibilityFromChildren()
void setVisible(Qt::CheckState state)
Set check state of the group node - will also update children.
bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
QgsLayerTreeGroup * insertGroup(int index, const QString &name)
Insert a new group node with given name at specified position. Newly created node is owned by this gr...
Layer tree node points to a map layer.
QgsLayerTreeGroup(const QString &name=QString(), Qt::CheckState checked=Qt::Checked)