@@ -186,6 +186,7 @@ int QgsLegend::addGroup( QString name, bool expand, int groupIndex )
186186void QgsLegend::removeAll ()
187187{
188188 clear ();
189+ mEmbeddedGroups .clear ();
189190 mPixmapWidthValues .clear ();
190191 mPixmapHeightValues .clear ();
191192 updateMapCanvasLayerSet ();
@@ -297,7 +298,7 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
297298 {
298299 // prevent to drag out content under groups that are embedded from other
299300 // project files.
300- if ( parentGroupEmbedded ( item ) )
301+ if ( parentGroupEmbedded ( item ) )
301302 {
302303 continue ;
303304 }
@@ -372,7 +373,7 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
372373 mDropTarget = layer;
373374
374375 // prevent inserting content into embedded groups
375- if ( !parentGroupEmbedded ( litem ) )
376+ if ( !parentGroupEmbedded ( litem ) )
376377 {
377378 if ( e->y () < ( y0 + y1 ) / 2 )
378379 {
@@ -388,14 +389,14 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
388389 }
389390 }
390391 }
391- else if ( group )
392- {
392+ else if ( group )
393+ {
393394 if ( yCoordAboveCenter ( litem, e->y () ) ) // over center of item
394395 {
395396 QgsDebugMsg ( " insert before group" );
396397
397398 // prevent inserting content into embedded groups
398- if ( !parentGroupEmbedded ( item ) )
399+ if ( !parentGroupEmbedded ( item ) )
399400 {
400401 line_y = visualItemRect ( item ).top () + 1 ;
401402 mDropTarget = item;
@@ -404,7 +405,7 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
404405 }
405406 else // below center of item
406407 {
407- if ( !groupEmbedded ( item ) )
408+ if ( !groupEmbedded ( item ) )
408409 {
409410 QgsDebugMsg ( " insert into group" );
410411
@@ -601,7 +602,7 @@ void QgsLegend::handleRightClickEvent( QTreeWidgetItem* item, const QPoint& posi
601602 tr ( " &Set group CRS" ), this , SLOT ( legendGroupSetCRS () ) );
602603 }
603604
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 ) )
605606 {
606607 theMenu.addAction ( tr ( " Re&name" ), this , SLOT ( openEditor () ) );
607608 }
@@ -635,19 +636,19 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
635636
636637 // open project file, get layer ids in group, add the layers
637638 QFile projectFile ( projectFilePath );
638- if ( !projectFile.open ( QIODevice::ReadOnly ) )
639+ if ( !projectFile.open ( QIODevice::ReadOnly ) )
639640 {
640641 return 0 ;
641642 }
642643
643644 QDomDocument projectDocument;
644- if ( !projectDocument.setContent ( &projectFile ) )
645+ if ( !projectDocument.setContent ( &projectFile ) )
645646 {
646647 return 0 ;
647648 }
648649
649- QDomElement legendElem = projectDocument.documentElement ().firstChildElement (" legend" );
650- if ( legendElem.isNull () )
650+ QDomElement legendElem = projectDocument.documentElement ().firstChildElement ( " legend" );
651+ if ( legendElem.isNull () )
651652 {
652653 return 0 ;
653654 }
@@ -656,21 +657,21 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
656657 QList< QPair< QgsVectorLayer*, QDomElement > > vectorLayerList;
657658 QSettings settings;
658659
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 )
661662 {
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 )
664665 {
665666 // embedded groups cannot be embedded again
666- if ( legendElem.attribute (" embedded" ) == " 1" )
667+ if ( legendElem.attribute ( " embedded" ) == " 1" )
667668 {
668669 mEmbeddedGroups .remove ( groupName );
669670 return 0 ;
670671 }
671672
672673 QgsLegendGroup* group = 0 ;
673- if ( parent )
674+ if ( parent )
674675 {
675676 group = new QgsLegendGroup ( parent, groupName );
676677 }
@@ -685,22 +686,24 @@ QgsLegendGroup* QgsLegend::addEmbeddedGroup( const QString& groupName, const QSt
685686 setCurrentItem ( group );
686687
687688 QDomNodeList groupChildren = legendElem.childNodes ();
688- for ( int j = 0 ; j < groupChildren.size (); ++j )
689+ for ( int j = 0 ; j < groupChildren.size (); ++j )
689690 {
690691 QDomElement childElem = groupChildren.at ( j ).toElement ();
691692 QString tagName = childElem.tagName ();
692- if ( tagName == " legendlayer" )
693+ if ( tagName == " legendlayer" )
693694 {
694- QString layerId = childElem.firstChildElement (" filegroup" ).firstChildElement (" legendlayerfile" ).attribute (" layerid" );
695+ QString layerId = childElem.firstChildElement ( " filegroup" ).firstChildElement ( " legendlayerfile" ).attribute ( " layerid" );
695696 QgsProject::instance ()->createEmbeddedLayer ( layerId, projectFilePath, brokenNodes, vectorLayerList, false );
696- if ( currentItem () && currentItem () != group )
697+ QTreeWidgetItem* cItem = currentItem ();
698+ if ( cItem && cItem != group )
697699 {
698- insertItem ( currentItem (), group );
700+ removeItem ( cItem );
701+ group->insertChild ( group->childCount (), cItem );
699702 }
700703 }
701- else if ( tagName == " legendgroup" )
704+ else if ( tagName == " legendgroup" )
702705 {
703- addEmbeddedGroup ( childElem.attribute (" name" ), projectFilePath, group );
706+ addEmbeddedGroup ( childElem.attribute ( " name" ), projectFilePath, group );
704707 }
705708 }
706709 checkLayerOrderUpdate ();
@@ -735,7 +738,7 @@ void QgsLegend::addLayer( QgsMapLayer * layer )
735738 }
736739
737740 QgsLegendLayer* llayer = new QgsLegendLayer ( layer );
738- if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
741+ if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
739742 {
740743 QFont itemFont;
741744 itemFont.setItalic ( true );
@@ -1032,10 +1035,10 @@ bool QgsLegend::writeXML( QList<QTreeWidgetItem *> items, QDomNode &node, QDomDo
10321035 }
10331036
10341037 QHash< QString, QString >::const_iterator embedIt = mEmbeddedGroups .find ( item->text ( 0 ) );
1035- if ( embedIt != mEmbeddedGroups .constEnd () )
1038+ if ( embedIt != mEmbeddedGroups .constEnd () )
10361039 {
1037- legendgroupnode.setAttribute (" embedded" , 1 );
1038- legendgroupnode.setAttribute (" project" , embedIt.value () );
1040+ legendgroupnode.setAttribute ( " embedded" , 1 );
1041+ legendgroupnode.setAttribute ( " project" , embedIt.value () );
10391042 }
10401043 else
10411044 {
@@ -1119,7 +1122,7 @@ bool QgsLegend::writeXML( QList<QTreeWidgetItem *> items, QDomNode &node, QDomDo
11191122 layerfilegroupnode.appendChild ( legendlayerfilenode );
11201123
11211124 // embedded layer?
1122- if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
1125+ if ( !QgsProject::instance ()->layerIsEmbedded ( layer->id () ).isEmpty () )
11231126 {
11241127 legendlayerfilenode.setAttribute ( " embedded" , " 1" );
11251128 }
@@ -1152,7 +1155,7 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
11521155 if ( childelem.tagName () == " legendgroup" )
11531156 {
11541157 QgsLegendGroup* theGroup = 0 ;
1155- if ( childelem.attribute (" embedded" ) == " 1" )
1158+ if ( childelem.attribute ( " embedded" ) == " 1" )
11561159 {
11571160 theGroup = addEmbeddedGroup ( name, childelem.attribute ( " project" ) );
11581161 }
@@ -1164,7 +1167,7 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
11641167 theGroup = new QgsLegendGroup ( this , name );
11651168 }
11661169
1167- if ( !theGroup )
1170+ if ( !theGroup )
11681171 {
11691172 continue ;
11701173 }
@@ -1264,6 +1267,7 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
12641267bool QgsLegend::readXML ( QDomNode& legendnode )
12651268{
12661269 clear (); // remove all items first
1270+ mEmbeddedGroups .clear ();
12671271 return readXML ( 0 , legendnode );
12681272}
12691273
@@ -1851,7 +1855,7 @@ void QgsLegend::openEditor()
18511855 QTreeWidgetItem* theItem = currentItem ();
18521856 if ( theItem )
18531857 {
1854- if ( !groupEmbedded ( theItem ) && !parentGroupEmbedded ( theItem ) )
1858+ if ( !groupEmbedded ( theItem ) && !parentGroupEmbedded ( theItem ) )
18551859 {
18561860 editItem ( theItem, 0 );
18571861 }
@@ -1863,7 +1867,7 @@ void QgsLegend::makeToTopLevelItem()
18631867 QgsLegendItem* theItem = dynamic_cast <QgsLegendItem *>( currentItem () );
18641868 if ( theItem )
18651869 {
1866- if ( !parentGroupEmbedded ( theItem ) )
1870+ if ( !parentGroupEmbedded ( theItem ) )
18671871 {
18681872 theItem->storeAppearanceSettings ();
18691873 removeItem ( theItem );
@@ -2176,17 +2180,17 @@ void QgsLegend::setCRSForSelectedLayers( const QgsCoordinateReferenceSystem &crs
21762180
21772181bool QgsLegend::parentGroupEmbedded ( QTreeWidgetItem* item ) const
21782182{
2179- if ( !item )
2183+ if ( !item )
21802184 {
21812185 return false ;
21822186 }
21832187
2184- QgsLegendItem* lItem = dynamic_cast <QgsLegendItem*>(item);
2185- if ( lItem && lItem->parent () )
2188+ QgsLegendItem* lItem = dynamic_cast <QgsLegendItem*>( item );
2189+ if ( lItem && lItem->parent () )
21862190 {
21872191 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 ) ) )
21902194 {
21912195 return true ;
21922196 }
@@ -2196,13 +2200,13 @@ bool QgsLegend::parentGroupEmbedded( QTreeWidgetItem* item ) const
21962200
21972201bool QgsLegend::groupEmbedded ( QTreeWidgetItem* item ) const
21982202{
2199- if ( !item )
2203+ if ( !item )
22002204 {
22012205 return false ;
22022206 }
22032207
2204- QgsLegendGroup* gItem = dynamic_cast <QgsLegendGroup*>(item);
2205- if ( !gItem )
2208+ QgsLegendGroup* gItem = dynamic_cast <QgsLegendGroup*>( item );
2209+ if ( !gItem )
22062210 {
22072211 return false ;
22082212 }
0 commit comments