QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
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 <QTreeView>
20 #include "qgis.h"
21 #include "qgis_gui.h"
22 
23 class QgsLayerTreeGroup;
24 class QgsLayerTreeLayer;
25 class QgsLayerTreeModel;
26 class QgsLayerTreeNode;
31 class QgsMapLayer;
32 class QgsMessageBar;
34 
35 
36 #include <QSortFilterProxyModel>
37 
46 class GUI_EXPORT QgsLayerTreeProxyModel : public QSortFilterProxyModel
47 {
48  Q_OBJECT
49 
50  public:
51 
55  QgsLayerTreeProxyModel( QgsLayerTreeModel *treeModel, QObject *parent );
56 
60  void setFilterText( const QString &filterText = QString() );
61 
65  bool showPrivateLayers() const;
66 
70  void setShowPrivateLayers( bool showPrivate );
71 
72  protected:
73 
74  bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const override;
75 
76  private:
77 
78  bool nodeShown( QgsLayerTreeNode *node ) const;
79 
80  QgsLayerTreeModel *mLayerTreeModel = nullptr;
81  QString mFilterText;
82  bool mShowPrivateLayers = false;
83 
84 };
85 
86 
103 class GUI_EXPORT QgsLayerTreeView : public QTreeView
104 {
105 
106 #ifdef SIP_RUN
108  if ( sipCpp->inherits( "QgsLayerTreeView" ) )
109  sipType = sipType_QgsLayerTreeView;
110  else
111  sipType = 0;
112  SIP_END
113 #endif
114 
115 
116  Q_OBJECT
117  public:
118 
120  explicit QgsLayerTreeView( QWidget *parent SIP_TRANSFERTHIS = nullptr );
121  ~QgsLayerTreeView() override;
122 
124  void setModel( QAbstractItemModel *model ) override;
125 
127  QgsLayerTreeModel *layerTreeModel() const;
128 
136  QgsLayerTreeProxyModel *proxyModel() const;
137 
147  QgsLayerTreeNode *index2node( const QModelIndex &index ) const;
148 
157  QModelIndex node2index( QgsLayerTreeNode *node ) const;
158 
159 
165  QModelIndex node2sourceIndex( QgsLayerTreeNode *node ) const;
166 
167 
176  QgsLayerTreeModelLegendNode *index2legendNode( const QModelIndex &index ) const;
177 
187  QModelIndex legendNode2index( QgsLayerTreeModelLegendNode *legendNode );
188 
195  QModelIndex legendNode2sourceIndex( QgsLayerTreeModelLegendNode *legendNode );
196 
198  QgsLayerTreeViewDefaultActions *defaultActions();
199 
201  void setMenuProvider( QgsLayerTreeViewMenuProvider *menuProvider SIP_TRANSFER );
203  QgsLayerTreeViewMenuProvider *menuProvider() const { return mMenuProvider; }
204 
210  QgsMapLayer *currentLayer() const;
211 
218  void setLayerVisible( QgsMapLayer *layer, bool visible );
219 
227  void setCurrentLayer( QgsMapLayer *layer );
228 
230  QgsLayerTreeNode *currentNode() const;
232  QgsLayerTreeGroup *currentGroupNode() const;
233 
238  QgsLayerTreeModelLegendNode *currentLegendNode() const;
239 
244  QList<QgsLayerTreeNode *> selectedNodes( bool skipInternal = false ) const;
246  QList<QgsLayerTreeLayer *> selectedLayerNodes() const;
247 
249  QList<QgsMapLayer *> selectedLayers() const;
250 
257  QList<QgsMapLayer *> selectedLayersRecursive() const;
258 
269  void addIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
270 
277  void removeIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
278 
285  QList<QgsLayerTreeViewIndicator *> indicators( QgsLayerTreeNode *node ) const;
286 
292  int layerMarkWidth() const { return mLayerMarkWidth; }
293 
295 
305  static QStringList viewOnlyCustomProperties() SIP_SKIP;
307 
308  public slots:
310  void refreshLayerSymbology( const QString &layerId );
311 
316  void expandAllNodes();
317 
322  void collapseAllNodes();
323 
329  void setLayerMarkWidth( int width ) { mLayerMarkWidth = width; }
330 
335  void setMessageBar( QgsMessageBar *messageBar );
336 
341  void setShowPrivateLayers( bool showPrivate );
342 
347  bool showPrivateLayers( );
348 
349  signals:
351  void currentLayerChanged( QgsMapLayer *layer );
352 
353  protected:
354  void contextMenuEvent( QContextMenuEvent *event ) override;
355 
356  void updateExpandedStateFromNode( QgsLayerTreeNode *node );
357 
358  QgsMapLayer *layerForIndex( const QModelIndex &index ) const;
359 
360  void mouseReleaseEvent( QMouseEvent *event ) override;
361  void keyPressEvent( QKeyEvent *event ) override;
362 
363  void dropEvent( QDropEvent *event ) override;
364 
365  void resizeEvent( QResizeEvent *event ) override;
366 
367  protected slots:
368 
369  void modelRowsInserted( const QModelIndex &index, int start, int end );
370  void modelRowsRemoved();
371 
372  void updateExpandedStateToNode( const QModelIndex &index );
373 
374  void onCurrentChanged();
375  void onExpandedChanged( QgsLayerTreeNode *node, bool expanded );
376  void onModelReset();
377 
378  private slots:
379  void onCustomPropertyChanged( QgsLayerTreeNode *node, const QString &key );
381  void onHorizontalScroll( int value );
382 
383  void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
384 
385  protected:
387  QgsLayerTreeViewDefaultActions *mDefaultActions = nullptr;
389  QgsLayerTreeViewMenuProvider *mMenuProvider = nullptr;
393  QHash< QgsLayerTreeNode *, QList<QgsLayerTreeViewIndicator *> > mIndicators;
396 
399 
400  private:
401  QgsLayerTreeProxyModel *mProxyModel = nullptr;
402 
403  QgsMessageBar *mMessageBar = nullptr;
404 
405  bool mShowPrivateLayers = false;
406 
407  // For model debugging
408  // void checkModel( );
409 
410  // friend so it can access viewOptions() method and mLastReleaseMousePos without making them public
411  friend class QgsLayerTreeViewItemDelegate;
412 };
413 
414 
424 {
425  public:
426  virtual ~QgsLayerTreeViewMenuProvider() = default;
427 
429  virtual QMenu *createContextMenu() = 0 SIP_FACTORY;
430 };
431 
432 
433 #endif // QGSLAYERTREEVIEW_H
QgsLayerTreeNode
This class is a base class for nodes in a layer tree.
Definition: qgslayertreenode.h:75
qgis.h
QgsLayerTreeViewMenuProvider
Implementation of this interface can be implemented to allow QgsLayerTreeView instance to provide cus...
Definition: qgslayertreeview.h:423
QgsLayerTreeView::menuProvider
QgsLayerTreeViewMenuProvider * menuProvider() const
Returns pointer to the context menu provider. May be nullptr.
Definition: qgslayertreeview.h:203
QgsLayerTreeModel
The QgsLayerTreeModel class is model implementation for Qt item views framework.
Definition: qgslayertreemodel.h:55
SIP_FACTORY
#define SIP_FACTORY
Definition: qgis_sip.h:76
QgsLayerTreeProxyModel
The QgsLayerTreeProxyModel class is a proxy model for QgsLayerTreeModel, supports private layers and ...
Definition: qgslayertreeview.h:46
QgsLayerTreeFilterProxyModel
QgsLayerTreeFilterProxyModel is a sort filter proxy model to easily reproduce the legend/layer tree i...
Definition: qgslayertreefilterproxymodel.h:41
SIP_CONVERT_TO_SUBCLASS_CODE
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:186
QgsLayerTreeViewIndicator
Indicator that can be used in a layer tree view to display icons next to items of the layer tree....
Definition: qgslayertreeviewindicator.h:35
SIP_SKIP
#define SIP_SKIP
Definition: qgis_sip.h:126
QgsLayerTreeView::layerMarkWidth
int layerMarkWidth() const
Returns width of contextual menu mark, at right of layer node items.
Definition: qgslayertreeview.h:292
QgsLayerTreeLayer
Layer tree node points to a map layer.
Definition: qgslayertreelayer.h:43
SIP_TRANSFER
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QgsLayerTreeGroup
Layer tree group node serves as a container for layers and further groups.
Definition: qgslayertreegroup.h:40
QgsMessageBar
A bar for displaying non-blocking messages to the user.
Definition: qgsmessagebar.h:60
QgsLayerTreeViewDefaultActions
The QgsLayerTreeViewDefaultActions class serves as a factory of actions that can be used together wit...
Definition: qgslayertreeviewdefaultactions.h:39
QgsWms::legendNode
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
Definition: qgswmsgetlegendgraphics.cpp:363
QgsMapLayer
Base class for all map layer types. This is the base class for all map layer types (vector,...
Definition: qgsmaplayer.h:72
QgsLayerTreeView::mLayerMarkWidth
int mLayerMarkWidth
Width of contextual menu mark for layer nodes.
Definition: qgslayertreeview.h:398
QgsLayerTreeView
The QgsLayerTreeView class extends QTreeView and provides some additional functionality when working ...
Definition: qgslayertreeview.h:103
QgsLayerTreeView::mCurrentLayerID
QString mCurrentLayerID
Keeps track of current layer ID (to check when to emit signal about change of current layer)
Definition: qgslayertreeview.h:391
SIP_END
#define SIP_END
Definition: qgis_sip.h:203
SIP_TRANSFERTHIS
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
QgsLayerTreeView::mLastReleaseMousePos
QPoint mLastReleaseMousePos
Used by the item delegate for identification of which indicator has been clicked.
Definition: qgslayertreeview.h:395
QgsLayerTreeView::mIndicators
QHash< QgsLayerTreeNode *, QList< QgsLayerTreeViewIndicator * > > mIndicators
Storage of indicators used with the tree view.
Definition: qgslayertreeview.h:393
QgsLayerTreeModelLegendNode
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
Definition: qgslayertreemodellegendnode.h:49