[QGIS Commit] r9682 - trunk/qgis/src/app/legend
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Nov 21 17:26:14 EST 2008
Author: wonder
Date: 2008-11-21 17:26:14 -0500 (Fri, 21 Nov 2008)
New Revision: 9682
Modified:
trunk/qgis/src/app/legend/qgslegend.cpp
Log:
Delete parent legend layer item if a map layer has been removed from registry and
it was the only (last) legend layer file.
Modified: trunk/qgis/src/app/legend/qgslegend.cpp
===================================================================
--- trunk/qgis/src/app/legend/qgslegend.cpp 2008-11-21 17:34:48 UTC (rev 9681)
+++ trunk/qgis/src/app/legend/qgslegend.cpp 2008-11-21 22:26:14 UTC (rev 9682)
@@ -156,12 +156,18 @@
QTreeWidgetItem* theItem = firstItem();
QgsDebugMsg( "called." );
+
+ QgsLegendLayer* lastLL = NULL;
while ( theItem )
{
QgsLegendItem *li = dynamic_cast<QgsLegendItem*>( theItem );
if ( li )
{
+ // save legend layer (parent of a legend layer file we're going to delete)
+ QgsLegendLayer* ll = dynamic_cast<QgsLegendLayer*>( li );
+ if ( ll ) lastLL = ll;
+
QgsLegendLayerFile* llf = dynamic_cast<QgsLegendLayerFile*>( li );
if ( llf )
{
@@ -171,6 +177,15 @@
mStateOfCheckBoxes.erase( llf );
removeItem( llf );
delete llf;
+
+ // delete also parent legend layer if now it's empty
+ if (lastLL->mapLayers().size() == 0)
+ {
+ mStateOfCheckBoxes.erase( lastLL );
+ removeItem( lastLL );
+ delete lastLL;
+ }
+
break;
}
}
@@ -609,28 +624,28 @@
if ( ll )
{
std::list<QgsMapLayer*> maplayers = ll->mapLayers();
- mStateOfCheckBoxes.erase( ll );
+ int layerCount = maplayers.size();
- //also remove the entries for the QgsLegendLayerFiles from the map
- std::list<QgsLegendLayerFile*> llfiles = ll->legendLayerFiles();
- for ( std::list<QgsLegendLayerFile*>::iterator it = llfiles.begin(); it != llfiles.end(); ++it )
- {
- mStateOfCheckBoxes.erase( *it );
- }
-
for ( std::list<QgsMapLayer*>::iterator it = maplayers.begin(); it != maplayers.end(); ++it )
{
//remove the layer
if ( *it )
{
- //the map layer registry emits a signal an this will remove the legend layer
+ //the map layer registry emits a signal and this will remove the legend layer file
//from the legend and from memory by calling QgsLegend::removeLayer(QString layer key)
QgsMapLayerRegistry::instance()->removeMapLayer(( *it )->getLayerID() );
}
}
- removeItem( ll );
- delete ll;
+ if (layerCount == 0)
+ {
+ // delete the item only when it didn't have any child legend layer files
+ // (otherwise it is deleted in QgsLegend::removeLayer when deleting last legend layer file)
+ mStateOfCheckBoxes.erase( ll );
+ removeItem( ll );
+ delete ll;
+ }
+
adjustIconSize();
return;
}
More information about the QGIS-commit
mailing list