@@ -1225,14 +1225,59 @@ QList<QgsMapLayer *> QgsLegend::layers()
1225
1225
1226
1226
QList<QgsMapCanvasLayer> QgsLegend::canvasLayers ()
1227
1227
{
1228
- QList<QgsMapCanvasLayer> ls;
1228
+ QMap<int , QgsMapCanvasLayer> layers;
1229
+ QSet<QgsLegendLayer*> embeddedGroupChildren;
1230
+ int nEntries = 0 ;
1229
1231
1230
- foreach ( QgsLegendLayer *l, legendLayers () )
1232
+ QTreeWidgetItemIterator it ( this );
1233
+ while ( *it )
1231
1234
{
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;
1233
1278
}
1234
1279
1235
- return ls ;
1280
+ return layers. values () ;
1236
1281
}
1237
1282
1238
1283
void QgsLegend::setDrawingOrder ( QList<QgsMapLayer *> layers )
0 commit comments