Skip to content

Commit 7ca0c98

Browse files
committedJun 6, 2011
Fix order of embedded layers in groups
1 parent c2b418b commit 7ca0c98

File tree

2 files changed

+55
-58
lines changed

2 files changed

+55
-58
lines changed
 

‎src/app/legend/qgslegend.cpp

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ int QgsLegend::addGroup( QString name, bool expand, int groupIndex )
186186
void 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 )
12641267
bool 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

21772181
bool 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

21972201
bool 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
}

‎src/app/qgisapp.cpp

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5053,26 +5053,14 @@ void QgisApp::addMapLayer( QgsMapLayer *theMapLayer )
50535053
void QgisApp::embedLayers()
50545054
{
50555055
//dialog to select groups/layers from other project files
5056-
5057-
//hardcoded for debugging
5058-
/*QString filepath="/home/marco/geodaten/projekte/composertest.qgs";
5059-
QString id="komb113320110531113659299";
5060-
5061-
QList<QDomNode> brokenNodes;
5062-
QList< QPair< QgsVectorLayer*, QDomElement > > vectorLayerList;
5063-
QgsProject::instance()->createEmbeddedLayer( id, filepath, brokenNodes, vectorLayerList );*/
5064-
5065-
/*QString filepath="/home/marco/geodaten/projekte/rasters.qgs";
5066-
QString groupname="Karten";
5067-
mMapLegend->addEmbeddedGroup( groupname, filepath );*/
5068-
50695056
QgsEmbedLayerDialog d;
5070-
if( d.exec() == QDialog::Accepted )
5057+
if ( d.exec() == QDialog::Accepted )
50715058
{
5059+
mMapCanvas->freeze( true );
50725060
//groups
50735061
QList< QPair < QString, QString > > groups = d.embeddedGroups();
50745062
QList< QPair < QString, QString > >::const_iterator groupIt = groups.constBegin();
5075-
for(; groupIt != groups.constEnd(); ++groupIt )
5063+
for ( ; groupIt != groups.constEnd(); ++groupIt )
50765064
{
50775065
mMapLegend->addEmbeddedGroup( groupIt->first, groupIt->second );
50785066
}
@@ -5083,10 +5071,15 @@ void QgisApp::embedLayers()
50835071

50845072
QList< QPair < QString, QString > > layers = d.embeddedLayers();
50855073
QList< QPair < QString, QString > >::const_iterator layerIt = layers.constBegin();
5086-
for(; layerIt != layers.constEnd(); ++layerIt )
5074+
for ( ; layerIt != layers.constEnd(); ++layerIt )
50875075
{
50885076
QgsProject::instance()->createEmbeddedLayer( layerIt->first, layerIt->second, brokenNodes, vectorLayerList );
50895077
}
5078+
mMapCanvas->freeze( false );
5079+
if ( groups.size() > 0 || layers.size() > 0 )
5080+
{
5081+
mMapCanvas->refresh();
5082+
}
50905083
}
50915084
}
50925085

@@ -6555,7 +6548,7 @@ void QgisApp::showLayerProperties( QgsMapLayer *ml )
65556548
if ( !ml )
65566549
return;
65576550

6558-
if( !QgsProject::instance()->layerIsEmbedded( ml->id() ).isEmpty() )
6551+
if ( !QgsProject::instance()->layerIsEmbedded( ml->id() ).isEmpty() )
65596552
{
65606553
return; //don't show properties of embedded layers
65616554
}

0 commit comments

Comments
 (0)
Please sign in to comment.