Skip to content

Commit

Permalink
First pass at raster layer properties persistance when saving project…
Browse files Browse the repository at this point in the history
…. This is still pretty buggy at the moment. Stand by for a bug fix update in the near future...

git-svn-id: http://svn.osgeo.org/qgis/trunk@471 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
timlinux committed Jan 13, 2004
1 parent 11cb31c commit fa7dae9
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 11 deletions.
59 changes: 52 additions & 7 deletions qgis.dtd
Expand Up @@ -2,6 +2,11 @@
* This DTD describes the maplayers and their symbology and
* is used when saving/restoring a QGIS project.
-->

<!--
-- Project Properties
--
-->
<!ELEMENT qgis (title, extent, projectlayers) >
<!ELEMENT projectlayers (maplayer*) >
<!ELEMENT extent (xmin, ymin, xmax, ymax) >
Expand All @@ -10,20 +15,31 @@
<!ELEMENT xmax (#PCDATA) >
<!ELEMENT ymax (#PCDATA) >
<!ELEMENT title (#PCDATA) >
<!-- Attribute Lists -->
<!ATTLIST qgis projectname CDATA #REQUIRED >
<!ATTLIST projectlayers layercount CDATA #REQUIRED >
<!--
-- General Map Layer Properties
-- (apply to both vector and raster)
-->
<!ELEMENT maplayer (layername, datasource, zorder, symbol) >
<!ELEMENT layername (#PCDATA) >
<!ELEMENT datasource (#PCDATA) >
<!ELEMENT zorder (#PCDATA) >
<!ELEMENT symbol (linewidth, outlinecolor, fillcolor) >
<!ELEMENT linewidth (#PCDATA) >
<!ELEMENT fillcolor EMPTY>
<!ELEMENT outlinecolor EMPTY>
<!ATTLIST qgis projectname CDATA #REQUIRED >
<!-- Attribute Lists -->
<!ATTLIST maplayer
type (vector|raster|database) "vector"
visible (1|0) "0"
>
<!ATTLIST projectlayers layercount CDATA #REQUIRED >
<!--
-- Vector Layer Properties
--
-->
<!ELEMENT symbol (linewidth, outlinecolor, fillcolor) >
<!ELEMENT linewidth (#PCDATA) >
<!ELEMENT fillcolor EMPTY>
<!ELEMENT outlinecolor EMPTY>
<!-- Attribute Lists -->
<!ATTLIST fillcolor
red CDATA #IMPLIED
green CDATA #IMPLIED
Expand All @@ -33,4 +49,33 @@
red CDATA #IMPLIED
green CDATA #IMPLIED
blue CDATA #IMPLIED
>
>
<!--
-- Raster Layer Properties
--
-->
<!ELEMENT rasterproperties (showDebugOverlayFlag, showGrayAsColorFlag, invertHistogramFlag, stdDevsToPlotDouble, transparencyLevelInt, redBandNameQString, greenBandNameQString, blueBandNameQString, grayBandNameQString) >
<!--Raster flag to indicate whether debug infor overlay should be rendered onto the raster -->
<!ELEMENT showDebugOverlayFlag>
<!--Raster flag indicating whether grayscale images should be rendered as pseudocolor -->
<!ELEMENT showGrayAsColorFlag>
<!--Raster : flag indicating whether the histogram should be inverted or not -->
<!ELEMENT invertHistogramFlag>
<!--Raster : Number of stddev to plot (0) to ignore -->
<!ELEMENT stdDevsToPlotDouble>
<!--Raster transparency for this layer should be 0-255 -->
<!ELEMENT transparencyLevelInt>
<!--Raster : the band to be associated with the color red - usually red -->
<!ELEMENT redBandNameQString (#CDATA)>
<!--Raster : the band to be associated with the color green - usually green -->
<!ELEMENT greenBandNameQString (#CDATA)>
<!--Raster : the band to be associated with the color blue - usually blue -->
<!ELEMENT blueBandNameQString (#CDATA)>
<!--Raster : the band to be associated with the grayscale only ouput - usually gray -->
<!ELEMENT grayBandNameQString (#CDATA)>
<!-- Attribute Lists -->
<!ATTLIST showDebugOverlayFlag boolean (1|0|true|false) "false">
<!ATTLIST showGrayAsColorFlag boolean (1|0|true|false) "false">
<!ATTLIST invertHistogramFlag boolean (1|0|true|false) "false">
<!ATTLIST stdDevsToPlotDouble value CDATA "0">
<!ATTLIST transparencyLevelInt value CDATA "0">
104 changes: 100 additions & 4 deletions src/qgsprojectio.cpp
Expand Up @@ -12,7 +12,7 @@
* (at your option) any later version. *
* *
***************************************************************************/
/* qgsprojectio.cpp,v 1.12 2003/12/26 15:56:30 stevehalasz Exp */
/* qgsprojectio.cpp,v 1.13 2004/01/13 15:15:31 timlinux Exp */
#include <iostream>
#include <fstream>
#include <qfiledialog.h>
Expand All @@ -21,6 +21,7 @@
#include <qmessagebox.h>
#include <qcolor.h>
#include "qgsmaplayer.h"
#include "qvariant.h"
#ifdef POSTGRESQL
#include "qgsdatabaselayer.h"
#endif
Expand Down Expand Up @@ -176,10 +177,51 @@ bool QgsProjectIo::read(){
shpl->setSymbol(sym);
shpl->setVisible(visible == "1");
} else if ( type == "raster" ) {
QgsRasterLayer *rastl = new QgsRasterLayer(dataSource, layerName);
QgsRasterLayer *myRasterLayer = new QgsRasterLayer(dataSource, layerName);

map->addLayer(rastl);
rastl->setVisible(visible == "1");
map->addLayer(myRasterLayer);

myRasterLayer->setVisible(visible == "1");

mnl = node.namedItem("rasterproperties");

QDomNode snode = mnl.namedItem("showDebugOverlayFlag");
QDomElement myElement = snode.toElement();
QVariant myQVariant = (QVariant) myElement.attribute("boolean");
myRasterLayer->setShowDebugOverlayFlag(myQVariant.toBool());

snode = mnl.namedItem("showGrayAsColorFlag");
myElement = snode.toElement();
myQVariant = (QVariant) myElement.attribute("boolean");
myRasterLayer->setShowGrayAsColorFlag(myQVariant.toBool());
snode = mnl.namedItem("invertHistogramFlag");
myElement = snode.toElement();
myQVariant = (QVariant) myElement.attribute("boolean");
myRasterLayer->setInvertHistogramFlag(myQVariant.toBool());

snode = mnl.namedItem("stdDevsToPlotDouble");
myElement = snode.toElement();
myRasterLayer->setStdDevsToPlot(myElement.text().toDouble());

snode = mnl.namedItem("transparencyLevelInt");
myElement = snode.toElement();
myRasterLayer->slot_setTransparency(myElement.text().toInt());

snode = mnl.namedItem("redBandNameQString");
myElement = snode.toElement();
myRasterLayer->setRedBandName(myElement.text());
snode = mnl.namedItem("greenBandNameQString");
myElement = snode.toElement();
myRasterLayer->setGreenBandName(myElement.text());

snode = mnl.namedItem("blueBandNameQString");
myElement = snode.toElement();
myRasterLayer->setBlueBandName(myElement.text());

snode = mnl.namedItem("grayBandNameQString");
myElement = snode.toElement();
myRasterLayer->setGrayBandName(myElement.text());

}
map->setExtent(savedExtent);
}
Expand All @@ -204,12 +246,17 @@ switch(action){
}
return fullPath;
}

void QgsProjectIo::setFileName(QString fn){
fullPath = fn;
}

QString QgsProjectIo::fullPathName(){
return fullPath;
}



void QgsProjectIo::writeXML(){
std::ofstream xml(fullPath);
if(!xml.fail()){
Expand Down Expand Up @@ -278,6 +325,55 @@ void QgsProjectIo::writeXML(){

xml << "\t\t</symbol>\n";
}
else //raster layer properties
{
//cast the maplayer to rasterlayer
QgsRasterLayer *myRasterLayer = (QgsRasterLayer *) lyr;
//Raster flag to indicate whether debug infor overlay should be rendered onto the raster
xml << "\t\t<rasterproperties>\n";
xml << "\t\t\t<showDebugOverlayFlag boolean=\"" ;
if (myRasterLayer->getShowDebugOverlayFlag())
{
xml << "true\"/>\n";
}
else
{
xml << "true\"/>\n";
}
// Raster flag indicating whether grayscale images should be rendered as pseudocolor
xml << "\t\t\t<showGrayAsColorFlag boolean=\"" ;
if (myRasterLayer->getShowGrayAsColorFlag())
{
xml << "true\"/>\n";
}
else
{
xml << "true\"/>\n";
}
//Raster : flag indicating whether the histogram should be inverted or not
xml << "\t\t\t<invertHistogramFlag boolean=\"" ;
if (myRasterLayer->getInvertHistogramFlag())
{
xml << "true\"/>\n";
}
else
{
xml << "true\"/>\n";
}
//Raster : Number of stddev to plot (0) to ignore -->
xml << "\t\t\t<stdDevsToPlotDouble>" << myRasterLayer->getStdDevsToPlot() << "</stdDevsToPlotDouble>\n" ;
//Raster transparency for this layer should be 0-255 -->
xml << "\t\t\t<transparencyLevelInt>" << myRasterLayer->getTransparency() << "</transparencyLevelInt>\n" ;
//Raster : the band to be associated with the color red - usually red -->
xml << "\t\t\t<redBandNameQString>" << myRasterLayer->getRedBandName() << "</redBandNameQString>\n" ;
//Raster : the band to be associated with the color green - usually green -->
xml << "\t\t\t<greenBandNameQString>" << myRasterLayer->getGreenBandName() << "</greenBandNameQString>\n" ;
//Raster : the band to be associated with the color blue - usually blue -->
xml << "\t\t\t<blueBandNameQString>" << myRasterLayer->getBlueBandName() << "</blueBandNameQString>\n" ;
//Raster : the band to be associated with the grayscale only ouput - usually gray -->
xml << "\t\t\t<grayBandNameQString>" << myRasterLayer->getGrayBandName() << "</grayBandNameQString>\n" ;
xml << "\t\t</rasterproperties>\n";
}
xml << "\t</maplayer>\n";
}
xml << "</projectlayers>\n";
Expand Down
1 change: 1 addition & 0 deletions src/qgsrasterlayer.cpp
Expand Up @@ -61,6 +61,7 @@ QgsRasterLayer::QgsRasterLayer(QString path, QString baseName)
redBandNameQString="Red"; // sensible default
greenBandNameQString="Green"; // sensible default
blueBandNameQString="Blue"; // sensible default
blueBandNameQString="Gray"; // sensible default
showGrayAsColorFlag=false; // sensible default
invertHistogramFlag=false; // sensible default
stdDevsToPlotDouble = 0; // sensible default
Expand Down

0 comments on commit fa7dae9

Please sign in to comment.