From 33ee00f3f66e1036a14495c2e17b5c0ace41576d Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 16 Jul 2019 09:11:22 +1000 Subject: [PATCH] Ensure layer tree indicator icons are repainted on changes --- .../layertree/qgslayertreeviewindicator.sip.in | 7 +++++++ src/gui/layertree/qgslayertreeview.cpp | 5 +++++ src/gui/layertree/qgslayertreeviewindicator.h | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/python/gui/auto_generated/layertree/qgslayertreeviewindicator.sip.in b/python/gui/auto_generated/layertree/qgslayertreeviewindicator.sip.in index cf2488871a8..ffb26965a4b 100644 --- a/python/gui/auto_generated/layertree/qgslayertreeviewindicator.sip.in +++ b/python/gui/auto_generated/layertree/qgslayertreeviewindicator.sip.in @@ -52,6 +52,13 @@ Sets tool tip text void clicked( const QModelIndex &index ); %Docstring Emitted when user clicks on the indicator +%End + + void changed(); +%Docstring +Emitted when the indicator changes state (e.g. icon). + +.. versionadded:: 3.10 %End }; diff --git a/src/gui/layertree/qgslayertreeview.cpp b/src/gui/layertree/qgslayertreeview.cpp index dd7b5942975..899aa924818 100644 --- a/src/gui/layertree/qgslayertreeview.cpp +++ b/src/gui/layertree/qgslayertreeview.cpp @@ -398,12 +398,17 @@ QList QgsLayerTreeView::selectedLayersRecursive() const void QgsLayerTreeView::addIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator ) { if ( !mIndicators[node].contains( indicator ) ) + { mIndicators[node].append( indicator ); + connect( indicator, &QgsLayerTreeViewIndicator::changed, this, [ = ] { update(); } ); + update(); + } } void QgsLayerTreeView::removeIndicator( QgsLayerTreeNode *node, QgsLayerTreeViewIndicator *indicator ) { mIndicators[node].removeOne( indicator ); + update(); } QList QgsLayerTreeView::indicators( QgsLayerTreeNode *node ) const diff --git a/src/gui/layertree/qgslayertreeviewindicator.h b/src/gui/layertree/qgslayertreeviewindicator.h index 4c917cdeb93..8695c7337cb 100644 --- a/src/gui/layertree/qgslayertreeviewindicator.h +++ b/src/gui/layertree/qgslayertreeviewindicator.h @@ -42,7 +42,7 @@ class GUI_EXPORT QgsLayerTreeViewIndicator : public QObject //! Indicator icon that will be displayed in the layer tree view QIcon icon() const { return mIcon; } //! Sets indicator icon that will be displayed in the layer tree view - void setIcon( const QIcon &icon ) { mIcon = icon; } + void setIcon( const QIcon &icon ) { mIcon = icon; emit changed(); } //! Returns tool tip text that will be shown when user hovers mouse over the indicator QString toolTip() const { return mToolTip; } @@ -53,6 +53,12 @@ class GUI_EXPORT QgsLayerTreeViewIndicator : public QObject //! Emitted when user clicks on the indicator void clicked( const QModelIndex &index ); + /** + * Emitted when the indicator changes state (e.g. icon). + * \since QGIS 3.10 + */ + void changed(); + private: QIcon mIcon; QString mToolTip;