QGIS API Documentation 3.43.0-Master (c67cf405802)
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
31class QgsMapLayer;
32class QgsMessageBar;
34
35
36#include <QSortFilterProxyModel>
37
46class GUI_EXPORT QgsLayerTreeProxyModel : public QSortFilterProxyModel
47{
48 Q_OBJECT
49
50 public:
54 QgsLayerTreeProxyModel( QgsLayerTreeModel *treeModel, QObject *parent );
55
59 void setFilterText( const QString &filterText = QString() );
60
64 bool showPrivateLayers() const;
65
69 void setShowPrivateLayers( bool showPrivate );
70
77 bool hideValidLayers() const;
78
85 void setHideValidLayers( bool hideValid );
86
87 protected:
88 bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const override;
89
90 private:
91 bool nodeShown( QgsLayerTreeNode *node ) const;
92
93 QgsLayerTreeModel *mLayerTreeModel = nullptr;
94 QString mFilterText;
95 bool mShowPrivateLayers = false;
96 bool mHideValidLayers = false;
97};
98
99
114class GUI_EXPORT QgsLayerTreeView : public QTreeView
115{
116#ifdef SIP_RUN
118 if ( sipCpp->inherits( "QgsLayerTreeView" ) )
119 sipType = sipType_QgsLayerTreeView;
120 else
121 sipType = 0;
122 SIP_END
123#endif
124
125
126 Q_OBJECT
127 public:
129 explicit QgsLayerTreeView( QWidget *parent SIP_TRANSFERTHIS = nullptr );
130 ~QgsLayerTreeView() override;
131
133 void setModel( QAbstractItemModel *model ) override;
134
136 QgsLayerTreeModel *layerTreeModel() const;
137
145 QgsLayerTreeProxyModel *proxyModel() const;
146
156 QgsLayerTreeNode *index2node( const QModelIndex &index ) const;
157
166 QModelIndex node2index( QgsLayerTreeNode *node ) const;
167
168
174 QModelIndex node2sourceIndex( QgsLayerTreeNode *node ) const;
175
176
185 QgsLayerTreeModelLegendNode *index2legendNode( const QModelIndex &index ) const;
186
196 QModelIndex legendNode2index( QgsLayerTreeModelLegendNode *legendNode );
197
204 QModelIndex legendNode2sourceIndex( QgsLayerTreeModelLegendNode *legendNode );
205
207 QgsLayerTreeViewDefaultActions *defaultActions();
208
210 void setMenuProvider( QgsLayerTreeViewMenuProvider *menuProvider SIP_TRANSFER );
212 QgsLayerTreeViewMenuProvider *menuProvider() const { return mMenuProvider; }
213
219 QgsMapLayer *currentLayer() const;
220
227 void setLayerVisible( QgsMapLayer *layer, bool visible );
228
237 void setCurrentNode( QgsLayerTreeNode *node );
238
246 void setCurrentLayer( QgsMapLayer *layer );
247
249 QgsLayerTreeNode *currentNode() const;
251 QgsLayerTreeGroup *currentGroupNode() const;
252
256 QgsLayerTreeModelLegendNode *currentLegendNode() const;
257
267 QList<QgsLayerTreeNode *> selectedNodes( bool skipInternal = false ) const;
268
276 QList<QgsLayerTreeLayer *> selectedLayerNodes() const;
277
285 QList<QgsMapLayer *> selectedLayers() const;
286
295 QList<QgsLayerTreeModelLegendNode *> selectedLegendNodes() const;
296
303 QList<QgsMapLayer *> selectedLayersRecursive() const;
304
315 void addIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
316
323 void removeIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator );
324
331 QList<QgsLayerTreeViewIndicator *> indicators( QgsLayerTreeNode *node ) const;
332
338 int layerMarkWidth() const { return mLayerMarkWidth; }
339
341
351 static QStringList viewOnlyCustomProperties() SIP_SKIP;
352
354
359 bool showPrivateLayers() const;
360
367 bool hideValidLayers() const;
368
369 public slots:
371 void refreshLayerSymbology( const QString &layerId );
372
376 void expandAllNodes();
377
381 void collapseAllNodes();
382
388 void setLayerMarkWidth( int width ) { mLayerMarkWidth = width; }
389
394 void setMessageBar( QgsMessageBar *messageBar );
395
400 void setShowPrivateLayers( bool showPrivate );
401
408 void setHideValidLayers( bool hideValid );
409
410 signals:
413
415 void datasetsDropped( QDropEvent *event );
416
424 void contextMenuAboutToShow( QMenu *menu );
425
426 protected:
427 void contextMenuEvent( QContextMenuEvent *event ) override;
428
429 void updateExpandedStateFromNode( QgsLayerTreeNode *node );
430
431 QgsMapLayer *layerForIndex( const QModelIndex &index ) const;
432
433 void mouseDoubleClickEvent( QMouseEvent *event ) override;
434 void mouseReleaseEvent( QMouseEvent *event ) override;
435 void keyPressEvent( QKeyEvent *event ) override;
436
437 void dragEnterEvent( QDragEnterEvent *event ) override;
438 void dragMoveEvent( QDragMoveEvent *event ) override;
439 void dropEvent( QDropEvent *event ) override;
440
441 void resizeEvent( QResizeEvent *event ) override;
442
443 protected slots:
444
445 void modelRowsInserted( const QModelIndex &index, int start, int end );
446 void modelRowsRemoved();
447
448 void updateExpandedStateToNode( const QModelIndex &index );
449
450 void onCurrentChanged();
451 void onExpandedChanged( QgsLayerTreeNode *node, bool expanded );
452 void onModelReset();
453
454 private slots:
455 void onCustomPropertyChanged( QgsLayerTreeNode *node, const QString &key );
457 void onHorizontalScroll( int value );
458
459 void onDataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
460
461 protected:
463 QgsLayerTreeViewDefaultActions *mDefaultActions = nullptr;
465 QgsLayerTreeViewMenuProvider *mMenuProvider = nullptr;
469 QHash<QgsLayerTreeNode *, QList<QgsLayerTreeViewIndicator *>> mIndicators;
472
475
476 private:
477 QgsLayerTreeProxyModel *mProxyModel = nullptr;
478
479 QgsMessageBar *mMessageBar = nullptr;
480
481 bool mShowPrivateLayers = false;
482 bool mHideValidLayers = false;
483
484 QTimer *mBlockDoubleClickTimer = nullptr;
485 // For model debugging
486 // void checkModel( );
487
488 // friend so it can access viewOptions() method and mLastReleaseMousePos without making them public
489 friend class QgsLayerTreeViewItemDelegate;
490};
491
492
501{
502 public:
503 virtual ~QgsLayerTreeViewMenuProvider() = default;
504
506 virtual QMenu *createContextMenu() = 0 SIP_FACTORY;
507};
508
509
510#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.
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
Extends QTreeView and provides additional functionality when working with a layer tree.
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.
QHash< QgsLayerTreeNode *, QList< QgsLayerTreeViewIndicator * > > mIndicators
Storage of indicators used with the tree view.
QgsLayerTreeViewMenuProvider * menuProvider() const
Returns pointer to the context menu provider. May be nullptr.
QPoint mLastReleaseMousePos
Used by the item delegate for identification of which indicator has been clicked.
int layerMarkWidth() const
Returns width of contextual menu mark, at right of layer node items.
Base class for all map layer types.
Definition qgsmaplayer.h:77
A bar for displaying non-blocking messages to the user.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:191
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_END
Definition qgis_sip.h:208