@@ -1196,7 +1196,7 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
1196
1196
1197
1197
QList<QgsLayerTreeModelLegendNode*> filteredLstNew = filterLegendNodes ( lstNew );
1198
1198
1199
- bool isEmbedded = filteredLstNew.count () == 1 && filteredLstNew[0 ]->isEmbeddedInParent ();
1199
+ bool hasOnlyEmbedded = filteredLstNew.count () == 1 && filteredLstNew[0 ]->isEmbeddedInParent ();
1200
1200
1201
1201
Q_FOREACH ( QgsLayerTreeModelLegendNode* n, lstNew )
1202
1202
{
@@ -1215,11 +1215,11 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
1215
1215
1216
1216
int count = data.tree ? data.tree ->children [nullptr ].count () : filteredLstNew.count ();
1217
1217
1218
- if ( ! isEmbedded ) beginInsertRows ( node2index ( nodeL ), 0 , count - 1 );
1218
+ if ( ! hasOnlyEmbedded ) beginInsertRows ( node2index ( nodeL ), 0 , count - 1 );
1219
1219
1220
1220
mLegend [nodeL] = data;
1221
1221
1222
- if ( ! isEmbedded ) endInsertRows ();
1222
+ if ( ! hasOnlyEmbedded ) endInsertRows ();
1223
1223
1224
1224
if ( hasStyleOverride )
1225
1225
ml->styleManager ()->restoreOverrideStyle ();
@@ -1316,17 +1316,19 @@ int QgsLayerTreeModel::legendNodeRowCount( QgsLayerTreeModelLegendNode* node ) c
1316
1316
1317
1317
int QgsLayerTreeModel::legendRootRowCount ( QgsLayerTreeLayer* nL ) const
1318
1318
{
1319
- if ( legendEmbeddedInParent ( nL ) )
1320
- return 0 ;
1321
-
1322
1319
if ( !mLegend .contains ( nL ) )
1323
1320
return 0 ;
1324
1321
1325
1322
const LayerLegendData& data = mLegend [nL];
1326
1323
if ( data.tree )
1327
1324
return data.tree ->children [nullptr ].count ();
1328
1325
1329
- return data.activeNodes .count ();
1326
+ int count = data.activeNodes .count ();
1327
+
1328
+ if ( legendEmbeddedInParent ( nL ) )
1329
+ count--; // one item less -- it is embedded in parent
1330
+
1331
+ return count;
1330
1332
}
1331
1333
1332
1334
@@ -1390,14 +1392,29 @@ Qt::ItemFlags QgsLayerTreeModel::legendNodeFlags( QgsLayerTreeModelLegendNode* n
1390
1392
1391
1393
bool QgsLayerTreeModel::legendEmbeddedInParent ( QgsLayerTreeLayer* nodeLayer ) const
1392
1394
{
1395
+ return legendNodeEmbeddedInParent ( nodeLayer );
1396
+ }
1397
+
1398
+ QgsLayerTreeModelLegendNode* QgsLayerTreeModel::legendNodeEmbeddedInParent ( QgsLayerTreeLayer* nodeLayer ) const
1399
+ {
1400
+ // legend node embedded in parent does not have to be the first one...
1401
+ // there could be extra legend nodes generated for embedded widgets
1393
1402
const LayerLegendData& data = mLegend [nodeLayer];
1394
- return data.activeNodes .count () == 1 && data.activeNodes [0 ]->isEmbeddedInParent ();
1403
+ Q_FOREACH ( QgsLayerTreeModelLegendNode* legendNode, data.activeNodes )
1404
+ {
1405
+ if ( legendNode->isEmbeddedInParent () )
1406
+ return legendNode;
1407
+ }
1408
+ return nullptr ;
1395
1409
}
1396
1410
1397
1411
1398
1412
QIcon QgsLayerTreeModel::legendIconEmbeddedInParent ( QgsLayerTreeLayer* nodeLayer ) const
1399
1413
{
1400
- return QIcon ( qvariant_cast<QPixmap>( mLegend [nodeLayer].activeNodes [0 ]->data ( Qt::DecorationRole ) ) );
1414
+ QgsLayerTreeModelLegendNode* legendNode = legendNodeEmbeddedInParent ( nodeLayer );
1415
+ if ( !legendNode )
1416
+ return QIcon ();
1417
+ return QIcon ( qvariant_cast<QPixmap>( legendNode->data ( Qt::DecorationRole ) ) );
1401
1418
}
1402
1419
1403
1420
0 commit comments