QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgslayertreeview.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayertreeview.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 QGSLAYERTREEVIEW_H
17#define QGSLAYERTREEVIEW_H
18
19#include "qgis.h"
20#include "qgis_gui.h"
21
22#include <QTreeView>
23
32class QgsMapLayer;
33class QgsMessageBar;
35
36
37#include <QSortFilterProxyModel>
38
47class GUI_EXPORT QgsLayerTreeProxyModel : public QSortFilterProxyModel
48{
49#ifdef SIP_RUN
51 if ( qobject_cast<QgsLayerTreeProxyModel *>( sipCpp ) != nullptr )
52 sipType = sipType_QgsLayerTreeProxyModel;
53 else
54 sipType = nullptr;
56#endif
57
58 Q_OBJECT
59
60 public:
64 QgsLayerTreeProxyModel( QgsLayerTreeModel *treeModel, QObject *parent );
65
69 void setFilterText( const QString &filterText = QString() );
70
74 bool showPrivateLayers() const;
75
79 void setShowPrivateLayers( bool showPrivate );
80
87 bool hideValidLayers() const;
88
95 void setHideValidLayers( bool hideValid );
96
97 protected:
98 bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const override;
99
105 virtual bool nodeShown( QgsLayerTreeNode *node ) const;
106
107 private:
108 QgsLayerTreeModel *mLayerTreeModel = nullptr;
109 QString mFilterText;
110 bool mShowPrivateLayers = false;
111 bool mHideValidLayers = false;
112};
113
114
129class GUI_EXPORT QgsLayerTreeViewBase : public QTreeView
130{
131 Q_OBJECT
132
133 public:
135 explicit QgsLayerTreeViewBase( QWidget *parent SIP_TRANSFERTHIS = nullptr );
136 ~QgsLayerTreeViewBase() override;
137
138 void mouseDoubleClickEvent( QMouseEvent *event ) override;
139
150
156
170 QgsLayerTreeNode *index2node( const QModelIndex &index ) const;
171
183 QModelIndex node2index( QgsLayerTreeNode *node ) const;
184
196 QModelIndex node2sourceIndex( QgsLayerTreeNode *node ) const;
197
208 QgsLayerTreeModelLegendNode *index2legendNode( const QModelIndex &index ) const;
209
216
226 QList<QgsLayerTreeNode *> selectedNodes( bool skipInternal = false ) const;
227
233 QgsMapLayer *currentLayer() const;
234
242 QgsMapLayer *layerForIndex( const QModelIndex &index ) const;
243
252
260 QList<QgsLayerTreeLayer *> selectedLayerNodes() const;
261
269 QList<QgsMapLayer *> selectedLayers() const;
270
283 QModelIndex legendNode2index( QgsLayerTreeModelLegendNode *legendNode );
284
299 QModelIndex legendNode2sourceIndex( QgsLayerTreeModelLegendNode *legendNode );
300
309 void setCurrentNode( QgsLayerTreeNode *node );
310
318 void setCurrentLayer( QgsMapLayer *layer );
319
324
333 QList<QgsLayerTreeModelLegendNode *> selectedLegendNodes() const;
334
341 QList<QgsMapLayer *> selectedLayersRecursive() const;
342
345
346 public slots:
347
351 void expandAllNodes();
352
356 void collapseAllNodes();
357
358 protected:
363
371 QModelIndex viewIndexToLayerTreeModelIndex( const QModelIndex &index ) const;
372
380 QModelIndex layerTreeModelIndexToViewIndex( const QModelIndex &index ) const;
381
384
385 protected slots:
386
390 void updateExpandedStateToNode( const QModelIndex &index );
391
395 void onExpandedChanged( QgsLayerTreeNode *node, bool expanded );
396
400 void onModelReset();
401
402 private slots:
403
404 void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
405
406 private:
407 QgsLayerTreeModel *mLayerTreeModel = nullptr;
408 QTimer *mBlockDoubleClickTimer = nullptr;
409};
410
411
426class GUI_EXPORT QgsLayerTreeView : public QgsLayerTreeViewBase
427{
428#ifdef SIP_RUN
430 if ( sipCpp->inherits( "QgsLayerTreeView" ) )
431 sipType = sipType_QgsLayerTreeView;
432 else
433 sipType = 0;
434 SIP_END
435#endif
436
437
438 Q_OBJECT
439 public:
441 explicit QgsLayerTreeView( QWidget *parent SIP_TRANSFERTHIS = nullptr );
442 ~QgsLayerTreeView() override;
443
449 void setModel( QAbstractItemModel *model ) override;
450
459
468
473
480 void setLayerVisible( QgsMapLayer *layer, bool visible );
481
492 void addIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
493
500 void removeIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
501
508 QList<QgsLayerTreeViewIndicator *> indicators( QgsLayerTreeNode *node ) const;
509
515 int layerMarkWidth() const { return mLayerMarkWidth; }
516
518
528 static QStringList viewOnlyCustomProperties() SIP_SKIP;
529
531
536 bool showPrivateLayers() const;
537
544 bool hideValidLayers() const;
545
546 public slots:
548 void refreshLayerSymbology( const QString &layerId );
549
555 void setLayerMarkWidth( int width ) { mLayerMarkWidth = width; }
556
561 void setMessageBar( QgsMessageBar *messageBar );
562
567 void setShowPrivateLayers( bool showPrivate );
568
575 void setHideValidLayers( bool hideValid );
576
577 signals:
580
582 void datasetsDropped( QDropEvent *event );
583
591 void contextMenuAboutToShow( QMenu *menu );
592
593 protected:
594 void contextMenuEvent( QContextMenuEvent *event ) override;
595
596 void mouseReleaseEvent( QMouseEvent *event ) override;
597 void keyPressEvent( QKeyEvent *event ) override;
598
599 void dragEnterEvent( QDragEnterEvent *event ) override;
600 void dragMoveEvent( QDragMoveEvent *event ) override;
601 void dropEvent( QDropEvent *event ) override;
602
603 void resizeEvent( QResizeEvent *event ) override;
604
605 protected slots:
606
607 void modelRowsInserted( const QModelIndex &index, int start, int end );
608 void modelRowsRemoved();
609
610 void onCurrentChanged();
611
612 private slots:
613 void onCustomPropertyChanged( QgsLayerTreeNode *node, const QString &key );
615 void onHorizontalScroll( int value );
616
617 void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
618
619 protected:
625 QHash<QgsLayerTreeNode *, QList<QgsLayerTreeViewIndicator *>> mIndicators;
628
631
632 private:
633 QgsLayerTreeProxyModel *mProxyModel = nullptr;
634
635 QgsMessageBar *mMessageBar = nullptr;
636
637 bool mShowPrivateLayers = false;
638 bool mHideValidLayers = false;
639
640 // For model debugging
641 // void checkModel( );
642
643 // friend so it can access viewOptions() method and mLastReleaseMousePos without making them public
645};
646
647
656{
657 public:
658 virtual ~QgsLayerTreeViewMenuProvider() = default;
659
661 virtual QMenu *createContextMenu() = 0 SIP_FACTORY;
662};
663
664
665#endif // QGSLAYERTREEVIEW_H
A sort filter proxy model to easily reproduce the legend/layer tree in a tree view.
Layer tree group node serves as a container for layers and further groups.
Layer tree node points to a map layer.
An abstract interface for legend items returned from QgsMapLayerLegend implementation.
A model representing the layer tree, including layers and groups of layers.
Base class for nodes in a layer tree.
A proxy model for QgsLayerTreeModel, supporting private layers and text filtering.
bool showPrivateLayers() const
Returns if private layers are shown.
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
void setFilterText(const QString &filterText=QString())
Sets filter to filterText.
bool hideValidLayers() const
Returns if valid layers should be hidden (i.e.
void setHideValidLayers(bool hideValid)
Sets whether valid layers should be hidden (i.e.
virtual bool nodeShown(QgsLayerTreeNode *node) const
Returns true if the specified node should be shown.
void setShowPrivateLayers(bool showPrivate)
Determines if private layers are shown.
QgsLayerTreeProxyModel(QgsLayerTreeModel *treeModel, QObject *parent)
Constructs QgsLayerTreeProxyModel with source model treeModel and a parent.
void updateExpandedStateToNode(const QModelIndex &index)
Stores the expanded state to a node with matching index.
QList< QgsLayerTreeNode * > selectedNodes(bool skipInternal=false) const
Returns the list of selected layer tree nodes.
QgsLayerTreeNode * currentNode() const
Returns the current node.
QgsLayerTreeGroup * currentGroupNode() const
Returns the current group node.
QList< QgsMapLayer * > selectedLayers() const
Returns the list of selected layers.
QModelIndex node2sourceIndex(QgsLayerTreeNode *node) const
Returns the layer tree source model index for a given node.
QgsLayerTreeModelLegendNode * index2legendNode(const QModelIndex &index) const
Returns legend node for given view index.
void mouseDoubleClickEvent(QMouseEvent *event) override
void setLayerTreeModel(QgsLayerTreeModel *model)
Associates a layer tree model with the view.
QgsMapLayer * layerForIndex(const QModelIndex &index) const
Returns the map layer corresponding to a view index.
QModelIndex legendNode2index(QgsLayerTreeModelLegendNode *legendNode)
Returns the view index for a given legend node.
void setCurrentNode(QgsLayerTreeNode *node)
Sets the currently selected node.
void onExpandedChanged(QgsLayerTreeNode *node, bool expanded)
Called when the expanded state changes for a node.
QModelIndex layerTreeModelIndexToViewIndex(const QModelIndex &index) const
Returns the layer tree model index corresponding with a view index.
QModelIndex legendNode2sourceIndex(QgsLayerTreeModelLegendNode *legendNode)
Returns the layer tree source model index for a given legend node.
QList< QgsLayerTreeModelLegendNode * > selectedLegendNodes() const
Returns the list of selected legend nodes.
QModelIndex node2index(QgsLayerTreeNode *node) const
Returns the view model index for a given node.
void onModelReset()
Called when the model is reset.
void updateExpandedStateFromNode(QgsLayerTreeNode *node)
Updates the expanded state from a node.
QList< QgsLayerTreeLayer * > selectedLayerNodes() const
Returns the list of selected nodes filtered to just layer nodes (QgsLayerTreeLayer).
QModelIndex viewIndexToLayerTreeModelIndex(const QModelIndex &index) const
Returns the view index corresponding with a layer tree model index.
QgsLayerTreeViewBase(QWidget *parent=nullptr)
Constructor for QgsLayerTreeViewBase.
QgsLayerTreeViewDefaultActions * defaultActions()
Gets access to the default actions that may be used with the tree view.
void setCurrentLayer(QgsMapLayer *layer)
Sets the currently selected layer.
void collapseAllNodes()
Enhancement of QTreeView::collapseAll() that also records expanded state in layer tree nodes.
QList< QgsMapLayer * > selectedLayersRecursive() const
Gets list of selected layers, including those that are not directly selected, but their ancestor grou...
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Returns the layer tree node for given view index.
QgsLayerTreeViewDefaultActions * mDefaultActions
helper class with default actions. Lazily initialized.
QgsLayerTreeModelLegendNode * currentLegendNode() const
Gets current legend node.
void expandAllNodes()
Enhancement of QTreeView::expandAll() that also records expanded state in layer tree nodes.
QgsMapLayer * currentLayer() const
Returns the currently selected layer, or nullptr if no layers is selected.
QgsLayerTreeModel * layerTreeModel() const
Returns the associated layer tree model.
Serves as a factory of actions that can be used together with a layer tree view.
Indicator that can be used in a layer tree view to display icons next to items of the layer tree.
Implementation of this interface can be implemented to allow QgsLayerTreeView instance to provide cus...
virtual QMenu * createContextMenu()=0
Returns a newly created menu instance (or nullptr on error).
virtual ~QgsLayerTreeViewMenuProvider()=default
int mLayerMarkWidth
Width of contextual menu mark for layer nodes.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when a current layer is changed.
void contextMenuAboutToShow(QMenu *menu)
Emitted when the context menu is about to show.
QString mCurrentLayerID
Keeps track of current layer ID (to check when to emit signal about change of current layer).
void datasetsDropped(QDropEvent *event)
Emitted when datasets are dropped onto the layer tree view.
void setModel(QAbstractItemModel *model) override
Overridden setModel() from base class.
QHash< QgsLayerTreeNode *, QList< QgsLayerTreeViewIndicator * > > mIndicators
Storage of indicators used with the tree view.
void dropEvent(QDropEvent *event) override
QgsLayerTreeView(QWidget *parent=nullptr)
Constructor for QgsLayerTreeView.
QgsLayerTreeViewMenuProvider * menuProvider() const
Returns pointer to the context menu provider. May be nullptr.
void resizeEvent(QResizeEvent *event) override
void mouseReleaseEvent(QMouseEvent *event) override
void setMenuProvider(QgsLayerTreeViewMenuProvider *menuProvider)
Sets provider for context menu. Takes ownership of the instance.
void dragMoveEvent(QDragMoveEvent *event) override
QPoint mLastReleaseMousePos
Used by the item delegate for identification of which indicator has been clicked.
friend class QgsLayerTreeViewItemDelegate
QgsLayerTreeProxyModel * proxyModel() const
Returns the proxy model used by the view.
QgsLayerTreeViewMenuProvider * mMenuProvider
Context menu provider. Owned by the view.
void contextMenuEvent(QContextMenuEvent *event) override
void keyPressEvent(QKeyEvent *event) override
int layerMarkWidth() const
Returns width of contextual menu mark, at right of layer node items.
void modelRowsInserted(const QModelIndex &index, int start, int end)
void setLayerMarkWidth(int width)
Set width of contextual menu mark, at right of layer node items.
void dragEnterEvent(QDragEnterEvent *event) override
Base class for all map layer types.
Definition qgsmaplayer.h:80
A bar for displaying non-blocking messages to the user.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:199
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_FACTORY
Definition qgis_sip.h:84
#define SIP_END
Definition qgis_sip.h:216