@@ -540,6 +540,30 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
540
540
return nullptr ;
541
541
}
542
542
543
+ // load layers for legends before loaded legends
544
+ const QHash< QString, QDomElement > &projectLayerElements = mProjectParser ->projectLayerElementsById ();
545
+ QDomNodeList treeLayerNodeList = compositionElem.elementsByTagName ( " layer-tree-layer" );
546
+ for ( int i = 0 ; i < treeLayerNodeList.size (); ++i )
547
+ {
548
+ QDomElement treeLayerElem = treeLayerNodeList.at ( i ).toElement ();
549
+ QString layerId = treeLayerElem.attribute ( " id" );
550
+ QgsMapLayer * layer = QgsMapLayerRegistry::instance ()->mapLayer ( layerId );
551
+ if ( layer )
552
+ {
553
+ continue ;
554
+ }
555
+
556
+ QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find ( layerId );
557
+ if ( layerElemIt != projectLayerElements.constEnd () )
558
+ {
559
+ layer = mProjectParser ->createLayerFromElement ( layerElemIt.value (), true );
560
+ }
561
+ if ( layer )
562
+ {
563
+ QgsMapLayerRegistry::instance ()->addMapLayer ( layer );
564
+ }
565
+ }
566
+
543
567
composition->addItemsFromXML ( compositionElem, *( mProjectParser ->xmlDocument () ) );
544
568
545
569
labelList.clear ();
@@ -576,11 +600,12 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
576
600
if ( legend->autoUpdateModel () )
577
601
{
578
602
model->setRootGroup ( projectLayerTreeGroup () );
603
+ legend->synchronizeWithModel ();
579
604
}
580
605
// if the legend has no map
581
606
// we will load all layers
582
607
const QgsComposerMap* map = legend->composerMap ();
583
- if ( !map )
608
+ if ( !map || ( !legend-> autoUpdateModel () && !legend-> legendFilterByMapEnabled () ) )
584
609
{
585
610
QgsLayerTreeGroup* root = model->rootGroup ();
586
611
QStringList layerIds = root->findLayerIds ();
@@ -602,7 +627,6 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
602
627
layer = nodeLayer->layer ();
603
628
if ( !layer )
604
629
{
605
- const QHash< QString, QDomElement > &projectLayerElements = mProjectParser ->projectLayerElementsById ();
606
630
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find ( layerId );
607
631
if ( layerElemIt != projectLayerElements.constEnd () )
608
632
{
@@ -2436,6 +2460,7 @@ QgsLayerTreeGroup* QgsWMSProjectParser::projectLayerTreeGroup() const
2436
2460
QgsLayerTreeUtils::readOldLegend ( rootGroup, mProjectParser ->legendElem () );
2437
2461
return rootGroup;
2438
2462
}
2463
+
2439
2464
return QgsLayerTreeGroup::readXML ( layerTreeElem );
2440
2465
}
2441
2466
0 commit comments