@@ -943,7 +943,7 @@ bool QgsLegend::readXML(QDomNode& legendnode)
943
943
if (childelem.tagName ()==" legendgroup" )
944
944
{
945
945
QgsLegendGroup* theGroup = new QgsLegendGroup (this , name);
946
- childelem.attribute (" open" ) == " true" ? expandItem (theGroup) : collapseItem (theGroup);
946
+ childelem.attribute (" open" ) == " true" ? expanded. push_back (theGroup) : collapsed. push_back (theGroup);
947
947
// set the checkbox of the legend group to the right state
948
948
blockSignals (true );
949
949
QString checked = childelem.attribute (" checked" );
@@ -1009,7 +1009,15 @@ bool QgsLegend::readXML(QDomNode& legendnode)
1009
1009
// find out the legendlayer
1010
1010
std::map<QString,QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance ()->mapLayers ();
1011
1011
std::map<QString, QgsMapLayer*>::const_iterator iter = mapLayers.find (childelem.attribute (" layerid" ));
1012
- if (iter != mapLayers.end () && lastLayerFileGroup)
1012
+ if (iter == mapLayers.end ()) // the layer cannot be found (e.g. the file has been moved)
1013
+ {
1014
+ // remove the whole legendlayer if this is the only legendlayerfile
1015
+ if (childelem.previousSibling ().isNull () && childelem.nextSibling ().isNull ())
1016
+ {
1017
+ delete lastLayer;
1018
+ }
1019
+ }
1020
+ else if (lastLayerFileGroup)
1013
1021
{
1014
1022
QgsMapLayer* theMapLayer = iter->second ;
1015
1023
QgsLegendLayerFile* theLegendLayerFile = new QgsLegendLayerFile (lastLayerFileGroup, QgsLegendLayerFile::nameFromLayer (theMapLayer), theMapLayer);
@@ -1060,11 +1068,11 @@ bool QgsLegend::readXML(QDomNode& legendnode)
1060
1068
}
1061
1069
1062
1070
// Do the tree item expands and collapses.
1063
- for (int i = 0 ; i < collapsed.size (); ++i)
1064
- collapseItem (collapsed[i]);
1065
-
1066
1071
for (int i = 0 ; i < expanded.size (); ++i)
1067
1072
expandItem (expanded[i]);
1073
+
1074
+ for (int i = 0 ; i < collapsed.size (); ++i)
1075
+ collapseItem (collapsed[i]);
1068
1076
1069
1077
return true ;
1070
1078
}
0 commit comments