25 #include <QContextMenuEvent> 29 , mDefaultActions( 0 )
32 setHeaderHidden(
true );
34 setDragEnabled(
true );
35 setAcceptDrops(
true );
36 setDropIndicatorShown(
true );
37 setEditTriggers( EditKeyPressed );
38 setExpandsOnDoubleClick(
false );
40 setSelectionMode( ExtendedSelection );
53 if ( !qobject_cast<QgsLayerTreeModel*>( model ) )
56 connect( model, SIGNAL( rowsInserted( QModelIndex,
int,
int ) ),
this, SLOT(
modelRowsInserted( QModelIndex,
int,
int ) ) );
57 connect( model, SIGNAL( rowsRemoved( QModelIndex,
int,
int ) ),
this, SLOT(
modelRowsRemoved() ) );
59 QTreeView::setModel( model );
63 connect( selectionModel(), SIGNAL( currentChanged( QModelIndex, QModelIndex ) ),
this, SLOT(
onCurrentChanged() ) );
97 setCurrentIndex( QModelIndex() );
114 QModelIndex idx = indexAt( event->pos() );
115 if ( !idx.isValid() )
116 setCurrentIndex( QModelIndex() );
119 if ( menu && menu->actions().count() != 0 )
120 menu->exec( mapToGlobal( event->pos() ) );
134 QStringList expandedNodeKeys = parentNode->
customProperty(
"expandedLegendNodes" ).toStringList();
135 if ( expandedNodeKeys.isEmpty() )
141 if ( expandedNodeKeys.contains( ruleKey ) )
147 QList<QgsLayerTreeNode*> children = parentNode->
children();
148 for (
int i = start; i <= end; ++i )
167 node->setExpanded( isExpanded( index ) );
172 QStringList lst = node->layerNode()->customProperty(
"expandedLegendNodes" ).toStringList();
173 bool expanded = isExpanded( index );
174 bool isInList = lst.contains( ruleKey );
175 if ( expanded && !isInList )
177 lst.append( ruleKey );
178 node->layerNode()->setCustomProperty(
"expandedLegendNodes", lst );
180 else if ( !expanded && isInList )
182 lst.removeAll( ruleKey );
183 node->layerNode()->setCustomProperty(
"expandedLegendNodes", lst );
191 QString layerCurrentID = layerCurrent ? layerCurrent->
id() : QString();
196 QModelIndex nodeLayerIndex;
212 if ( isExpanded( idx ) != expanded )
213 setExpanded( idx, expanded );
283 QList<QgsLayerTreeLayer*> layerNodes;
294 QList<QgsMapLayer*> list;
298 list << node->
layer();
Layer tree group node serves as a container for layers and further groups.
QgsLayerTreeModel * layerTreeModel() const
Get access to the model casted to QgsLayerTreeModel.
Base class for all map layer types.
QList< QgsLayerTreeModelLegendNode * > layerLegendNodes(QgsLayerTreeLayer *nodeLayer)
Return list of legend nodes attached to a particular layer node.
QgsMapLayer * currentLayer() const
Get currently selected layer. May be null.
void setCurrentIndex(const QModelIndex ¤tIndex)
Set index of the current item. May be used by view. Item marked as current is underlined.
QgsLayerTreeViewMenuProvider * mMenuProvider
Context menu provider. Owned by the view.
QList< QgsLayerTreeNode * > indexes2nodes(const QModelIndexList &list, bool skipInternal=false) const
Convert a list of indexes to a list of layer tree nodes.
QgsLayerTreeGroup * rootGroup() const
Return pointer to the root node of the layer tree. Always a non-null pointer.
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
void refreshLayerSymbology(const QString &layerId)
Force refresh of layer symbology. Normally not needed as the changes of layer's renderer are monitore...
QgsMapLayer * layer() const
void contextMenuEvent(QContextMenuEvent *event) override
QgsLayerTreeViewMenuProvider * menuProvider() const
Return pointer to the context menu provider. May be null.
QgsLayerTreeNode * currentNode() const
Get current node. May be null.
QList< QgsMapLayer * > selectedLayers() const
Get list of selected layers.
QgsLayerTreeViewDefaultActions * defaultActions()
Get access to the default actions that may be used with the tree view.
QList< QgsLayerTreeNode * > selectedNodes(bool skipInternal=false) const
Return list of selected nodes.
QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group. No type checking is done - use isGroup() to find out whether this operation is ...
QString mCurrentLayerID
Keeps track of current layer ID (to check when to emit signal about change of current layer) ...
The QgsLayerTreeViewDefaultActions class serves as a factory of actions that can be used together wit...
The QgsLayerTreeModel class is model implementation for Qt item views framework.
void modelRowsInserted(QModelIndex index, int start, int end)
QModelIndex legendNode2index(QgsLayerTreeModelLegendNode *legendNode)
Return index for a given legend node.
rule key of the node (QString)
QgsLayerTreeGroup * currentGroupNode() const
Get current group node. If a layer is current node, the function will return parent group...
static QgsLayerTreeModelLegendNode * index2legendNode(const QModelIndex &index)
Return legend node for given index.
QgsLayerTreeNode * parent()
Get pointer to the parent. If parent is a null pointer, the node is a root node.
QgsLayerTreeLayer * layerNode() const
Return pointer to the parent layer node.
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.
bool isExpanded() const
Return whether the node should be shown as expanded or collapsed in GUI.
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.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when a current layer is changed.
void refreshLayerLegend(QgsLayerTreeLayer *nodeLayer)
Force a refresh of legend nodes of a layer node.
QgsLayerTreeViewDefaultActions * mDefaultActions
helper class with default actions. Lazily initialized.
QList< QgsLayerTreeLayer * > selectedLayerNodes() const
Return list of selected nodes filtered to just layer nodes.
QModelIndex node2index(QgsLayerTreeNode *node) const
Return index for a given node. If the node does not belong to the layer tree, the result is undefined...
void updateExpandedStateFromNode(QgsLayerTreeNode *node)
void onExpandedChanged(QgsLayerTreeNode *node, bool expanded)
QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer. No type checking is done - use isLayer() to find out whether this operation is ...
virtual QVariant data(int role) const =0
Return data associated with the item.
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
virtual void setModel(QAbstractItemModel *model) override
Overridden setModel() from base class. Only QgsLayerTreeModel is an acceptable model.
QgsLayerTreeLayer * findLayer(const QString &layerId) const
Find layer node representing the map layer specified by its ID. Searches recursively the whole sub-tr...
QgsLayerTreeView(QWidget *parent=0)
void setCurrentLayer(QgsMapLayer *layer)
Set currently selected layer. Null pointer will deselect any layer.
void setMenuProvider(QgsLayerTreeViewMenuProvider *menuProvider)
Set provider for context menu. Takes ownership of the instance.
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Return layer tree node for given index.
bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
QgsMapLayer * layerForIndex(const QModelIndex &index) const
void updateExpandedStateToNode(QModelIndex index)
Layer tree node points to a map layer.