Skip to content

Commit

Permalink
Merge pull request #38475 from rldhont/server-restorer-sld-style-enha…
Browse files Browse the repository at this point in the history
…ncement

Server: Enhance WMS Layer style restorer for SLD
  • Loading branch information
rldhont committed Sep 4, 2020
2 parents 8ece6ed + 26ab9f7 commit 0eee749
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 25 deletions.
11 changes: 10 additions & 1 deletion src/server/services/wms/qgswmsrenderer.cpp
Expand Up @@ -3162,8 +3162,17 @@ namespace QgsWms
void QgsRenderer::setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const
{
QString err;
// Defined sld style name
const QStringList styles = layer->styleManager()->styles();
QString sldStyleName = "__sld_style";
while ( styles.contains( sldStyleName ) )
{
sldStyleName.append( '@' );
}
layer->styleManager()->addStyleFromLayer( sldStyleName );
layer->styleManager()->setCurrentStyle( sldStyleName );
layer->readSld( sld, err );
layer->setCustomProperty( "readSLD", true );
layer->setCustomProperty( "sldStyleName", sldStyleName );
}

QgsLegendSettings QgsRenderer::legendSettings() const
Expand Down
27 changes: 4 additions & 23 deletions src/server/services/wms/qgswmsrestorer.cpp
Expand Up @@ -33,20 +33,6 @@ QgsLayerRestorer::QgsLayerRestorer( const QList<QgsMapLayer *> &layers )

settings.mNamedStyle = layer->styleManager()->currentStyle();

// set a custom property allowing to keep in memory if a SLD file has
// been loaded for rendering
layer->setCustomProperty( "readSLD", false );

QString errMsg;
QDomDocument styleDoc( QStringLiteral( "style" ) );
QDomElement styleXml = styleDoc.createElement( QStringLiteral( "style" ) );
styleDoc.appendChild( styleXml );
if ( !layer->writeStyle( styleXml, styleDoc, errMsg, QgsReadWriteContext() ) )
{
QgsMessageLog::logMessage( QStringLiteral( "QGIS Style has not been added to layer restorer for layer %1: %2" ).arg( layer->name(), errMsg ) );
}
( void )settings.mQgisStyle.setContent( styleDoc.toString() );

switch ( layer->type() )
{
case QgsMapLayerType::VectorLayer:
Expand Down Expand Up @@ -92,17 +78,12 @@ QgsLayerRestorer::~QgsLayerRestorer()
layer->setName( mLayerSettings[layer].name );

// if a SLD file has been loaded for rendering, we restore the previous style
if ( layer->customProperty( "readSLD", false ).toBool() )
const QString sldStyleName { layer->customProperty( "sldStyleName", "" ).toString() };
if ( !sldStyleName.isEmpty() )
{
QString errMsg;
QDomElement root = settings.mQgisStyle.documentElement();
QgsReadWriteContext context = QgsReadWriteContext();
if ( !layer->readStyle( root, errMsg, context ) )
{
QgsMessageLog::logMessage( QStringLiteral( "QGIS Style has not been read from layer restorer for layer %1: %2" ).arg( layer->name(), errMsg ) );
}
layer->styleManager()->removeStyle( sldStyleName );
layer->removeCustomProperty( "sldStyleName" );
}
layer->removeCustomProperty( "readSLD" );

switch ( layer->type() )
{
Expand Down
1 change: 0 additions & 1 deletion src/server/services/wms/qgswmsrestorer.h
Expand Up @@ -57,7 +57,6 @@ class QgsLayerRestorer
QString name;
double mOpacity;
QString mNamedStyle;
QDomDocument mQgisStyle;
QString mFilter;
QgsFeatureIds mSelectedFeatureIds;
};
Expand Down

0 comments on commit 0eee749

Please sign in to comment.