Skip to content

Commit e017442

Browse files
committed
Fix loading / saving of layer order with embedded group
1 parent 60c9fbf commit e017442

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

src/app/legend/qgslegend.cpp

+49-4
Original file line numberDiff line numberDiff line change
@@ -1225,14 +1225,59 @@ QList<QgsMapLayer *> QgsLegend::layers()
12251225

12261226
QList<QgsMapCanvasLayer> QgsLegend::canvasLayers()
12271227
{
1228-
QList<QgsMapCanvasLayer> ls;
1228+
QMap<int, QgsMapCanvasLayer> layers;
1229+
QSet<QgsLegendLayer*> embeddedGroupChildren;
1230+
int nEntries = 0;
12291231

1230-
foreach ( QgsLegendLayer *l, legendLayers() )
1232+
QTreeWidgetItemIterator it( this );
1233+
while ( *it )
12311234
{
1232-
ls << l->canvasLayer();
1235+
QgsLegendLayer* llayer = dynamic_cast<QgsLegendLayer *>( *it );
1236+
QgsLegendGroup* lgroup = dynamic_cast<QgsLegendGroup *>( *it );
1237+
if ( llayer && !embeddedGroupChildren.contains( llayer ) )
1238+
{
1239+
QgsMapCanvasLayer canvasLayer = llayer->canvasLayer();
1240+
if ( mUpdateDrawingOrder )
1241+
{
1242+
layers.insertMulti( nEntries + embeddedGroupChildren.size(), canvasLayer );
1243+
}
1244+
else
1245+
{
1246+
layers.insertMulti( llayer->drawingOrder(), canvasLayer );
1247+
}
1248+
++nEntries;
1249+
}
1250+
else if ( lgroup )
1251+
{
1252+
if ( lgroup->isEmbedded() )
1253+
{
1254+
int groupDrawingOrder = lgroup->drawingOrder() + embeddedGroupChildren.size();
1255+
QList<QgsLegendLayer*> groupLayers = lgroup->legendLayers();
1256+
for ( int i = 0; i < groupLayers.size(); ++i )
1257+
{
1258+
QgsLegendLayer* ll = groupLayers.at( i );
1259+
if ( !ll )
1260+
{
1261+
continue;
1262+
}
1263+
1264+
if ( mUpdateDrawingOrder )
1265+
{
1266+
layers.insertMulti( nEntries + embeddedGroupChildren.size(), ll->canvasLayer() );
1267+
}
1268+
else
1269+
{
1270+
layers.insertMulti( groupDrawingOrder + i, ll->canvasLayer() );
1271+
}
1272+
embeddedGroupChildren.insert( ll );
1273+
++nEntries;
1274+
}
1275+
}
1276+
}
1277+
++it;
12331278
}
12341279

1235-
return ls;
1280+
return layers.values();
12361281
}
12371282

12381283
void QgsLegend::setDrawingOrder( QList<QgsMapLayer *> layers )

0 commit comments

Comments
 (0)