@@ -186,6 +186,7 @@ int QgsLegend::addGroup( QString name, bool expand, int groupIndex )
186
186
void QgsLegend::removeAll ()
187
187
{
188
188
clear ();
189
+ mEmbeddedGroups .clear ();
189
190
mPixmapWidthValues .clear ();
190
191
mPixmapHeightValues .clear ();
191
192
updateMapCanvasLayerSet ();
@@ -297,7 +298,7 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
297
298
{
298
299
// prevent to drag out content under groups that are embedded from other
299
300
// project files.
300
- if ( parentGroupEmbedded ( item ) )
301
+ if ( parentGroupEmbedded ( item ) )
301
302
{
302
303
continue ;
303
304
}
@@ -372,7 +373,7 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
372
373
mDropTarget = layer;
373
374
374
375
// prevent inserting content into embedded groups
375
- if ( !parentGroupEmbedded ( litem ) )
376
+ if ( !parentGroupEmbedded ( litem ) )
376
377
{
377
378
if ( e->y () < ( y0 + y1 ) / 2 )
378
379
{
@@ -388,14 +389,14 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
388
389
}
389
390
}
390
391
}
391
- else if ( group )
392
- {
392
+ else if ( group )
393
+ {
393
394
if ( yCoordAboveCenter ( litem, e->y () ) ) // over center of item
394
395
{
395
396
QgsDebugMsg ( " insert before group" );
396
397
397
398
// prevent inserting content into embedded groups
398
- if ( !parentGroupEmbedded ( item ) )
399
+ if ( !parentGroupEmbedded ( item ) )
399
400
{
400
401
line_y = visualItemRect ( item ).top () + 1 ;
401
402
mDropTarget = item;
@@ -404,7 +405,7 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
404
405
}
405
406
else // below center of item
406
407
{
407
- if ( !groupEmbedded ( item ) )
408
+ if ( !groupEmbedded ( item ) )
408
409
{
409
410
QgsDebugMsg ( " insert into group" );
410
411
@@ -601,7 +602,7 @@ void QgsLegend::handleRightClickEvent( QTreeWidgetItem* item, const QPoint& posi
601
602
tr ( " &Set group CRS" ), this , SLOT ( legendGroupSetCRS () ) );
602
603
}
603
604
604
- if ( ( li->type () == QgsLegendItem::LEGEND_LAYER || li->type () == QgsLegendItem::LEGEND_GROUP ) && !groupEmbedded ( li ) && !parentGroupEmbedded ( li ) )
605
+ if (( li->type () == QgsLegendItem::LEGEND_LAYER || li->type () == QgsLegendItem::LEGEND_GROUP ) && !groupEmbedded ( li ) && !parentGroupEmbedded ( li ) )
605
606
{
606
607
theMenu.addAction ( tr ( " Re&name" ), this , SLOT ( openEditor () ) );
607
608
}
@@ -635,19 +636,19 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
635
636
636
637
// open project file, get layer ids in group, add the layers
637
638
QFile projectFile ( projectFilePath );
638
- if ( !projectFile.open ( QIODevice::ReadOnly ) )
639
+ if ( !projectFile.open ( QIODevice::ReadOnly ) )
639
640
{
640
641
return 0 ;
641
642
}
642
643
643
644
QDomDocument projectDocument;
644
- if ( !projectDocument.setContent ( &projectFile ) )
645
+ if ( !projectDocument.setContent ( &projectFile ) )
645
646
{
646
647
return 0 ;
647
648
}
648
649
649
- QDomElement legendElem = projectDocument.documentElement ().firstChildElement (" legend" );
650
- if ( legendElem.isNull () )
650
+ QDomElement legendElem = projectDocument.documentElement ().firstChildElement ( " legend" );
651
+ if ( legendElem.isNull () )
651
652
{
652
653
return 0 ;
653
654
}
@@ -656,21 +657,21 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
656
657
QList< QPair< QgsVectorLayer*, QDomElement > > vectorLayerList;
657
658
QSettings settings;
658
659
659
- QDomNodeList legendGroupList = legendElem.elementsByTagName (" legendgroup" );
660
- for ( int i = 0 ; i < legendGroupList.size (); ++i )
660
+ QDomNodeList legendGroupList = legendElem.elementsByTagName ( " legendgroup" );
661
+ for ( int i = 0 ; i < legendGroupList.size (); ++i )
661
662
{
662
- QDomElement legendElem = legendGroupList.at (i ).toElement ();
663
- if ( legendElem.attribute (" name" ) == groupName )
663
+ QDomElement legendElem = legendGroupList.at ( i ).toElement ();
664
+ if ( legendElem.attribute ( " name" ) == groupName )
664
665
{
665
666
// embedded groups cannot be embedded again
666
- if ( legendElem.attribute (" embedded" ) == " 1" )
667
+ if ( legendElem.attribute ( " embedded" ) == " 1" )
667
668
{
668
669
mEmbeddedGroups .remove ( groupName );
669
670
return 0 ;
670
671
}
671
672
672
673
QgsLegendGroup* group = 0 ;
673
- if ( parent )
674
+ if ( parent )
674
675
{
675
676
group = new QgsLegendGroup ( parent, groupName );
676
677
}
@@ -685,22 +686,24 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
685
686
setCurrentItem ( group );
686
687
687
688
QDomNodeList groupChildren = legendElem.childNodes ();
688
- for ( int j = 0 ; j < groupChildren.size (); ++j )
689
+ for ( int j = 0 ; j < groupChildren.size (); ++j )
689
690
{
690
691
QDomElement childElem = groupChildren.at ( j ).toElement ();
691
692
QString tagName = childElem.tagName ();
692
- if ( tagName == " legendlayer" )
693
+ if ( tagName == " legendlayer" )
693
694
{
694
- QString layerId = childElem.firstChildElement (" filegroup" ).firstChildElement (" legendlayerfile" ).attribute (" layerid" );
695
+ QString layerId = childElem.firstChildElement ( " filegroup" ).firstChildElement ( " legendlayerfile" ).attribute ( " layerid" );
695
696
QgsProject::instance ()->createEmbeddedLayer ( layerId, projectFilePath, brokenNodes, vectorLayerList, false );
696
- if ( currentItem () && currentItem () != group )
697
+ QTreeWidgetItem* cItem = currentItem ();
698
+ if ( cItem && cItem != group )
697
699
{
698
- insertItem ( currentItem (), group );
700
+ removeItem ( cItem );
701
+ group->insertChild ( group->childCount (), cItem );
699
702
}
700
703
}
701
- else if ( tagName == " legendgroup" )
704
+ else if ( tagName == " legendgroup" )
702
705
{
703
- addEmbeddedGroup ( childElem.attribute (" name" ), projectFilePath, group );
706
+ addEmbeddedGroup ( childElem.attribute ( " name" ), projectFilePath, group );
704
707
}
705
708
}
706
709
checkLayerOrderUpdate ();
@@ -735,7 +738,7 @@ void QgsLegend::addLayer( QgsMapLayer * layer )
735
738
}
736
739
737
740
QgsLegendLayer* llayer = new QgsLegendLayer ( layer );
738
- if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
741
+ if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
739
742
{
740
743
QFont itemFont;
741
744
itemFont.setItalic ( true );
@@ -1032,10 +1035,10 @@ bool QgsLegend::writeXML( QList<QTreeWidgetItem *> items, QDomNode &node, QDomDo
1032
1035
}
1033
1036
1034
1037
QHash< QString, QString >::const_iterator embedIt = mEmbeddedGroups .find ( item->text ( 0 ) );
1035
- if ( embedIt != mEmbeddedGroups .constEnd () )
1038
+ if ( embedIt != mEmbeddedGroups .constEnd () )
1036
1039
{
1037
- legendgroupnode.setAttribute (" embedded" , 1 );
1038
- legendgroupnode.setAttribute (" project" , embedIt.value () );
1040
+ legendgroupnode.setAttribute ( " embedded" , 1 );
1041
+ legendgroupnode.setAttribute ( " project" , embedIt.value () );
1039
1042
}
1040
1043
else
1041
1044
{
@@ -1119,7 +1122,7 @@ bool QgsLegend::writeXML( QList<QTreeWidgetItem *> items, QDomNode &node, QDomDo
1119
1122
layerfilegroupnode.appendChild ( legendlayerfilenode );
1120
1123
1121
1124
// embedded layer?
1122
- if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
1125
+ if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
1123
1126
{
1124
1127
legendlayerfilenode.setAttribute ( " embedded" , " 1" );
1125
1128
}
@@ -1152,7 +1155,7 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
1152
1155
if ( childelem.tagName () == " legendgroup" )
1153
1156
{
1154
1157
QgsLegendGroup* theGroup = 0 ;
1155
- if ( childelem.attribute (" embedded" ) == " 1" )
1158
+ if ( childelem.attribute ( " embedded" ) == " 1" )
1156
1159
{
1157
1160
theGroup = addEmbeddedGroup ( name, childelem.attribute ( " project" ) );
1158
1161
}
@@ -1164,7 +1167,7 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
1164
1167
theGroup = new QgsLegendGroup ( this , name );
1165
1168
}
1166
1169
1167
- if ( !theGroup )
1170
+ if ( !theGroup )
1168
1171
{
1169
1172
continue ;
1170
1173
}
@@ -1264,6 +1267,7 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
1264
1267
bool QgsLegend::readXML ( QDomNode& legendnode )
1265
1268
{
1266
1269
clear (); // remove all items first
1270
+ mEmbeddedGroups .clear ();
1267
1271
return readXML ( 0 , legendnode );
1268
1272
}
1269
1273
@@ -1851,7 +1855,7 @@ void QgsLegend::openEditor()
1851
1855
QTreeWidgetItem* theItem = currentItem ();
1852
1856
if ( theItem )
1853
1857
{
1854
- if ( !groupEmbedded ( theItem ) && !parentGroupEmbedded ( theItem ) )
1858
+ if ( !groupEmbedded ( theItem ) && !parentGroupEmbedded ( theItem ) )
1855
1859
{
1856
1860
editItem ( theItem, 0 );
1857
1861
}
@@ -1863,7 +1867,7 @@ void QgsLegend::makeToTopLevelItem()
1863
1867
QgsLegendItem* theItem = dynamic_cast <QgsLegendItem *>( currentItem () );
1864
1868
if ( theItem )
1865
1869
{
1866
- if ( !parentGroupEmbedded ( theItem ) )
1870
+ if ( !parentGroupEmbedded ( theItem ) )
1867
1871
{
1868
1872
theItem->storeAppearanceSettings ();
1869
1873
removeItem ( theItem );
@@ -2176,17 +2180,17 @@ void QgsLegend::setCRSForSelectedLayers( const QgsCoordinateReferenceSystem &crs
2176
2180
2177
2181
bool QgsLegend::parentGroupEmbedded ( QTreeWidgetItem* item ) const
2178
2182
{
2179
- if ( !item )
2183
+ if ( !item )
2180
2184
{
2181
2185
return false ;
2182
2186
}
2183
2187
2184
- QgsLegendItem* lItem = dynamic_cast <QgsLegendItem*>(item);
2185
- if ( lItem && lItem->parent () )
2188
+ QgsLegendItem* lItem = dynamic_cast <QgsLegendItem*>( item );
2189
+ if ( lItem && lItem->parent () )
2186
2190
{
2187
2191
QgsLegendGroup* parentGroup = dynamic_cast <QgsLegendGroup*>( lItem->parent () );
2188
- if ( parentGroup && parentGroup->type () == QgsLegendItem::LEGEND_GROUP
2189
- && mEmbeddedGroups .contains ( parentGroup->text ( 0 ) ) )
2192
+ if ( parentGroup && parentGroup->type () == QgsLegendItem::LEGEND_GROUP
2193
+ && mEmbeddedGroups .contains ( parentGroup->text ( 0 ) ) )
2190
2194
{
2191
2195
return true ;
2192
2196
}
@@ -2196,13 +2200,13 @@ bool QgsLegend::parentGroupEmbedded( QTreeWidgetItem* item ) const
2196
2200
2197
2201
bool QgsLegend::groupEmbedded ( QTreeWidgetItem* item ) const
2198
2202
{
2199
- if ( !item )
2203
+ if ( !item )
2200
2204
{
2201
2205
return false ;
2202
2206
}
2203
2207
2204
- QgsLegendGroup* gItem = dynamic_cast <QgsLegendGroup*>(item);
2205
- if ( !gItem )
2208
+ QgsLegendGroup* gItem = dynamic_cast <QgsLegendGroup*>( item );
2209
+ if ( !gItem )
2206
2210
{
2207
2211
return false ;
2208
2212
}
0 commit comments