mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
Implement addDrawingOrder for wms server under consideration of embedded groups
This commit is contained in:
parent
e017442382
commit
de2c671591
@ -2245,6 +2245,65 @@ QgsRectangle QgsProjectParser::layerBoundingBoxInProjectCRS( const QDomElement&
|
|||||||
return BBox;
|
return BBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList, int& nEmbeddedGroupLayers,
|
||||||
|
bool embedded ) const
|
||||||
|
{
|
||||||
|
if ( elem.isNull() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( elem.tagName() == "legendlayer" )
|
||||||
|
{
|
||||||
|
if ( useDrawingOrder )
|
||||||
|
{
|
||||||
|
int order = elem.attribute( "drawingOrder", "-1" ).toInt();
|
||||||
|
orderedLayerList.insertMulti( order + nEmbeddedGroupLayers, elem.attribute( "name" ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
orderedLayerList.insertMulti( orderedLayerList.size(), elem.attribute( "name" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( embedded )
|
||||||
|
{
|
||||||
|
++nEmbeddedGroupLayers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( elem.tagName() == "legendgroup" )
|
||||||
|
{
|
||||||
|
//embedded vs. not embedded
|
||||||
|
if ( elem.attribute( "embedded" ) == "1" && !embedded )
|
||||||
|
{
|
||||||
|
//load layers / elements from project file
|
||||||
|
QString project = convertToAbsolutePath( elem.attribute( "project" ) );
|
||||||
|
QString embeddedGroupName = elem.attribute( "name" );
|
||||||
|
QgsProjectParser* p = dynamic_cast<QgsProjectParser*>( QgsConfigCache::instance()->searchConfiguration( project ) );
|
||||||
|
if ( p )
|
||||||
|
{
|
||||||
|
QList<QDomElement> embeddedGroupElements = p->mLegendGroupElements;
|
||||||
|
foreach ( const QDomElement &groupElem, embeddedGroupElements )
|
||||||
|
{
|
||||||
|
if ( groupElem.attribute( "name" ) == embeddedGroupName )
|
||||||
|
{
|
||||||
|
addDrawingOrder( groupElem, false, orderedLayerList, nEmbeddedGroupLayers, true );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QDomNodeList childList = elem.childNodes();
|
||||||
|
QDomElement childElem;
|
||||||
|
for ( int i = 0; i < childList.size(); ++i )
|
||||||
|
{
|
||||||
|
addDrawingOrder( childList.at( i ).toElement(), useDrawingOrder, orderedLayerList, nEmbeddedGroupLayers, false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QgsProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const
|
void QgsProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const
|
||||||
{
|
{
|
||||||
if ( !mXMLDoc )
|
if ( !mXMLDoc )
|
||||||
@ -2259,40 +2318,24 @@ void QgsProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& d
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList layerList;
|
|
||||||
|
|
||||||
bool useDrawingOrder = ( legendElement.attribute( "updateDrawingOrder" ) == "false" );
|
bool useDrawingOrder = ( legendElement.attribute( "updateDrawingOrder" ) == "false" );
|
||||||
QDomNodeList layerNodeList = legendElement.elementsByTagName( "legendlayer" );
|
int nEmbeddedGroupLayers = 0;
|
||||||
if ( !useDrawingOrder ) //bottom to top
|
QMap<int, QString> orderedLayerNames;
|
||||||
{
|
|
||||||
for ( int i = 0; i < layerNodeList.size(); ++i )
|
|
||||||
{
|
|
||||||
layerList.prepend( layerNodeList.at( i ).toElement().attribute( "name" ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QMap<int, QString> orderedLayerNames;
|
|
||||||
for ( int i = 0; i < layerNodeList.size(); ++i )
|
|
||||||
{
|
|
||||||
QString layerName = layerNodeList.at( i ).toElement().attribute( "name" );
|
|
||||||
int order = layerNodeList.at( i ).toElement().attribute( "drawingOrder" ).toInt();
|
|
||||||
if ( order == -1 )
|
|
||||||
{
|
|
||||||
layerList.prepend( layerName );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
orderedLayerNames.insert( order, layerName );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QMap<int, QString>::const_iterator orderIt = orderedLayerNames.constBegin();
|
QDomNodeList legendChildren = legendElement.childNodes();
|
||||||
for ( ; orderIt != orderedLayerNames.constEnd(); ++orderIt )
|
QDomElement childElem;
|
||||||
{
|
for ( int i = 0; i < legendChildren.size(); ++i )
|
||||||
layerList.prepend( *orderIt );
|
{
|
||||||
}
|
addDrawingOrder( legendChildren.at( i ).toElement(), useDrawingOrder, orderedLayerNames, nEmbeddedGroupLayers, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList layerList;
|
||||||
|
QMap<int, QString>::const_iterator nameIt = orderedLayerNames.constBegin();
|
||||||
|
for ( ; nameIt != orderedLayerNames.constEnd(); ++nameIt )
|
||||||
|
{
|
||||||
|
layerList.prepend( nameIt.value() );
|
||||||
|
}
|
||||||
|
|
||||||
QDomElement layerDrawingOrderElem = doc.createElement( "LayerDrawingOrder" );
|
QDomElement layerDrawingOrderElem = doc.createElement( "LayerDrawingOrder" );
|
||||||
QDomText drawingOrderText = doc.createTextNode( layerList.join( "," ) );
|
QDomText drawingOrderText = doc.createTextNode( layerList.join( "," ) );
|
||||||
layerDrawingOrderElem.appendChild( drawingOrderText );
|
layerDrawingOrderElem.appendChild( drawingOrderText );
|
||||||
|
@ -207,6 +207,9 @@ class QgsProjectParser: public QgsConfigParser
|
|||||||
void setMaxWidthHeight();
|
void setMaxWidthHeight();
|
||||||
/**Reads layer drawing order from the legend section of the project file and appends it to the parent elemen (usually the <Capability> element)*/
|
/**Reads layer drawing order from the legend section of the project file and appends it to the parent elemen (usually the <Capability> element)*/
|
||||||
void addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const;
|
void addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const;
|
||||||
|
/**Adds drawing order info from layer element or group element (recursive)*/
|
||||||
|
void addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList, int& nEmbeddedGroupLayers,
|
||||||
|
bool embedded = false ) const;
|
||||||
/**Returns project layers by id*/
|
/**Returns project layers by id*/
|
||||||
void projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap ) const;
|
void projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap ) const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user