From d014d63ede016fa6213d0de71be70cde97a0ca0a Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 21 Aug 2019 07:46:30 +1000 Subject: [PATCH] Don't show canvas specific formatting settings in layer tree model used outside of main canvas E.g. we shouldn't show scale based visibility text format changes or the editable toggle in models used for snapping dialog, project properties, etc. These properties are only associated with the main map canvas. --- .../core/auto_generated/layertree/qgslayertreemodel.sip.in | 1 + src/app/qgisapp.cpp | 1 + src/core/layertree/qgslayertreemodel.cpp | 6 +++--- src/core/layertree/qgslayertreemodel.h | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/python/core/auto_generated/layertree/qgslayertreemodel.sip.in b/python/core/auto_generated/layertree/qgslayertreemodel.sip.in index 5ff19bf8896..9b03d481877 100644 --- a/python/core/auto_generated/layertree/qgslayertreemodel.sip.in +++ b/python/core/auto_generated/layertree/qgslayertreemodel.sip.in @@ -81,6 +81,7 @@ The root node is not transferred by the model. ShowLegendAsTree, DeferredLegendInvalidation, UseEmbeddedWidgets, + UseTextFormatting, // behavioral flags AllowNodeReorder, diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 397dc7a0f24..9cf2e15e409 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -3999,6 +3999,7 @@ void QgisApp::initLayerTreeView() model->setFlag( QgsLayerTreeModel::AllowNodeChangeVisibility ); model->setFlag( QgsLayerTreeModel::ShowLegendAsTree ); model->setFlag( QgsLayerTreeModel::UseEmbeddedWidgets ); + model->setFlag( QgsLayerTreeModel::UseTextFormatting ); model->setAutoCollapseLegendNodes( 10 ); mLayerTreeView->setModel( model ); diff --git a/src/core/layertree/qgslayertreemodel.cpp b/src/core/layertree/qgslayertreemodel.cpp index 43ad5d49f90..e02575ab0d7 100644 --- a/src/core/layertree/qgslayertreemodel.cpp +++ b/src/core/layertree/qgslayertreemodel.cpp @@ -230,7 +230,7 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const icon = QgsLayerItem::iconDefault(); } - if ( vlayer && vlayer->isEditable() ) + if ( vlayer && vlayer->isEditable() && testFlag( UseTextFormatting ) ) { const int iconSize = scaleIconSize( 16 ); QPixmap pixmap( icon.pixmap( iconSize, iconSize ) ); @@ -265,7 +265,7 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const return nodeGroup->itemVisibilityChecked() ? Qt::Checked : Qt::Unchecked; } } - else if ( role == Qt::FontRole ) + else if ( role == Qt::FontRole && testFlag( UseTextFormatting ) ) { QFont f( QgsLayerTree::isLayer( node ) ? mFontLayer : ( QgsLayerTree::isGroup( node ) ? mFontGroup : QFont() ) ); if ( index == mCurrentIndex ) @@ -280,7 +280,7 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const } return f; } - else if ( role == Qt::ForegroundRole ) + else if ( role == Qt::ForegroundRole && testFlag( UseTextFormatting ) ) { QBrush brush( qApp->palette().color( QPalette::Text ), Qt::SolidPattern ); if ( QgsLayerTree::isLayer( node ) ) diff --git a/src/core/layertree/qgslayertreemodel.h b/src/core/layertree/qgslayertreemodel.h index 77233c590ca..44080406554 100644 --- a/src/core/layertree/qgslayertreemodel.h +++ b/src/core/layertree/qgslayertreemodel.h @@ -97,6 +97,7 @@ class CORE_EXPORT QgsLayerTreeModel : public QAbstractItemModel ShowLegendAsTree = 0x0004, //!< For legends that support it, will show them in a tree instead of a list (needs also ShowLegend). Added in 2.8 DeferredLegendInvalidation = 0x0008, //!< Defer legend model invalidation UseEmbeddedWidgets = 0x0010, //!< Layer nodes may optionally include extra embedded widgets (if used in QgsLayerTreeView). Added in 2.16 + UseTextFormatting = 0x0020, //!< Layer nodes will alter text appearance based on layer properties, such as scale based visibility // behavioral flags AllowNodeReorder = 0x1000, //!< Allow reordering with drag'n'drop