Skip to content

Commit 86d447b

Browse files
committedJun 19, 2015
[BUGFIX][QGIS-Server] Add all layers for fixed legend in GetPrint
If a legend is not linked to a map, it's a fixed legend and does not depend on layers parameter. This bugfix loads all layers needed by legend and update it.
1 parent 2372351 commit 86d447b

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed
 

‎src/server/qgswmsprojectparser.cpp

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgsconfigparserutils.h"
2121
#include "qgslogger.h"
2222
#include "qgsmaplayer.h"
23+
#include "qgsmaplayerregistry.h"
2324
#include "qgsmaplayerstylemanager.h"
2425
#include "qgsmapserviceexception.h"
2526
#include "qgspallabeling.h"
@@ -38,6 +39,7 @@
3839
#include "qgscomposerscalebar.h"
3940
#include "qgscomposershape.h"
4041
#include "qgslayertreegroup.h"
42+
#include "qgslayertreelayer.h"
4143

4244
#include <QFileInfo>
4345
#include <QTextDocument>
@@ -442,17 +444,52 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
442444
QgsComposerLegend* legend = dynamic_cast< QgsComposerLegend *>( *itemIt );
443445
if ( legend )
444446
{
445-
#if 0
446447
QgsLegendModelV2* model = legend->modelV2();
448+
#if 0
447449
QgsLayerTreeGroup* root = model->rootGroup();
448450
QStringList layerIds = root->findLayerIds();
449451
throw QgsMapServiceException( "Error", "Composer legend layerIds " + layerIds.join( " ," ) );
450452
#endif
451453
if ( legend->autoUpdateModel() )
452454
{
453-
QgsLegendModelV2* model = legend->modelV2();
454455
model->setRootGroup( projectLayerTreeGroup() );
455456
}
457+
// if the legend has no map
458+
// we will load all layers
459+
const QgsComposerMap* map = legend->composerMap();
460+
if ( !map )
461+
{
462+
QgsLayerTreeGroup* root = model->rootGroup();
463+
QStringList layerIds = root->findLayerIds();
464+
// foreach layer find in the layer tree
465+
// load it if the layer id is not QgsMapLayerRegistry
466+
foreach ( QString layerId, layerIds )
467+
{
468+
QgsMapLayer * layer = QgsMapLayerRegistry::instance()->mapLayer( layerId );
469+
if ( layer )
470+
{
471+
continue;
472+
}
473+
474+
QgsLayerTreeLayer* nodeLayer = root->findLayer( layerId );
475+
if ( !nodeLayer )
476+
{
477+
continue;
478+
}
479+
layer = nodeLayer->layer();
480+
if ( !layer )
481+
{
482+
const QHash< QString, QDomElement > &projectLayerElements = mProjectParser->projectLayerElementsById();
483+
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find( layerId );
484+
if ( layerElemIt != projectLayerElements.constEnd() )
485+
{
486+
layer = mProjectParser->createLayerFromElement( layerElemIt.value(), true );
487+
}
488+
}
489+
QgsMapLayerRegistry::instance()->addMapLayer( layer );
490+
}
491+
legend->updateLegend();
492+
}
456493
legendList.push_back( legend );
457494
continue;
458495
}

0 commit comments

Comments
 (0)
Please sign in to comment.