Skip to content

Commit

Permalink
More fixes to support embedded groups
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Mar 4, 2014
1 parent 8ed4114 commit 9774abd
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 10 deletions.
40 changes: 32 additions & 8 deletions src/app/legend/qgslegend.cpp
Expand Up @@ -988,11 +988,11 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
QDomNodeList legendGroupList = legendElem.elementsByTagName( "legendgroup" ); QDomNodeList legendGroupList = legendElem.elementsByTagName( "legendgroup" );
for ( int i = 0; i < legendGroupList.size(); ++i ) for ( int i = 0; i < legendGroupList.size(); ++i )
{ {
QDomElement legendElem = legendGroupList.at( i ).toElement(); QDomElement legendGroupElem = legendGroupList.at( i ).toElement();
if ( legendElem.attribute( "name" ) == groupName ) if ( legendGroupElem.attribute( "name" ) == groupName )
{ {
//embedded groups cannot be embedded again //embedded groups cannot be embedded again
if ( legendElem.attribute( "embedded" ) == "1" ) if ( legendGroupElem.attribute( "embedded" ) == "1" )
{ {
mEmbeddedGroups.remove( groupName ); mEmbeddedGroups.remove( groupName );
return 0; return 0;
Expand All @@ -1017,7 +1017,8 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
group->setFont( 0, groupFont ); group->setFont( 0, groupFont );
setCurrentItem( group ); setCurrentItem( group );


QDomNodeList groupChildren = legendElem.childNodes(); bool updateDrawingOrder = legendElem.attribute( "updateDrawingOrder" ) == "true";
QDomNodeList groupChildren = legendGroupElem.childNodes();
for ( int j = 0; j < groupChildren.size(); ++j ) for ( int j = 0; j < groupChildren.size(); ++j )
{ {
QDomElement childElem = groupChildren.at( j ).toElement(); QDomElement childElem = groupChildren.at( j ).toElement();
Expand All @@ -1040,6 +1041,14 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt


if ( cItem ) if ( cItem )
{ {
//add drawing order
int drawingOrder = ( updateDrawingOrder ? -1 : childElem.attribute( "drawingOrder", "-1" ).toInt() );
QgsLegendLayer* llI = dynamic_cast<QgsLegendLayer*>( cItem );
if ( llI )
{
llI->setDrawingOrder( drawingOrder );
}

group->insertChild( group->childCount(), cItem ); group->insertChild( group->childCount(), cItem );
} }


Expand Down Expand Up @@ -1474,24 +1483,39 @@ QList<QgsMapCanvasLayer> QgsLegend::canvasLayers()
{ {
qSort( groupLayers.begin(), groupLayers.end(), inReverseDrawingOrder ); qSort( groupLayers.begin(), groupLayers.end(), inReverseDrawingOrder );
} }
for ( int i = groupLayers.size() - 1; i >= 0; --i )
QMap<int, QgsMapCanvasLayer > orderedLayers;
for ( int i = 0; i < groupLayers.size(); ++i )
{ {
QgsLegendLayer* ll = groupLayers.at( i ); QgsLegendLayer* ll = groupLayers.at( i );
int drawingOrder = ll->drawingOrder();
if ( !ll || embeddedGroupChildren.contains( ll ) ) if ( !ll || embeddedGroupChildren.contains( ll ) )
{ {
continue; continue;
} }


if ( mUpdateDrawingOrder ) if ( drawingOrder == -1 )
{ {
layers.insertMulti( nEntries, ll->canvasLayer() ); orderedLayers.insert( orderedLayers.size(), ll->canvasLayer() );
} }
else else
{ {
layers.insertMulti( groupDrawingOrder, ll->canvasLayer() ); orderedLayers.insert( drawingOrder, ll->canvasLayer() );
} }
embeddedGroupChildren.insert( ll ); embeddedGroupChildren.insert( ll );
} }
QMap<int, QgsMapCanvasLayer >::iterator orderedLayersIt = orderedLayers.begin();
for ( ; orderedLayersIt != orderedLayers.end(); ++orderedLayersIt )
{
if ( mUpdateDrawingOrder )
{
layers.insert( layers.size(), orderedLayersIt.value() );
}
else
{
layers.insertMulti( groupDrawingOrder, orderedLayersIt.value() );
}
}
} }
} }
++it; ++it;
Expand Down
4 changes: 4 additions & 0 deletions src/mapserver/qgis_map_serv.cpp
Expand Up @@ -177,6 +177,10 @@ int main( int argc, char * argv[] )


//Default prefix path may be altered by environment variable //Default prefix path may be altered by environment variable
QgsApplication::init(); QgsApplication::init();
#if !defined(Q_OS_WIN)
// init QGIS's paths - true means that all path will be inited from prefix
QgsApplication::setPrefixPath( CMAKE_INSTALL_PREFIX, TRUE );
#endif


#if defined(MAPSERVER_SKIP_ECW) #if defined(MAPSERVER_SKIP_ECW)
QgsDebugMsg( "Skipping GDAL ECW drivers in server." ); QgsDebugMsg( "Skipping GDAL ECW drivers in server." );
Expand Down
13 changes: 11 additions & 2 deletions src/mapserver/qgsprojectparser.cpp
Expand Up @@ -1851,6 +1851,7 @@ void QgsProjectParser::addLayersFromGroup( const QDomElement& legendGroupElem, Q
} }
else //normal group else //normal group
{ {
bool updateDrawingOrder = ( legendGroupElem.parentNode().toElement().attribute( "updateDrawingOrder" ) == "true" );
QMap< int, QDomElement > layerOrderList; QMap< int, QDomElement > layerOrderList;
QDomNodeList groupElemChildren = legendGroupElem.childNodes(); QDomNodeList groupElemChildren = legendGroupElem.childNodes();
for ( int i = 0; i < groupElemChildren.size(); ++i ) for ( int i = 0; i < groupElemChildren.size(); ++i )
Expand All @@ -1862,7 +1863,7 @@ void QgsProjectParser::addLayersFromGroup( const QDomElement& legendGroupElem, Q
} }
else if ( elem.tagName() == "legendlayer" ) else if ( elem.tagName() == "legendlayer" )
{ {
int drawingOrder = elem.attribute( "drawingOrder", "-1" ).toInt(); int drawingOrder = updateDrawingOrder ? -1 : elem.attribute( "drawingOrder", "-1" ).toInt();
if ( drawingOrder == -1 ) if ( drawingOrder == -1 )
{ {
addLayerFromLegendLayer( elem, layerList, useCache ); addLayerFromLegendLayer( elem, layerList, useCache );
Expand Down Expand Up @@ -4123,6 +4124,14 @@ void QgsProjectParser::addDrawingOrderEmbeddedGroup( const QDomElement& groupEle
return; return;
} }


//legend or custom drawing order in embedded project?
bool updateDrawingOrder = true;
QDomNodeList legendNode = doc->elementsByTagName( "legend" );
if ( legendNode.size() > 0 )
{
updateDrawingOrder = ( legendNode.at( 0 ).toElement().attribute( "updateDrawingOrder" ) == "true" );
}

QDomNodeList layerNodeList = embeddedGroupElem.elementsByTagName( "legendlayer" ); QDomNodeList layerNodeList = embeddedGroupElem.elementsByTagName( "legendlayer" );
QDomElement layerElem; QDomElement layerElem;
QMap<int, QString > layerNames; QMap<int, QString > layerNames;
Expand All @@ -4132,7 +4141,7 @@ void QgsProjectParser::addDrawingOrderEmbeddedGroup( const QDomElement& groupEle
layerElem = layerNodeList.at( i ).toElement(); layerElem = layerNodeList.at( i ).toElement();
layerName = layerElem.attribute( "name" ); layerName = layerElem.attribute( "name" );


int layerDrawingOrder = layerElem.attribute( "drawingOrder", "-1" ).toInt(); int layerDrawingOrder = updateDrawingOrder ? -1 : layerElem.attribute( "drawingOrder", "-1" ).toInt();
if ( layerDrawingOrder == -1 ) if ( layerDrawingOrder == -1 )
{ {
layerNames.insert( layerNames.size(), layerName ); layerNames.insert( layerNames.size(), layerName );
Expand Down

0 comments on commit 9774abd

Please sign in to comment.