diff --git a/src/legend/qgslegend.cpp b/src/legend/qgslegend.cpp index a5f957689ae..7df6c0346c6 100755 --- a/src/legend/qgslegend.cpp +++ b/src/legend/qgslegend.cpp @@ -39,6 +39,7 @@ #include "qgsmapcanvas.h" #include "qgsmaplayer.h" #include "qgsmaplayerregistry.h" +#include "qgsproject.h" #include "qgsrasterlayerproperties.h" #include #include @@ -829,3 +830,95 @@ bool QgsLegend::readXML(QDomNode& legendnode) } return true; } + +void QgsLegend::saveToProject() +{ + int lgroupidx=0; + int llayeridx=0; + QString groupstring; //string which have to be prepended if an element is into a group + + QListViewItemIterator it(this); + while(it.current()) + { + QgsLegendItem *item = dynamic_cast(it.current()); + if(item) + { + switch(item->type()) + { + case QgsLegendItem::LEGEND_GROUP: + ++lgroupidx; + groupstring = "/LegendGroup"+QString::number(lgroupidx); + QgsProject::instance()->writeEntry("Legend","/LegendGroup"+QString::number(lgroupidx)+"/Name",item->text(0)); + if(item->isOpen()) + { + QgsProject::instance()->writeEntry("Legend","/LegendGroup"+QString::number(lgroupidx)+"/Open",true); + } + else + { + QgsProject::instance()->writeEntry("Legend","/LegendGroup"+QString::number(lgroupidx)+"/Open",true); + } + break; + + + case QgsLegendItem::LEGEND_LAYER: + ++llayeridx; + if(item->parent()==0)//legend layer is not in a group + { + groupstring=""; + } + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/Name",item->text(0)); + if(item->isOpen()) + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/Open",true); + } + else + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/Open",false); + } + break; + + case QgsLegendItem::LEGEND_PROPERTY_GROUP: + if(item->isOpen()) + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/LegendPropertyGroup/Open", true); + } + else + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/LegendPropertyGroup/Open", false); + } + break; + + case QgsLegendItem::LEGEND_SYMBOL_GROUP: + if(item->isOpen()) + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/LegendSymbolGroup/Open", true); + } + else + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/LegendSymbolGroup/Open", false); + } + break; + + case QgsLegendItem::LEGEND_LAYER_FILE_GROUP: + if(item->isOpen()) + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/LegendLayerFileGroup/Open", true); + } + else + { + QgsProject::instance()->writeEntry("Legend",groupstring+"/LegendLayer"+QString::number(llayeridx)+"/LegendLayerFileGroup/Open", false); + } + break; + + default: //do nothing for the leaf nodes + break; + } + } + ++it; + } +} + +void QgsLegend::restoreFromProject() +{ + +} diff --git a/src/legend/qgslegend.h b/src/legend/qgslegend.h index f23dbdffbf2..dd966cb0edd 100755 --- a/src/legend/qgslegend.h +++ b/src/legend/qgslegend.h @@ -101,9 +101,15 @@ class QgsLegend : public QListView /**Removes a checkbox from mCheckBoxes. Does not delete the objects*/ void unregisterCheckBox(QListViewItem* item); + /**Writes the content of the legend using the key system of QgsProject*/ + void saveToProject(); + /**Writes the content of the legend to a project file*/ bool writeXML(QDomNode & layer_node, QDomDocument & document); + /**Restores the legend from a project file using the key system of QgsProject*/ + void restoreFromProject(); + /**Restores the legend from a project file*/ bool readXML(QDomNode& legendnode); diff --git a/src/qgsproject.cpp b/src/qgsproject.cpp index c5290cc5558..bf155fecb07 100644 --- a/src/qgsproject.cpp +++ b/src/qgsproject.cpp @@ -1295,6 +1295,7 @@ bool QgsProject::write() if(theLegend) { theLegend->writeXML(qgisNode, *doc); + //theLegend->saveToProject(); } }