Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[vectortiles] Respect categories flags when saving/loading layer styles
  • Loading branch information
nyalldawson committed Sep 7, 2020
1 parent 42e8903 commit d75ec1a
Showing 1 changed file with 36 additions and 26 deletions.
62 changes: 36 additions & 26 deletions src/core/vectortile/qgsvectortilelayer.cpp
Expand Up @@ -153,42 +153,49 @@ bool QgsVectorTileLayer::readSymbology( const QDomNode &node, QString &errorMess

readCommonStyle( elem, context, categories );

QDomElement elemRenderer = elem.firstChildElement( QStringLiteral( "renderer" ) );
const QDomElement elemRenderer = elem.firstChildElement( QStringLiteral( "renderer" ) );
if ( elemRenderer.isNull() )
{
errorMessage = tr( "Missing <renderer> tag" );
return false;
}
QString rendererType = elemRenderer.attribute( QStringLiteral( "type" ) );
QgsVectorTileRenderer *r = nullptr;
if ( rendererType == QStringLiteral( "basic" ) )
r = new QgsVectorTileBasicRenderer;
else
{
errorMessage = tr( "Unknown renderer type: " ) + rendererType;
return false;
}

r->readXml( elemRenderer, context );
setRenderer( r );
const QString rendererType = elemRenderer.attribute( QStringLiteral( "type" ) );

setLabeling( nullptr );
QDomElement elemLabeling = elem.firstChildElement( QStringLiteral( "labeling" ) );
if ( !elemLabeling.isNull() )
if ( categories.testFlag( Symbology ) )
{
QString labelingType = elemLabeling.attribute( QStringLiteral( "type" ) );
QgsVectorTileLabeling *labeling = nullptr;
if ( labelingType == QStringLiteral( "basic" ) )
labeling = new QgsVectorTileBasicLabeling;
QgsVectorTileRenderer *r = nullptr;
if ( rendererType == QStringLiteral( "basic" ) )
r = new QgsVectorTileBasicRenderer;
else
{
errorMessage = tr( "Unknown labeling type: " ) + rendererType;
errorMessage = tr( "Unknown renderer type: " ) + rendererType;
return false;
}

if ( labeling )
r->readXml( elemRenderer, context );
setRenderer( r );
}

if ( categories.testFlag( Labeling ) )
{
setLabeling( nullptr );
const QDomElement elemLabeling = elem.firstChildElement( QStringLiteral( "labeling" ) );
if ( !elemLabeling.isNull() )
{
labeling->readXml( elemLabeling, context );
setLabeling( labeling );
const QString labelingType = elemLabeling.attribute( QStringLiteral( "type" ) );
QgsVectorTileLabeling *labeling = nullptr;
if ( labelingType == QStringLiteral( "basic" ) )
labeling = new QgsVectorTileBasicLabeling;
else
{
errorMessage = tr( "Unknown labeling type: " ) + rendererType;
}

if ( labeling )
{
labeling->readXml( elemLabeling, context );
setLabeling( labeling );
}
}
}

Expand All @@ -206,11 +213,14 @@ bool QgsVectorTileLayer::writeSymbology( QDomNode &node, QDomDocument &doc, QStr
{
QDomElement elemRenderer = doc.createElement( QStringLiteral( "renderer" ) );
elemRenderer.setAttribute( QStringLiteral( "type" ), mRenderer->type() );
mRenderer->writeXml( elemRenderer, context );
if ( categories.testFlag( Symbology ) )
{
mRenderer->writeXml( elemRenderer, context );
}
elem.appendChild( elemRenderer );
}

if ( mLabeling )
if ( mLabeling && categories.testFlag( Labeling ) )
{
QDomElement elemLabeling = doc.createElement( QStringLiteral( "labeling" ) );
elemLabeling.setAttribute( QStringLiteral( "type" ), mLabeling->type() );
Expand Down

0 comments on commit d75ec1a

Please sign in to comment.