QGIS API Documentation 3.99.0-Master (26c88405ac0)
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:
61
65 QgsLayerTreeProxyModel( QgsLayerTreeModel *treeModel, QObject *parent );
66
70 void setFilterText( const QString &filterText = QString() );
71
75 bool showPrivateLayers() const;
76
80 void setShowPrivateLayers( bool showPrivate );
81
88 bool hideValidLayers() const;
89
96 void setHideValidLayers( bool hideValid );
97
98 protected:
99 bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const override;
100
106 virtual bool nodeShown( QgsLayerTreeNode *node ) const;
107
108 private:
109 QgsLayerTreeModel *mLayerTreeModel = nullptr;
110 QString mFilterText;
111 bool mShowPrivateLayers = false;
112 bool mHideValidLayers = false;
113};
114
115
130class GUI_EXPORT QgsLayerTreeViewBase : public QTreeView
131{
132 Q_OBJECT
133
134 public:
136 explicit QgsLayerTreeViewBase( QWidget *parent SIP_TRANSFERTHIS = nullptr );
137 ~QgsLayerTreeViewBase() override;
138
139 void mouseDoubleClickEvent( QMouseEvent *event ) override;
140
151
157
171 QgsLayerTreeNode *index2node( const QModelIndex &index ) const;
172
184 QModelIndex node2index( QgsLayerTreeNode *node ) const;
185
197 QModelIndex node2sourceIndex( QgsLayerTreeNode *node ) const;
198
209 QgsLayerTreeModelLegendNode *index2legendNode( const QModelIndex &index ) const;
210
217
227 QList<QgsLayerTreeNode *> selectedNodes( bool skipInternal = false ) const;
228
234 QgsMapLayer *currentLayer() const;
235
243 QgsMapLayer *layerForIndex( const QModelIndex &index ) const;
244
253
261 QList<QgsLayerTreeLayer *> selectedLayerNodes() const;
262
270 QList<QgsMapLayer *> selectedLayers() const;
271
284 QModelIndex legendNode2index( QgsLayerTreeModelLegendNode *legendNode );
285
300 QModelIndex legendNode2sourceIndex( QgsLayerTreeModelLegendNode *legendNode );
301
310 void setCurrentNode( QgsLayerTreeNode *node );
311
319 void setCurrentLayer( QgsMapLayer *layer );
320
325
334 QList<QgsLayerTreeModelLegendNode *> selectedLegendNodes() const;
335
342 QList<QgsMapLayer *> selectedLayersRecursive() const;
343
346
347 public slots:
348
352 void expandAllNodes();
353
357 void collapseAllNodes();
358
359 protected:
360
365
373 QModelIndex viewIndexToLayerTreeModelIndex( const QModelIndex &index ) const;
374
382 QModelIndex layerTreeModelIndexToViewIndex( const QModelIndex &index ) const;
383
386
387 protected slots:
388
392 void updateExpandedStateToNode( const QModelIndex &index );
393
397 void onExpandedChanged( QgsLayerTreeNode *node, bool expanded );
398
402 void onModelReset();
403
404 private slots:
405
406 void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
407
408 private:
409 QgsLayerTreeModel *mLayerTreeModel = nullptr;
410 QTimer *mBlockDoubleClickTimer = nullptr;
411};
412
413
428class GUI_EXPORT QgsLayerTreeView : public QgsLayerTreeViewBase
429{
430#ifdef SIP_RUN
432 if ( sipCpp->inherits( "QgsLayerTreeView" ) )
433 sipType = sipType_QgsLayerTreeView;
434 else
435 sipType = 0;
436 SIP_END
437#endif
438
439
440 Q_OBJECT
441 public:
443 explicit QgsLayerTreeView( QWidget *parent SIP_TRANSFERTHIS = nullptr );
444 ~QgsLayerTreeView() override;
445
451 void setModel( QAbstractItemModel *model ) override;
452
461
470
475
482 void setLayerVisible( QgsMapLayer *layer, bool visible );
483
494 void addIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
495
502 void removeIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
503
510 QList<QgsLayerTreeViewIndicator *> indicators( QgsLayerTreeNode *node ) const;
511
517 int layerMarkWidth() const { return mLayerMarkWidth; }
518
520
530 static QStringList viewOnlyCustomProperties() SIP_SKIP;
531
533
538 bool showPrivateLayers() const;
539
546 bool hideValidLayers() const;
547
548 public slots:
550 void refreshLayerSymbology( const QString &layerId );
551
557 void setLayerMarkWidth( int width ) { mLayerMarkWidth = width; }
558
563 void setMessageBar( QgsMessageBar *messageBar );
564
569 void setShowPrivateLayers( bool showPrivate );
570
577 void setHideValidLayers( bool hideValid );
578
579 signals:
582
584 void datasetsDropped( QDropEvent *event );
585
593 void contextMenuAboutToShow( QMenu *menu );
594
595 protected:
596 void contextMenuEvent( QContextMenuEvent *event ) override;
597
598 void mouseReleaseEvent( QMouseEvent *event ) override;
599 void keyPressEvent( QKeyEvent *event ) override;
600
601 void dragEnterEvent( QDragEnterEvent *event ) override;
602 void dragMoveEvent( QDragMoveEvent *event ) override;
603 void dropEvent( QDropEvent *event ) override;
604
605 void resizeEvent( QResizeEvent *event ) override;
606
607 protected slots:
608
609 void modelRowsInserted( const QModelIndex &index, int start, int end );
610 void modelRowsRemoved();
611
612 void onCurrentChanged();
613
614 private slots:
615 void onCustomPropertyChanged( QgsLayerTreeNode *node, const QString &key );
617 void onHorizontalScroll( int value );
618
619 void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
620
621 protected:
627 QHash<QgsLayerTreeNode *, QList<QgsLayerTreeViewIndicator *>> mIndicators;
630
633
634 private:
635 QgsLayerTreeProxyModel *mProxyModel = nullptr;
636
637 QgsMessageBar *mMessageBar = nullptr;
638
639 bool mShowPrivateLayers = false;
640 bool mHideValidLayers = false;
641
642 // For model debugging
643 // void checkModel( );
644
645 // friend so it can access viewOptions() method and mLastReleaseMousePos without making them public
647};
648
649
658{
659 public:
660 virtual ~QgsLayerTreeViewMenuProvider() = default;
661
663 virtual QMenu *createContextMenu() = 0 SIP_FACTORY;
664};
665
666
667#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