@@ -988,11 +988,11 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
988
988
QDomNodeList legendGroupList = legendElem.elementsByTagName ( " legendgroup" );
989
989
for ( int i = 0 ; i < legendGroupList.size (); ++i )
990
990
{
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 )
993
993
{
994
994
// embedded groups cannot be embedded again
995
- if ( legendElem .attribute ( " embedded" ) == " 1" )
995
+ if ( legendGroupElem .attribute ( " embedded" ) == " 1" )
996
996
{
997
997
mEmbeddedGroups .remove ( groupName );
998
998
return 0 ;
@@ -1017,7 +1017,8 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
1017
1017
group->setFont ( 0 , groupFont );
1018
1018
setCurrentItem ( group );
1019
1019
1020
- QDomNodeList groupChildren = legendElem.childNodes ();
1020
+ bool updateDrawingOrder = legendElem.attribute ( " updateDrawingOrder" ) == " true" ;
1021
+ QDomNodeList groupChildren = legendGroupElem.childNodes ();
1021
1022
for ( int j = 0 ; j < groupChildren.size (); ++j )
1022
1023
{
1023
1024
QDomElement childElem = groupChildren.at ( j ).toElement ();
@@ -1040,6 +1041,14 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
1040
1041
1041
1042
if ( cItem )
1042
1043
{
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
+
1043
1052
group->insertChild ( group->childCount (), cItem );
1044
1053
}
1045
1054
@@ -1474,24 +1483,39 @@ QList<QgsMapCanvasLayer> QgsLegend::canvasLayers()
1474
1483
{
1475
1484
qSort ( groupLayers.begin (), groupLayers.end (), inReverseDrawingOrder );
1476
1485
}
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 )
1478
1489
{
1479
1490
QgsLegendLayer* ll = groupLayers.at ( i );
1491
+ int drawingOrder = ll->drawingOrder ();
1480
1492
if ( !ll || embeddedGroupChildren.contains ( ll ) )
1481
1493
{
1482
1494
continue ;
1483
1495
}
1484
1496
1485
- if ( mUpdateDrawingOrder )
1497
+ if ( drawingOrder == - 1 )
1486
1498
{
1487
- layers. insertMulti ( nEntries , ll->canvasLayer () );
1499
+ orderedLayers. insert ( orderedLayers. size () , ll->canvasLayer () );
1488
1500
}
1489
1501
else
1490
1502
{
1491
- layers. insertMulti ( groupDrawingOrder, ll->canvasLayer () );
1503
+ orderedLayers. insert ( drawingOrder, ll->canvasLayer () );
1492
1504
}
1493
1505
embeddedGroupChildren.insert ( ll );
1494
1506
}
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
+ }
1495
1519
}
1496
1520
}
1497
1521
++it;
0 commit comments