Skip to content

Commit 100273f

Browse files
author
mhugent
committed
Fix for ticket 549: groups lost and all layers expanded, if layers missing opening the project
git-svn-id: http://svn.osgeo.org/qgis/branches/Release-0_8_0@6458 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 8d5768b commit 100273f

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

src/gui/qgsproject.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -1166,6 +1166,19 @@ bool QgsProject::read()
11661166
// doesn't *have* layers -- nor a GUI for that matter -- we'll just
11671167
// leave in the whining and boldly stomp on.
11681168

1169+
//also restore the legend before bailing out
1170+
QgsLegend* theLegend = _findLegend();
1171+
if(theLegend)
1172+
{
1173+
QDomNodeList ll = doc->elementsByTagName("legend");
1174+
if(ll.count()==1)
1175+
{
1176+
QDomNode legendnode = ll.item(0);
1177+
theLegend->readXML(legendnode);
1178+
}
1179+
1180+
}
1181+
11691182
throw QgsProjectBadLayerException( getMapLayersResults.second );
11701183

11711184
// return false;

src/legend/qgslegend.cpp

+13-5
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ bool QgsLegend::readXML(QDomNode& legendnode)
943943
if(childelem.tagName()=="legendgroup")
944944
{
945945
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);
947947
//set the checkbox of the legend group to the right state
948948
blockSignals(true);
949949
QString checked = childelem.attribute("checked");
@@ -1009,7 +1009,15 @@ bool QgsLegend::readXML(QDomNode& legendnode)
10091009
//find out the legendlayer
10101010
std::map<QString,QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers();
10111011
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)
10131021
{
10141022
QgsMapLayer* theMapLayer = iter->second;
10151023
QgsLegendLayerFile* theLegendLayerFile = new QgsLegendLayerFile(lastLayerFileGroup, QgsLegendLayerFile::nameFromLayer(theMapLayer), theMapLayer);
@@ -1060,11 +1068,11 @@ bool QgsLegend::readXML(QDomNode& legendnode)
10601068
}
10611069

10621070
// Do the tree item expands and collapses.
1063-
for (int i = 0; i < collapsed.size(); ++i)
1064-
collapseItem(collapsed[i]);
1065-
10661071
for (int i = 0; i < expanded.size(); ++i)
10671072
expandItem(expanded[i]);
1073+
1074+
for (int i = 0; i < collapsed.size(); ++i)
1075+
collapseItem(collapsed[i]);
10681076

10691077
return true;
10701078
}

0 commit comments

Comments
 (0)