@@ -1038,7 +1038,7 @@ bool QgsLegend::readXML(QDomNode& legendnode)
1038
1038
if (childelem.tagName ()==" legendgroup" )
1039
1039
{
1040
1040
QgsLegendGroup* theGroup = new QgsLegendGroup (this , name);
1041
- childelem.attribute (" open" ) == " true" ? expandItem (theGroup) : collapseItem (theGroup);
1041
+ childelem.attribute (" open" ) == " true" ? expanded. push_back (theGroup) : collapsed. push_back (theGroup);
1042
1042
// set the checkbox of the legend group to the right state
1043
1043
blockSignals (true );
1044
1044
QString checked = childelem.attribute (" checked" );
@@ -1103,8 +1103,15 @@ bool QgsLegend::readXML(QDomNode& legendnode)
1103
1103
// find out the legendlayer
1104
1104
std::map<QString,QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance ()->mapLayers ();
1105
1105
std::map<QString, QgsMapLayer*>::const_iterator iter = mapLayers.find (childelem.attribute (" layerid" ));
1106
-
1107
- if (iter != mapLayers.end () && lastLayerFileGroup)
1106
+ if (iter == mapLayers.end ()) // the layer cannot be found (e.g. the file has been moved)
1107
+ {
1108
+ // remove the whole legendlayer if this is the only legendlayerfile
1109
+ if (childelem.previousSibling ().isNull () && childelem.nextSibling ().isNull ())
1110
+ {
1111
+ delete lastLayer;
1112
+ }
1113
+ }
1114
+ else if (lastLayerFileGroup)
1108
1115
{
1109
1116
QgsMapLayer* theMapLayer = iter->second ;
1110
1117
QgsLegendLayerFile* theLegendLayerFile = new QgsLegendLayerFile (lastLayerFileGroup, QgsLegendLayerFile::nameFromLayer (theMapLayer), theMapLayer);
@@ -1135,7 +1142,7 @@ bool QgsLegend::readXML(QDomNode& legendnode)
1135
1142
1136
1143
theLegendLayerFile->updateLegendItem ();
1137
1144
refreshLayerSymbology (theMapLayer->getLayerID ());
1138
- }
1145
+ }
1139
1146
}
1140
1147
else if (childelem.tagName ()==" filegroup" )
1141
1148
{
@@ -1155,11 +1162,10 @@ bool QgsLegend::readXML(QDomNode& legendnode)
1155
1162
}
1156
1163
1157
1164
// Do the tree item expands and collapses.
1158
- for (int i = 0 ; i < collapsed.size (); ++i)
1159
- collapseItem (collapsed[i]);
1160
-
1161
1165
for (int i = 0 ; i < expanded.size (); ++i)
1162
1166
expandItem (expanded[i]);
1167
+ for (int i = 0 ; i < collapsed.size (); ++i)
1168
+ collapseItem (collapsed[i]);
1163
1169
1164
1170
return true ;
1165
1171
}
0 commit comments