QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
30 #include <QContextMenuEvent>
31 #include <QHeaderView>
42 setHeaderHidden(
true );
44 setDragEnabled(
true );
45 setAcceptDrops(
true );
46 setDropIndicatorShown(
true );
47 setEditTriggers( EditKeyPressed );
48 setExpandsOnDoubleClick(
false );
51 header()->setStretchLastSection(
false );
52 header()->setSectionResizeMode( QHeaderView::ResizeToContents );
55 setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
57 setSelectionMode( ExtendedSelection );
58 setDefaultDropAction( Qt::MoveAction );
62 setStyle(
new QgsLayerTreeViewProxyStyle(
this ) );
64 #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
73 connect( horizontalScrollBar(), &QScrollBar::valueChanged,
this, &QgsLayerTreeView::onHorizontalScroll );
93 {mMessageBar->
pushMessage( message, level, duration );}
96 QTreeView::setModel( model );
105 connect(
layerTreeModel, &QgsLayerTreeModel::dataChanged,
this, &QgsLayerTreeView::onDataChanged );
112 return qobject_cast<QgsLayerTreeModel *>( model() );
137 setCurrentIndex( QModelIndex() );
163 QModelIndex idx = indexAt( event->pos() );
164 if ( !idx.isValid() )
165 setCurrentIndex( QModelIndex() );
168 if ( menu && menu->actions().count() != 0 )
169 menu->exec( mapToGlobal( event->pos() ) );
186 int widgetsCount = layer->customProperty( QStringLiteral(
"embeddedWidgets/count" ), 0 ).toInt();
188 for (
int i = 0; i < widgetsCount; ++i )
190 QString providerId = layer->customProperty( QStringLiteral(
"embeddedWidgets/%1/id" ).arg( i ) ).toString();
194 QWidget *wdgt = provider->createWidget( layer, i );
211 setIndexWidget( index, wdgt );
221 QStringList expandedNodeKeys = parentNode->
customProperty( QStringLiteral(
"expandedLegendNodes" ) ).toStringList();
222 if ( expandedNodeKeys.isEmpty() )
229 if ( expandedNodeKeys.contains( ruleKey ) )
235 QList<QgsLayerTreeNode *> children = parentNode->
children();
236 for (
int i = start; i <= end; ++i )
255 node->setExpanded( isExpanded( index ) );
260 QStringList lst = node->layerNode()->customProperty( QStringLiteral(
"expandedLegendNodes" ) ).toStringList();
261 bool expanded = isExpanded( index );
262 bool isInList = lst.contains( ruleKey );
263 if ( expanded && !isInList )
265 lst.append( ruleKey );
266 node->layerNode()->setCustomProperty( QStringLiteral(
"expandedLegendNodes" ), lst );
268 else if ( !expanded && isInList )
270 lst.removeAll( ruleKey );
271 node->layerNode()->setCustomProperty( QStringLiteral(
"expandedLegendNodes" ), lst );
279 QString layerCurrentID = layerCurrent ? layerCurrent->
id() : QString();
284 QModelIndex nodeLayerIndex;
300 if ( isExpanded( idx ) != expanded )
301 setExpanded( idx, expanded );
304 void QgsLayerTreeView::onCustomPropertyChanged(
QgsLayerTreeNode *node,
const QString &key )
309 QSet<QString> expandedLegendNodes = qgis::listToSet( node->
customProperty( QStringLiteral(
"expandedLegendNodes" ) ).toStringList() );
315 if ( !key.isEmpty() )
330 const auto constChildren = node->
children();
396 QList<QgsLayerTreeLayer *> layerNodes;
408 QList<QgsMapLayer *> list;
413 list << node->layer();
422 return qgis::setToList( layersSet );
450 QStringList QgsLayerTreeView::viewOnlyCustomProperties()
452 return QStringList() << QStringLiteral(
"expandedLegendNodes" );
471 const auto constLayerLegendNodes = model->
layerLegendNodes( nodeLayer,
true );
475 if ( !parentKey.isEmpty() && !lst.contains( parentKey ) )
485 const auto constChildren = parent->
children();
513 if ( mMessageBar == messageBar )
516 mMessageBar = messageBar;
521 {mMessageBar->
pushMessage( message, level, duration );}
532 if ( event->modifiers() & Qt::ControlModifier )
536 QTreeView::mouseReleaseEvent( event );
542 if ( event->key() == Qt::Key_Space )
546 if ( ! constSelectedNodes.isEmpty() )
548 bool isFirstNodeChecked = constSelectedNodes[0]->itemVisibilityChecked();
560 if ( event->modifiers() & Qt::ControlModifier )
564 QTreeView::keyPressEvent( event );
570 if ( event->keyboardModifiers() & Qt::AltModifier )
574 QTreeView::dropEvent( event );
587 header()->setMinimumSectionSize( viewport()->width() );
588 QTreeView::resizeEvent( event );
591 void QgsLayerTreeView::onHorizontalScroll(
int value )
594 viewport()->update();
597 void QgsLayerTreeView::onDataChanged(
const QModelIndex &topLeft,
const QModelIndex &bottomRight,
const QVector<int> &roles )
600 Q_UNUSED( bottomRight )
606 if ( roles.contains( Qt::SizeHintRole ) )
607 viewport()->update();
QgsLayerTreeGroup * currentGroupNode() const
Gets current group node. If a layer is current node, the function will return parent group....
void addIndicator(QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator)
Adds an indicator to the given layer tree node.
QgsLayerTreeLayer * findLayer(QgsMapLayer *layer) const
Find layer node representing the map layer.
This class is a base class for nodes in a layer tree.
void keyPressEvent(QKeyEvent *event) override
void currentLayerChanged(QgsMapLayer *layer)
Emitted when a current layer is changed.
void setItemVisibilityChecked(bool checked)
Check or uncheck a node (independently of its ancestors or children)
virtual QVariant data(int role) const =0
Returns data associated with the item. Must be implemented in derived class.
void expandedChanged(QgsLayerTreeNode *node, bool expanded)
Emitted when the collapsed/expanded state of a node within the tree has been changed.
QgsLayerTreeModel * layerTreeModel() const
Gets access to the model casted to QgsLayerTreeModel.
void messageEmitted(const QString &message, Qgis::MessageLevel level=Qgis::Info, int duration=5)
Emits a message than can be displayed to the user in a GUI class.
QgsLayerTreeViewDefaultActions * mDefaultActions
helper class with default actions. Lazily initialized.
void setFlags(QgsLayerTreeModel::Flags f)
Sets OR-ed combination of model flags.
void updateExpandedStateFromNode(QgsLayerTreeNode *node)
QgsLayerTreeViewMenuProvider * menuProvider() const
Returns pointer to the context menu provider. May be nullptr.
void customPropertyChanged(QgsLayerTreeNode *node, const QString &key)
Emitted when a custom property of a node within the tree has been changed or removed.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
The QgsLayerTreeModel class is model implementation for Qt item views framework.
void dropEvent(QDropEvent *event) override
QList< QgsLayerTreeNode * > selectedNodes(bool skipInternal=false) const
Returns list of selected nodes.
void onExpandedChanged(QgsLayerTreeNode *node, bool expanded)
@ ActionHierarchical
Check/uncheck action has consequences on children (or parents for leaf node)
QgsLayerTreeModelLegendNode * currentLegendNode() const
Gets current legend node.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
QgsLayerTreeView(QWidget *parent=nullptr)
Constructor for QgsLayerTreeView.
void setMenuProvider(QgsLayerTreeViewMenuProvider *menuProvider)
Sets provider for context menu. Takes ownership of the instance.
~QgsLayerTreeView() override
QgsMapLayer * layerForIndex(const QModelIndex &index) const
void setModel(QAbstractItemModel *model) override
Overridden setModel() from base class. Only QgsLayerTreeModel is an acceptable model.
void setLayerMarkWidth(int width)
Set width of contextual menu mark, at right of layer node items.
QModelIndex legendNode2index(QgsLayerTreeModelLegendNode *legendNode)
Returns index for a given legend node.
QModelIndex node2index(QgsLayerTreeNode *node) const
Returns index for a given node. If the node does not belong to the layer tree, the result is undefine...
static QgsLayerTreeModelLegendNode * index2legendNode(const QModelIndex &index)
Returns legend node for given index.
void setCurrentLayer(QgsMapLayer *layer)
Sets the currently selected layer.
Indicator that can be used in a layer tree view to display icons next to items of the layer tree.
void resizeEvent(QResizeEvent *event) override
void expandAllNodes()
Enhancement of QTreeView::expandAll() that also records expanded state in layer tree nodes.
void refreshLayerLegend(QgsLayerTreeLayer *nodeLayer)
Force a refresh of legend nodes of a layer node.
Layer tree node points to a map layer.
QList< QgsLayerTreeViewIndicator * > indicators(QgsLayerTreeNode *node) const
Returns list of indicators associated with a particular layer tree node.
Layer tree group node serves as a container for layers and further groups.
A bar for displaying non-blocking messages to the user.
static QSet< QgsMapLayer * > collectMapLayersRecursive(const QList< QgsLayerTreeNode * > &nodes)
Returns map layers from the given list of layer tree nodes.
QgsLayerTreeViewMenuProvider * mMenuProvider
Context menu provider. Owned by the view.
QgsLayerTreeNode * currentNode() const
Gets current node. May be nullptr.
QList< QgsMapLayer * > selectedLayersRecursive() const
Gets list of selected layers, including those that are not directly selected, but their ancestor grou...
static const double UI_SCALE_FACTOR
UI scaling factor.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
@ ParentRuleKeyRole
Rule key of the parent legend node - for legends with tree hierarchy (QString). Added in 2....
static QgsLayerTreeEmbeddedWidgetRegistry * layerTreeEmbeddedWidgetRegistry()
Returns the global layer tree embedded widget registry, used for registering widgets that may be embe...
QList< QgsMapLayer * > selectedLayers() const
Gets list of selected layers.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
The QgsLayerTreeViewDefaultActions class serves as a factory of actions that can be used together wit...
bool isExpanded() const
Returns whether the node should be shown as expanded or collapsed in GUI.
void setMessageBar(QgsMessageBar *messageBar)
Set the message bar to display messages from the layer tree.
QgsLayerTree * rootGroup() const
Returns pointer to the root node of the layer tree. Always a non nullptr value.
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
void removeIndicator(QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator)
Removes a previously added indicator to a layer tree node.
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Returns layer tree node for given index.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
void refreshLayerSymbology(const QString &layerId)
Force refresh of layer symbology. Normally not needed as the changes of layer's renderer are monitore...
void modelRowsInserted(const QModelIndex &index, int start, int end)
QgsLayerTreeLayer * layerNode() const
Returns pointer to the parent layer node.
void contextMenuEvent(QContextMenuEvent *event) override
QgsMapLayer * currentLayer() const
Returns the currently selected layer, or nullptr if no layers is selected.
Qt::ItemFlags flags(const QModelIndex &index) const override
MessageLevel
Level for messages This will be used both for message log and message bar in application.
void setCustomProperty(const QString &key, const QVariant &value)
Sets a custom property for the node. Properties are stored in a map and saved in project file.
void changed()
Emitted when the indicator changes state (e.g.
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer. Properties are stored in a map and saved in project file.
Base class for all map layer types.
QList< QgsLayerTreeLayer * > selectedLayerNodes() const
Returns list of selected nodes filtered to just layer nodes.
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
QgsLayerTreeViewDefaultActions * defaultActions()
Gets access to the default actions that may be used with the tree view.
QgsLayerTreeNode * parent()
Gets pointer to the parent. If parent is nullptr, the node is a root node.
void mouseReleaseEvent(QMouseEvent *event) override
QList< QgsLayerTreeModelLegendNode * > layerLegendNodes(QgsLayerTreeLayer *nodeLayer, bool skipNodeEmbeddedInParent=false)
Returns filtered list of active legend nodes attached to a particular layer node (by default it retur...
void setLayerVisible(QgsMapLayer *layer, bool visible)
Convenience methods which sets the visible state of the specified map layer.
QString mCurrentLayerID
Keeps track of current layer ID (to check when to emit signal about change of current layer)
@ RuleKeyRole
Rule key of the node (QString)
void setExpanded(bool expanded)
Sets whether the node should be shown as expanded or collapsed in GUI.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
@ UseEmbeddedWidgets
Layer nodes may optionally include extra embedded widgets (if used in QgsLayerTreeView)....
void updateExpandedStateToNode(const QModelIndex &index)
QPoint mLastReleaseMousePos
Used by the item delegate for identification of which indicator has been clicked.
void setCurrentIndex(const QModelIndex ¤tIndex)
Sets index of the current item. May be used by view. Item marked as current is underlined.
void pushMessage(const QString &text, Qgis::MessageLevel level=Qgis::Info, int duration=5)
A convenience method for pushing a message with the specified text to the bar.
QHash< QgsLayerTreeNode *, QList< QgsLayerTreeViewIndicator * > > mIndicators
Storage of indicators used with the tree view.
friend class QgsLayerTreeViewItemDelegate
void collapseAllNodes()
Enhancement of QTreeView::collapseAll() that also records expanded state in layer tree nodes.
QList< QgsLayerTreeNode * > indexes2nodes(const QModelIndexList &list, bool skipInternal=false) const
Convert a list of indexes to a list of layer tree nodes.
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...