Skip to content

Commit 9f01039

Browse files
authored
Merge pull request #7232 from rldhont/server-wms-getprint-fix-legend-218
[BUGFIX][Server] In GetPrint, legend as to be fixed when it is not auto update or filter by map
2 parents bc6c940 + e991380 commit 9f01039

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

src/server/qgswmsprojectparser.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,30 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
540540
return nullptr;
541541
}
542542

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+
543567
composition->addItemsFromXML( compositionElem, *( mProjectParser->xmlDocument() ) );
544568

545569
labelList.clear();
@@ -576,11 +600,12 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
576600
if ( legend->autoUpdateModel() )
577601
{
578602
model->setRootGroup( projectLayerTreeGroup() );
603+
legend->synchronizeWithModel();
579604
}
580605
// if the legend has no map
581606
// we will load all layers
582607
const QgsComposerMap* map = legend->composerMap();
583-
if ( !map )
608+
if ( !map || ( !legend->autoUpdateModel() && !legend->legendFilterByMapEnabled() ) )
584609
{
585610
QgsLayerTreeGroup* root = model->rootGroup();
586611
QStringList layerIds = root->findLayerIds();
@@ -602,7 +627,6 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
602627
layer = nodeLayer->layer();
603628
if ( !layer )
604629
{
605-
const QHash< QString, QDomElement > &projectLayerElements = mProjectParser->projectLayerElementsById();
606630
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find( layerId );
607631
if ( layerElemIt != projectLayerElements.constEnd() )
608632
{
@@ -2436,6 +2460,7 @@ QgsLayerTreeGroup* QgsWMSProjectParser::projectLayerTreeGroup() const
24362460
QgsLayerTreeUtils::readOldLegend( rootGroup, mProjectParser->legendElem() );
24372461
return rootGroup;
24382462
}
2463+
24392464
return QgsLayerTreeGroup::readXML( layerTreeElem );
24402465
}
24412466

0 commit comments

Comments
 (0)