@@ -271,6 +271,19 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const
271271 f.setUnderline ( true );
272272 return f;
273273 }
274+ else if ( role == Qt::ForegroundRole )
275+ {
276+ QBrush brush ( Qt::black, Qt::SolidPattern );
277+ if ( QgsLayerTree::isLayer ( node ) )
278+ {
279+ const QgsMapLayer* layer = QgsLayerTree::toLayer ( node )->layer ();
280+ if ( layer && !layer->isInScaleRange ( mLegendMapViewScale ) )
281+ {
282+ brush.setColor ( Qt::lightGray );
283+ }
284+ }
285+ return brush;
286+ }
274287 else if ( role == Qt::ToolTipRole )
275288 {
276289 if ( QgsLayerTree::isLayer ( node ) )
@@ -633,6 +646,8 @@ void QgsLayerTreeModel::setLegendMapViewData( double mapUnitsPerPixel, int dpi,
633646
634647 // now invalidate legend nodes!
635648 legendInvalidateMapBasedData ();
649+
650+ refreshScaleBasedLayers ();
636651}
637652
638653void QgsLayerTreeModel::legendMapViewData ( double * mapUnitsPerPixel, int * dpi, double * scale )
@@ -919,6 +934,24 @@ void QgsLayerTreeModel::recursivelyEmitDataChanged( const QModelIndex& idx )
919934 recursivelyEmitDataChanged ( index ( i, 0 , idx ) );
920935}
921936
937+ void QgsLayerTreeModel::refreshScaleBasedLayers ( const QModelIndex& idx )
938+ {
939+ QgsLayerTreeNode* node = index2node ( idx );
940+ if ( !node )
941+ return ;
942+
943+ if ( node->nodeType () == QgsLayerTreeNode::NodeLayer )
944+ {
945+ const QgsMapLayer* layer = QgsLayerTree::toLayer ( node )->layer ();
946+ if ( layer->hasScaleBasedVisibility () )
947+ {
948+ emit dataChanged ( idx, idx );
949+ }
950+ }
951+ int count = node->children ().count ();
952+ for ( int i = 0 ; i < count; ++i )
953+ refreshScaleBasedLayers ( index ( i, 0 , idx ) );
954+ }
922955
923956Qt::DropActions QgsLayerTreeModel::supportedDropActions () const
924957{
0 commit comments