Index: src/app/legend/qgslegend.cpp =================================================================== --- src/app/legend/qgslegend.cpp (revisione 11104) +++ src/app/legend/qgslegend.cpp (copia locale) @@ -620,10 +620,22 @@ return; } - //if the current item is a legend layer: remove all layers of the current legendLayer - QgsLegendLayer* ll = dynamic_cast( currentItem() ); - if ( ll ) + QgsLegendItem* li = dynamic_cast( currentItem() ); + QgsLegendLayerFile* llf = 0; + + if ( li->type() == QgsLegendItem::LEGEND_SYMBOL_ITEM ) { + QgsLegendSymbologyItem* si = dynamic_cast( li ); + li = dynamic_cast( si->parent() ); + } + if ( li->type() == QgsLegendItem::LEGEND_LAYER_FILE_GROUP ) + { + QgsLegendLayerFileGroup* llfg = dynamic_cast( li ); + li = dynamic_cast( llfg->parent() ); + } + if ( li->type() == QgsLegendItem::LEGEND_LAYER ) + { + QgsLegendLayer* ll = dynamic_cast( li ); std::list maplayers = ll->mapLayers(); int layerCount = maplayers.size(); @@ -650,11 +662,9 @@ adjustIconSize(); return; } - - //if the current item is a legend layer file - QgsLegendLayerFile* llf = dynamic_cast( currentItem() ); - if ( llf ) + else if ( li->type() == QgsLegendItem::LEGEND_LAYER_FILE ) { + llf = dynamic_cast( li ); if ( llf->layer() ) { //the map layer registry emits a signal an this will remove the legend layer @@ -682,6 +692,16 @@ return; } + if ( li->type() == QgsLegendItem::LEGEND_LAYER_FILE_GROUP ) + { + QgsLegendLayerFileGroup* llfg = dynamic_cast( li ); + li = dynamic_cast( llfg->parent() ); + } + if ( li->type() == QgsLegendItem::LEGEND_SYMBOL_ITEM ) + { + QgsLegendSymbologyItem* si = dynamic_cast( li ); + li = dynamic_cast( si->parent() ); + } if ( li->type() == QgsLegendItem::LEGEND_LAYER_FILE ) { llf = dynamic_cast( li );