Skip to content

Commit 9774abd

Browse files
committed
More fixes to support embedded groups
1 parent 8ed4114 commit 9774abd

File tree

3 files changed

+47
-10
lines changed

3 files changed

+47
-10
lines changed

src/app/legend/qgslegend.cpp

+32-8
Original file line numberDiff line numberDiff line change
@@ -988,11 +988,11 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
988988
QDomNodeList legendGroupList = legendElem.elementsByTagName( "legendgroup" );
989989
for ( int i = 0; i < legendGroupList.size(); ++i )
990990
{
991-
QDomElement legendElem = legendGroupList.at( i ).toElement();
992-
if ( legendElem.attribute( "name" ) == groupName )
991+
QDomElement legendGroupElem = legendGroupList.at( i ).toElement();
992+
if ( legendGroupElem.attribute( "name" ) == groupName )
993993
{
994994
//embedded groups cannot be embedded again
995-
if ( legendElem.attribute( "embedded" ) == "1" )
995+
if ( legendGroupElem.attribute( "embedded" ) == "1" )
996996
{
997997
mEmbeddedGroups.remove( groupName );
998998
return 0;
@@ -1017,7 +1017,8 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
10171017
group->setFont( 0, groupFont );
10181018
setCurrentItem( group );
10191019

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

10411042
if ( cItem )
10421043
{
1044+
//add drawing order
1045+
int drawingOrder = ( updateDrawingOrder ? -1 : childElem.attribute( "drawingOrder", "-1" ).toInt() );
1046+
QgsLegendLayer* llI = dynamic_cast<QgsLegendLayer*>( cItem );
1047+
if ( llI )
1048+
{
1049+
llI->setDrawingOrder( drawingOrder );
1050+
}
1051+
10431052
group->insertChild( group->childCount(), cItem );
10441053
}
10451054

@@ -1474,24 +1483,39 @@ QList<QgsMapCanvasLayer> QgsLegend::canvasLayers()
14741483
{
14751484
qSort( groupLayers.begin(), groupLayers.end(), inReverseDrawingOrder );
14761485
}
1477-
for ( int i = groupLayers.size() - 1; i >= 0; --i )
1486+
1487+
QMap<int, QgsMapCanvasLayer > orderedLayers;
1488+
for ( int i = 0; i < groupLayers.size(); ++i )
14781489
{
14791490
QgsLegendLayer* ll = groupLayers.at( i );
1491+
int drawingOrder = ll->drawingOrder();
14801492
if ( !ll || embeddedGroupChildren.contains( ll ) )
14811493
{
14821494
continue;
14831495
}
14841496

1485-
if ( mUpdateDrawingOrder )
1497+
if ( drawingOrder == -1 )
14861498
{
1487-
layers.insertMulti( nEntries, ll->canvasLayer() );
1499+
orderedLayers.insert( orderedLayers.size(), ll->canvasLayer() );
14881500
}
14891501
else
14901502
{
1491-
layers.insertMulti( groupDrawingOrder, ll->canvasLayer() );
1503+
orderedLayers.insert( drawingOrder, ll->canvasLayer() );
14921504
}
14931505
embeddedGroupChildren.insert( ll );
14941506
}
1507+
QMap<int, QgsMapCanvasLayer >::iterator orderedLayersIt = orderedLayers.begin();
1508+
for ( ; orderedLayersIt != orderedLayers.end(); ++orderedLayersIt )
1509+
{
1510+
if ( mUpdateDrawingOrder )
1511+
{
1512+
layers.insert( layers.size(), orderedLayersIt.value() );
1513+
}
1514+
else
1515+
{
1516+
layers.insertMulti( groupDrawingOrder, orderedLayersIt.value() );
1517+
}
1518+
}
14951519
}
14961520
}
14971521
++it;

src/mapserver/qgis_map_serv.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ int main( int argc, char * argv[] )
177177

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

181185
#if defined(MAPSERVER_SKIP_ECW)
182186
QgsDebugMsg( "Skipping GDAL ECW drivers in server." );

src/mapserver/qgsprojectparser.cpp

+11-2
Original file line numberDiff line numberDiff line change
@@ -1851,6 +1851,7 @@ void QgsProjectParser::addLayersFromGroup( const QDomElement& legendGroupElem, Q
18511851
}
18521852
else //normal group
18531853
{
1854+
bool updateDrawingOrder = ( legendGroupElem.parentNode().toElement().attribute( "updateDrawingOrder" ) == "true" );
18541855
QMap< int, QDomElement > layerOrderList;
18551856
QDomNodeList groupElemChildren = legendGroupElem.childNodes();
18561857
for ( int i = 0; i < groupElemChildren.size(); ++i )
@@ -1862,7 +1863,7 @@ void QgsProjectParser::addLayersFromGroup( const QDomElement& legendGroupElem, Q
18621863
}
18631864
else if ( elem.tagName() == "legendlayer" )
18641865
{
1865-
int drawingOrder = elem.attribute( "drawingOrder", "-1" ).toInt();
1866+
int drawingOrder = updateDrawingOrder ? -1 : elem.attribute( "drawingOrder", "-1" ).toInt();
18661867
if ( drawingOrder == -1 )
18671868
{
18681869
addLayerFromLegendLayer( elem, layerList, useCache );
@@ -4123,6 +4124,14 @@ void QgsProjectParser::addDrawingOrderEmbeddedGroup( const QDomElement& groupEle
41234124
return;
41244125
}
41254126

4127+
//legend or custom drawing order in embedded project?
4128+
bool updateDrawingOrder = true;
4129+
QDomNodeList legendNode = doc->elementsByTagName( "legend" );
4130+
if ( legendNode.size() > 0 )
4131+
{
4132+
updateDrawingOrder = ( legendNode.at( 0 ).toElement().attribute( "updateDrawingOrder" ) == "true" );
4133+
}
4134+
41264135
QDomNodeList layerNodeList = embeddedGroupElem.elementsByTagName( "legendlayer" );
41274136
QDomElement layerElem;
41284137
QMap<int, QString > layerNames;
@@ -4132,7 +4141,7 @@ void QgsProjectParser::addDrawingOrderEmbeddedGroup( const QDomElement& groupEle
41324141
layerElem = layerNodeList.at( i ).toElement();
41334142
layerName = layerElem.attribute( "name" );
41344143

4135-
int layerDrawingOrder = layerElem.attribute( "drawingOrder", "-1" ).toInt();
4144+
int layerDrawingOrder = updateDrawingOrder ? -1 : layerElem.attribute( "drawingOrder", "-1" ).toInt();
41364145
if ( layerDrawingOrder == -1 )
41374146
{
41384147
layerNames.insert( layerNames.size(), layerName );

0 commit comments

Comments
 (0)