@@ -509,6 +509,14 @@ void QgsLegendModel::removeLayer( const QString& layerId )
509
509
510
510
if ( layerId == lItem->layerID () )
511
511
{
512
+ if ( QgsMapLayerRegistry::instance () )
513
+ {
514
+ QgsMapLayer* layer = QgsMapLayerRegistry::instance ()->mapLayer ( lItem->layerID () );
515
+ if ( layer )
516
+ {
517
+ disconnect ( layer, SIGNAL ( rendererChanged () ), this , SLOT ( updateLayer () ) );
518
+ }
519
+ }
512
520
removeRow ( i ); // todo: also remove the subitems and their symbols...
513
521
emit layersChanged ();
514
522
return ;
@@ -554,9 +562,30 @@ void QgsLegendModel::addLayer( QgsMapLayer* theMapLayer, double scaleDenominator
554
562
default :
555
563
break ;
556
564
}
565
+
566
+ if ( mAutoUpdate )
567
+ {
568
+ connect ( theMapLayer, SIGNAL ( rendererChanged () ), this , SLOT ( updateLayer () ) );
569
+ }
570
+
557
571
emit layersChanged ();
558
572
}
559
573
574
+ void QgsLegendModel::updateLayer ()
575
+ {
576
+ QString layerId = qobject_cast<QgsMapLayer*>( QObject::sender () )->id ();
577
+
578
+ for ( int i = 0 , n = rowCount (); i < n ; ++i )
579
+ {
580
+ QgsComposerLayerItem* lItem = dynamic_cast <QgsComposerLayerItem*>( item ( i ) );
581
+ if ( lItem && layerId == lItem->layerID () )
582
+ {
583
+ updateLayer ( lItem );
584
+ emit layersChanged ();
585
+ return ;
586
+ }
587
+ }
588
+ }
560
589
561
590
bool QgsLegendModel::writeXML ( QDomElement& composerLegendElem, QDomDocument& doc ) const
562
591
{
@@ -595,6 +624,9 @@ bool QgsLegendModel::readXML( const QDomElement& legendModelElem, const QDomDocu
595
624
}
596
625
597
626
clear ();
627
+ // disable autoupdates here in order to have a setAutoUpdate(true)
628
+ // below connect the rendererChanged signals to the layers
629
+ setAutoUpdate ( false );
598
630
599
631
QDomNodeList topLevelItemList = legendModelElem.childNodes ();
600
632
QDomElement currentElem;
@@ -834,6 +866,19 @@ void QgsLegendModel::setAutoUpdate( bool autoUpdate )
834
866
{
835
867
connect ( QgsMapLayerRegistry::instance (), SIGNAL ( layerWillBeRemoved ( QString ) ), this , SLOT ( removeLayer ( const QString& ) ) );
836
868
connect ( QgsMapLayerRegistry::instance (), SIGNAL ( layerWasAdded ( QgsMapLayer* ) ), this , SLOT ( addLayer ( QgsMapLayer* ) ) );
869
+
870
+ for ( int i = 0 , n = rowCount (); i < n ; ++i )
871
+ {
872
+ QgsComposerLayerItem* lItem = dynamic_cast <QgsComposerLayerItem*>( item ( i ) );
873
+ if ( lItem )
874
+ {
875
+ QgsMapLayer* layer = QgsMapLayerRegistry::instance ()->mapLayer ( lItem->layerID () );
876
+ if ( layer )
877
+ {
878
+ connect ( layer, SIGNAL ( rendererChanged () ), this , SLOT ( updateLayer () ) );
879
+ }
880
+ }
881
+ }
837
882
}
838
883
}
839
884
else
@@ -842,6 +887,19 @@ void QgsLegendModel::setAutoUpdate( bool autoUpdate )
842
887
{
843
888
disconnect ( QgsMapLayerRegistry::instance (), SIGNAL ( layerWillBeRemoved ( QString ) ), this , SLOT ( removeLayer ( const QString& ) ) );
844
889
disconnect ( QgsMapLayerRegistry::instance (), SIGNAL ( layerWasAdded ( QgsMapLayer* ) ), this , SLOT ( addLayer ( QgsMapLayer* ) ) );
890
+
891
+ for ( int i = 0 , n = rowCount (); i < n ; ++i )
892
+ {
893
+ QgsComposerLayerItem* lItem = dynamic_cast <QgsComposerLayerItem*>( item ( i ) );
894
+ if ( lItem )
895
+ {
896
+ QgsMapLayer* layer = QgsMapLayerRegistry::instance ()->mapLayer ( lItem->layerID () );
897
+ if ( layer )
898
+ {
899
+ disconnect ( layer, SIGNAL ( rendererChanged () ), this , SLOT ( updateLayer () ) );
900
+ }
901
+ }
902
+ }
845
903
}
846
904
}
847
905
}
0 commit comments