diff -r 60145497de34 src/app/legend/qgslegend.cpp --- a/src/app/legend/qgslegend.cpp Sat Mar 06 13:49:55 2010 +0000 +++ b/src/app/legend/qgslegend.cpp Sat Mar 06 16:26:59 2010 +0100 @@ -538,6 +538,17 @@ doItemsLayout(); } +void QgsLegend::setMapCanvas( QgsMapCanvas * canvas ) +{ + if( mMapCanvas ) + { + disconnect( mMapCanvas, SIGNAL( layersChanged() ) ); + } + + mMapCanvas = canvas; + connect( mMapCanvas, SIGNAL( layersChanged() ), this, SLOT( refreshCheckStates() ) ); +} + QgsLegendLayer* QgsLegend::currentLegendLayer() { QgsLegendItem* citem = dynamic_cast( currentItem() ); @@ -1746,3 +1757,22 @@ } return current; } + +void QgsLegend::refreshCheckStates() +{ + if( !mMapCanvas ) + { + return; + } + + QList lst = mMapCanvas->layers(); + for ( QTreeWidgetItem* item = firstItem(); item; item = nextItem( item ) ) + { + QgsLegendLayer* ll = dynamic_cast( item ); + if ( ll ) + { + ll->setCheckState( 0, ( lst.contains( ll->layer() ) ? Qt::Checked : Qt::Unchecked ) ); + } + } +} + diff -r 60145497de34 src/app/legend/qgslegend.h --- a/src/app/legend/qgslegend.h Sat Mar 06 13:49:55 2010 +0000 +++ b/src/app/legend/qgslegend.h Sat Mar 06 16:26:59 2010 +0100 @@ -187,7 +187,7 @@ /*!Adds a new layer group with the maplayer to the canvas*/ void addLayer( QgsMapLayer * layer ); - void setMapCanvas( QgsMapCanvas * canvas ) {mMapCanvas = canvas;} + void setMapCanvas( QgsMapCanvas * canvas ); /**Updates symbology items for a layer*/ void refreshLayerSymbology( QString key, bool expandItem = true ); @@ -265,6 +265,8 @@ /**Shows the property dialog of the first legend layer file in a legend layer*/ void legendLayerShowProperties(); + /**Updates check states when the map canvas layer set is changed */ + void refreshCheckStates(); protected: /*!Event handler for mouse movements.