2007-01-09 02:39:15 +00:00
/*! \class QgsRasterLayer
* \brief This class provides qgis with the ability to render raster datasets
* onto the mapcanvas..
*/
class QgsRasterLayer : QgsMapLayer
{
%TypeHeaderCode
2012-08-26 20:16:51 -03:00
// #include <qgsrasterpyramid.h>
2007-01-09 02:39:15 +00:00
#include <qgsrasterlayer.h>
2008-01-11 06:38:10 +00:00
#include <qgscontrastenhancement.h>
#include <qgsrastertransparency.h>
#include <qgsrastershader.h>
2007-01-09 02:39:15 +00:00
%End
public:
/** \brief This is the constructor for the RasterLayer class.
*
* The main tasks carried out by the constructor are:
*
2008-11-05 22:44:50 +00:00
* -Load the rasters default style (.qml) file if it exists
*
2007-01-09 02:39:15 +00:00
* -Populate the RasterStatsVector with initial values for each band.
*
* -Calculate the layer extents
*
* -Determine whether the layer is gray, paletted or multiband.
*
2008-11-05 22:44:50 +00:00
* -Assign sensible defaults for the red, green, blue and gray bands.
2007-01-09 02:39:15 +00:00
*
* -
* */
2008-11-05 22:44:50 +00:00
QgsRasterLayer( const QString & path = QString::null,
const QString & baseName = QString::null,
bool loadDefaultStyleFlag = true );
/** \brief [ data provider interface ] Constructor in provider mode */
2012-06-14 11:40:07 +02:00
QgsRasterLayer( const QString & uri,
const QString & baseName,
const QString & providerKey,
bool loadDefaultStyleFlag = true );
2008-11-05 22:44:50 +00:00
/** \brief The destructor */
2007-01-09 02:39:15 +00:00
~QgsRasterLayer();
2008-11-05 22:44:50 +00:00
//
// Enums, structs and typedefs
//
/** \brief This enumerator describes the types of shading that can be used */
enum ColorShadingAlgorithm
{
2008-11-06 15:16:08 +00:00
UndefinedShader,
PseudoColorShader,
FreakOutShader,
ColorRampShader,
UserDefinedShader
2008-11-05 22:44:50 +00:00
};
/** \brief This enumerator describes the different kinds of drawing we can do */
enum DrawingStyle
{
UndefinedDrawingStyle,
SingleBandGray, // a single band image drawn as a range of gray colors
SingleBandPseudoColor, // a single band image drawn using a pseudocolor algorithm
PalettedColor, //a "Palette" image drawn using color table
PalettedSingleBandGray, // a "Palette" layer drawn in gray scale
PalettedSingleBandPseudoColor, // a "Palette" layerdrawn using a pseudocolor algorithm
PalettedMultiBandColor, // currently not supported
2010-08-10 16:02:27 +00:00
MultiBandSingleBandGray, // a layer containing 2 or more bands, but a single band drawn as a range of gray colors
2008-11-05 22:44:50 +00:00
MultiBandSingleBandPseudoColor, //a layer containing 2 or more bands, but a single band drawn using a pseudocolor algorithm
MultiBandColor //a layer containing 2 or more bands, mapped to RGB color space.
//In the case of a multiband with only two bands, one band will be mapped to more than one color.
};
/** \brief This enumerator describes the type of raster layer */
enum LayerType
{
GrayOrUndefined,
Palette,
Multiband
} ;
2012-09-04 20:31:59 +02:00
/** \brief Contrast enhancement limits */
enum ContrastEnhancementLimits
{
ContrastEnhancementNone,
ContrastEnhancementMinMax,
ContrastEnhancementStdDev,
ContrastEnhancementCumulativeCut
};
2008-11-05 22:44:50 +00:00
/** \brief A list containing on ContrastEnhancement object per raster band in this raster layer */
typedef QList<QgsContrastEnhancement> ContrastEnhancementList;
2007-01-09 02:39:15 +00:00
2008-01-11 06:38:10 +00:00
/** \brief A list containing one RasterPyramid struct per raster band in this raster layer.
2008-11-05 22:44:50 +00:00
* POTENTIAL pyramid layer. This works by dividing the height
2007-01-09 02:39:15 +00:00
* and width of the raster by an incrementing number. As soon as the result
2008-11-05 22:44:50 +00:00
* of the division is <=256 we stop allowing RasterPyramid structs
2007-01-09 02:39:15 +00:00
* to be added to the list. Each time a RasterPyramid is created
* we will check to see if a pyramid matching these dimensions already exists
2008-11-05 22:44:50 +00:00
* in the raster layer, and if so mark the exists flag as true */
2012-08-26 20:16:51 -03:00
// typedef QList<QgsRasterPyramid> RasterPyramidList;
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
/** \brief A list containing one RasterBandStats struct per raster band in this raster layer.
* Note that while every RasterBandStats element will have the name and number of its associated
* band populated, any additional stats are calculated on a need to know basis.*/
2012-08-28 16:59:16 -03:00
// typedef QList<QgsRasterBandStats> RasterStatsList;
2008-11-05 22:44:50 +00:00
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
//
// Static methods:
//
static void buildSupportedRasterFileFilter( QString & fileFilters );
/** This helper checks to see whether the file name appears to be a valid
* raster file name. If the file name looks like it could be valid,
* but some sort of error occurs in processing the file, the error is
* returned in retError.
2007-01-09 02:39:15 +00:00
*/
2008-11-05 22:44:50 +00:00
static bool isValidRasterFileName( const QString & theFileNameQString, QString &retError );
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
static bool isValidRasterFileName( const QString & theFileNameQString );
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
/** Return time stamp for given file name */
static QDateTime lastModified( const QString & name );
2008-01-11 06:38:10 +00:00
2008-11-05 22:44:50 +00:00
/** \brief ensures that GDAL drivers are registered, but only once */
static void registerGdalDrivers();
2007-01-09 02:39:15 +00:00
//
2008-11-05 22:44:50 +00:00
// Non Static inline methods
2007-01-09 02:39:15 +00:00
//
2008-11-05 22:44:50 +00:00
/** \brief Accessor for blue band name mapping */
QString blueBandName() const;
/** \brief Accessor for color shader algorithm */
QgsRasterLayer::ColorShadingAlgorithm colorShadingAlgorithm() const;
/** \brief Accessor for contrast enhancement algorithm */
QgsContrastEnhancement::ContrastEnhancementAlgorithm contrastEnhancementAlgorithm();
/** \brief Returns contrast enhancement algorithm as a string */
QString contrastEnhancementAlgorithmAsString() const;
/** \brief Accessor for drawing style */
DrawingStyle drawingStyle();
/** \brief Accessor for gray band name mapping */
2012-06-22 17:47:37 +02:00
//QString grayBandName() const; //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Accessor for green band name mapping */
2012-06-22 17:47:37 +02:00
//QString greenBandName() const; //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Accessor for mHasPyramids (READ ONLY) */
2012-08-26 20:16:51 -03:00
// bool hasPyramids();
2008-11-05 22:44:50 +00:00
/** \brief Accessor for mUserDefinedGrayMinimumMaximum */
bool hasUserDefinedGrayMinimumMaximum() const;
/** \brief Accessor for mUserDefinedRGBMinimumMaximum */
bool hasUserDefinedRGBMinimumMaximum() const;
/** \brief Accessor that returns the height of the (unclipped) raster */
int height();
2008-01-11 06:38:10 +00:00
/** \brief Is the NoDataValue Valid */
2008-11-05 22:44:50 +00:00
bool isNoDataValueValid() const;
/** \brief Accessor for mGrayMinimumMaximumEstimated */
2012-06-22 17:47:37 +02:00
//bool isGrayMinimumMaximumEstimated() const; //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Accessor for mRGBMinimumMaximumEstimated */
2012-06-22 17:47:37 +02:00
//bool isRGBMinimumMaximumEstimated() const; //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Accessor that returns the NO_DATA entry for this raster */
double noDataValue( bool* isValid = 0 );
/** \brief Returns a pointer to the transparency object */
2012-06-22 17:47:37 +02:00
//QgsRasterTransparency* rasterTransparency(); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Accessor for raster shader */
2012-06-22 17:47:37 +02:00
//QgsRasterShader* rasterShader(); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Accessor for raster layer type (which is a read only property) */
LayerType rasterType();
/** \brief Accessor for red band name (allows alternate mappings e.g. map blue as red color) */
2012-06-22 17:47:37 +02:00
//QString redBandName(); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** [ data provider interface ] Set the data provider */
2012-06-14 11:40:07 +02:00
void setDataProvider( const QString & provider );
2008-11-05 22:44:50 +00:00
/** \brief Mutator for drawing style */
void setDrawingStyle( const DrawingStyle & theDrawingStyle );
/** \brief Mutator for mGrayMinimumMaximumEstimated */
2012-06-22 17:47:37 +02:00
//void setGrayMinimumMaximumEstimated( bool theBool ); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Mutator for mRGBMinimumMaximumEstimated */
2012-06-22 17:47:37 +02:00
//void setRGBMinimumMaximumEstimated( bool theBool ); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Mutator to alter the number of standard deviations that should be plotted */
2012-06-22 17:47:37 +02:00
//void setStandardDeviations( double theStdDevsToPlot ); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Mutator for mUserDefinedGrayMinimumMaximum */
2012-06-22 17:47:37 +02:00
//void setUserDefinedGrayMinimumMaximum( bool theBool ); //removed with raster redesign
2008-11-05 22:44:50 +00:00
/** \brief Mutator for mUserDefinedRGBMinimumMaximum */
2012-06-22 17:47:37 +02:00
//void setUserDefinedRGBMinimumMaximum( bool theBool ); //removed with raster redesign
2008-11-05 22:44:50 +00:00
2012-05-01 23:09:29 +02:00
/**Set raster renderer. Takes ownership of the renderer object*/
2012-09-12 23:15:45 +02:00
void setRenderer( QgsRasterRenderer* renderer /Transfer/ );
2012-05-01 23:09:29 +02:00
QgsRasterRenderer* renderer();
2008-11-05 22:44:50 +00:00
/** \brief Accessor to find out how many standard deviations are being plotted */
2008-11-06 15:16:08 +00:00
double standardDeviations() const;
2008-11-05 22:44:50 +00:00
/** \brief Accessor for transparent band name mapping */
2012-06-22 17:47:37 +02:00
//QString transparentBandName() const; //removed with raster redesign
2008-11-05 22:44:50 +00:00
2012-09-12 23:15:45 +02:00
/** \brief [ data provider interface ] Does this layer use a provider for setting/retrieving data?
2011-09-15 11:47:10 +02:00
* @deprecated in 2.0
*/
bool usesProvider() /Deprecated/;
2008-11-05 22:44:50 +00:00
/** \brief Accessor that returns the width of the (unclipped) raster */
int width();
2007-01-09 02:39:15 +00:00
//
2008-11-05 22:44:50 +00:00
// Non Static methods
2007-01-09 02:39:15 +00:00
//
/** \brief Get the number of bands in this layer */
2008-11-05 22:44:50 +00:00
unsigned int bandCount();
/** \brief Get the name of a band given its number */
const QString bandName( int theBandNoInt );
/** \brief Get the number of a band given its name. The name is the rewritten name set
2007-01-09 02:39:15 +00:00
* up in the constructor, and will not necessarily be the same as the name retrieved directly from gdal!
* If no matching band is found zero will be returned! */
2008-11-05 22:44:50 +00:00
int bandNumber( const QString & theBandName );
2008-01-11 06:38:10 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Accessor for ths raster layers pyramid list. A pyramid list defines the
* POTENTIAL pyramids that can be in a raster. To know which of the pyramid layers
* ACTUALLY exists you need to look at the existsFlag member in each struct stored in the
* list.
*/
2012-08-26 20:16:51 -03:00
// RasterPyramidList buildPyramidList();
2008-01-11 06:38:10 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Accessor for color shader algorithm */
QString colorShadingAlgorithmAsString() const;
2008-01-11 06:38:10 +00:00
2008-05-06 03:21:12 +00:00
/** \brief Wrapper for GDALComputeRasterMinMax with the estimate option */
2010-08-06 12:37:49 +00:00
// (would need MethodCode directive) void computeMinimumMaximumEstimates( int theBand, double* theMinMax );
2008-05-06 03:21:12 +00:00
/** \brief Wrapper for GDALComputeRasterMinMax with the estimate option */
2010-08-06 12:37:49 +00:00
// (would need MethodCode directive) void computeMinimumMaximumEstimates( QString theBand, double* theMinMax );
2008-05-06 03:21:12 +00:00
2010-08-06 12:37:49 +00:00
/** \brief Wrapper for GDALComputeRasterMinMax with the estimate option
\note added in v1.6 */
void computeMinimumMaximumEstimates( int theBand, double& theMin /Out/, double& theMax /Out/ );
2012-09-12 23:15:45 +02:00
2009-11-08 14:20:57 +00:00
/** \brief Compute the actual minimum maximum pixel values based on the current (last) display extent */
2010-08-06 12:37:49 +00:00
// (would need MethodCode directive) void computeMinimumMaximumFromLastExtent( int theBand, double* theMinMax );
2009-11-08 14:20:57 +00:00
/** \brief Compute the actual minimum maximum pixel values based on the current (last) display extent */
2010-08-06 12:37:49 +00:00
// (would need MethodCode directive) void computeMinimumMaximumFromLastExtent( QString theBand, double* theMinMax );
2012-09-12 23:15:45 +02:00
/** \brief Compute the actual minimum maximum pixel values based on the current (last) display extent
2010-08-06 12:37:49 +00:00
\note added in v1.6 */
void computeMinimumMaximumFromLastExtent( int theBand, double& theMin /Out/, double& theMax /Out/ );
2009-11-08 14:20:57 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Get a pointer to the contrast enhancement for the selected band */
QgsContrastEnhancement* contrastEnhancement( unsigned int theBand );
2008-01-11 06:38:10 +00:00
2008-11-05 22:44:50 +00:00
/**Copies the symbology settings from another layer. Returns true in case of success*/
bool copySymbologySettings( const QgsMapLayer& theOther );
/** \brief Get a pointer to the color table */
//QList<QgsColorRampShader::ColorRampItem>* colorTable( int theBandNoInt );
/** Returns the data provider */
QgsRasterDataProvider* dataProvider();
/** Returns the data provider in a const-correct manner */
//const QgsRasterDataProvider* dataProvider() const;
2010-09-20 11:27:12 +00:00
/**Synchronises with changes in the datasource
@note added in version 1.6*/
virtual void reload();
2008-11-05 22:44:50 +00:00
/** \brief This is called when the view on the raster layer needs to be redrawn */
bool draw( QgsRenderContext& rendererContext );
/** \brief This is an overloaded version of the draw() function that is called by both draw() and thumbnailAsPixmap */
void draw( QPainter * theQPainter,
QgsRasterViewPort * myRasterViewPort,
const QgsMapToPixel* theQgsMapToPixel = 0 );
/** \brief Returns a string representation of drawing style
2007-01-09 02:39:15 +00:00
*
2009-12-23 16:14:24 +00:00
* Implemented mainly for serialisation / deserialisation of settings to xml.
2008-11-05 22:44:50 +00:00
* NOTE: May be deprecated in the future!. DrawingStyle drawingStyle() instead.
2007-01-09 02:39:15 +00:00
* */
2008-11-05 22:44:50 +00:00
QString drawingStyleAsString() const;
/** \brief Checks if symbology is the same as another layers */
bool hasCompatibleSymbology( const QgsMapLayer& theOther ) const;
/** \brief Identify raster value(s) found on the point position */
bool identify( const QgsPoint & point, QMap<QString, QString>& results /Out/ );
/** \brief Identify arbitrary details from the WMS server found on the point position */
QString identifyAsText( const QgsPoint & point );
2010-05-11 21:08:45 +00:00
/** \brief Identify arbitrary details from the WMS server found on the point position
* @added in 1.5
*/
QString identifyAsHtml( const QgsPoint & point );
2008-11-05 22:44:50 +00:00
/** \brief Currently returns always false */
bool isEditable() const;
/** \brief [ data provider interface ] If an operation returns 0 (e.g. draw()), this function returns the text of the error associated with the failure */
QString lastError();
/** \brief [ data provider interface ] If an operation returns 0 (e.g. draw()), this function returns the text of the error associated with the failure */
QString lastErrorTitle();
/** \brief Get a legend image for this layer */
QPixmap legendAsPixmap();
/** \brief Overloaded version of above function that can print layer name onto legend */
//QPixmap legendAsPixmap( bool );
/** \brief Use this method when you want an annotated legend suitable for print output etc */
//QPixmap legendAsPixmap( int theLabelCount );
/** \brief Accessor for maximum value user for contrast enhancement */
double maximumValue( unsigned int theBand );
/** \brief Accessor for maximum value user for contrast enhancement */
double maximumValue( QString theBand );
/** \brief Obtain GDAL Metadata for this layer */
QString metadata();
/** \brief Accessor for minimum value user for contrast enhancement */
double minimumValue( unsigned int theBand );
/** \brief Accessor for minimum value user for contrast enhancement */
double minimumValue( QString theBand );
/** \brief Get an 100x100 pixmap of the color palette. If the layer has no palette a white pixmap will be returned */
QPixmap paletteAsPixmap( int theBand = 1 );
2012-09-12 23:15:45 +02:00
/** \brief [ data provider interface ] Which provider is being used for this Raster Layer?
2011-09-15 11:47:10 +02:00
* @note added in 2.0
*/
QString providerType() const;
2012-09-12 23:15:45 +02:00
/** \brief [ data provider interface ] Which provider is being used for this Raster Layer?
2011-09-15 11:47:10 +02:00
* @deprecated in 2.0
*/
QString providerKey() const /Deprecated/;
2008-11-05 22:44:50 +00:00
/** \brief Returns the number of raster units per each raster pixel. In a world file, this is normally the first row (without the sign) */
double rasterUnitsPerPixel();
/** \brief Read color table from GDAL raster band */
//bool readColorTable( int theBandNumber, QList<QgsColorRampShader::ColorRampItem>* theList );
/** \brief Simple reset function that set the noDataValue back to the value stored in the first raster band */
void resetNoDataValue();
/** \brief Mutator for blue band name mapping */
void setBlueBandName( const QString & theBandName );
/** \brief Mutator for color shader algorithm */
void setColorShadingAlgorithm( QgsRasterLayer::ColorShadingAlgorithm theShaderAlgorithm );
/** \brief Mutator for color shader algorithm */
void setColorShadingAlgorithm( QString theShaderAlgorithm );
/** \brief Mutator for contrast enhancement algorithm */
void setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm,
bool theGenerateLookupTableFlag = true );
/** \brief Mutator for contrast enhancement algorithm */
void setContrastEnhancementAlgorithm( QString theAlgorithm, bool theGenerateLookupTableFlag = true );
/** \brief Mutator for contrast enhancement function */
void setContrastEnhancementFunction( QgsContrastEnhancementFunction* theFunction );
/** \brief Overloaded version of the above function for convenience when restoring from xml */
void setDrawingStyle( const QString & theDrawingStyleQString );
/** \brief Mutator for gray band name mapping */
void setGrayBandName( const QString & theBandName );
/** \brief Mutator for green band name mapping */
void setGreenBandName( const QString & theBandName );
/** \brief Mutator for setting the maximum value for contrast enhancement */
void setMaximumValue( unsigned int theBand, double theValue, bool theGenerateLookupTableFlag = true );
/** \brief Mutator for setting the maximum value for contrast enhancement */
void setMaximumValue( QString theBand, double theValue, bool theGenerateLookupTableFlag = true );
2010-08-09 01:20:59 +00:00
/** \brief Sets the minimum and maximum values for the band(s) currently being displayed using the only pixel values from the last/current extent */
void setMinimumMaximumUsingLastExtent();
2008-11-05 22:44:50 +00:00
/** \brief Mutator for setting the minimum value for contrast enhancement */
void setMinimumValue( unsigned int theBand, double theValue, bool theGenerateLookupTableFlag = true );
/** \brief Mutator for setting the minimum value for contrast enhancement */
void setMinimumValue( QString theBand, double theValue, bool theGenerateLookupTableFlag = true );
/** \brief Mutator that allows the NO_DATA entry for this raster to be overridden */
void setNoDataValue( double theNoData );
2010-08-07 14:28:20 +00:00
/** \brief Set the raster shader function to a user defined function
\note ownership of the shader function is transfered to raster shader */
void setRasterShaderFunction( QgsRasterShaderFunction* theFunction /Transfer/ );
2008-11-05 22:44:50 +00:00
/** \brief Mutator for red band name (allows alternate mappings e.g. map blue as red color) */
void setRedBandName( const QString & theBandName );
/** \brief Mutator for transparent band name mapping */
void setTransparentBandName( const QString & theBandName );
/** \brief [ data provider interface ] A wrapper function to emit a progress update signal */
void showProgress( int theValue );
/** \brief Returns the sublayers of this layer - Useful for providers that manage their own layers, such as WMS */
QStringList subLayers() const;
/** \brief Draws a thumbnail of the rasterlayer into the supplied pixmap pointer */
void thumbnailAsPixmap( QPixmap * theQPixmap );
/** \brief Emit a signal asking for a repaint. (inherited from maplayer) */
void triggerRepaint();
2007-01-09 02:39:15 +00:00
//
2008-11-05 22:44:50 +00:00
// Virtural methods
2007-01-09 02:39:15 +00:00
//
/**
* Reorders the *previously selected* sublayers of this layer from bottom to top
*
* (Useful for providers that manage their own layers, such as WMS)
*
*/
2008-11-05 22:44:50 +00:00
virtual void setLayerOrder( const QStringList & layers );
2007-01-09 02:39:15 +00:00
/**
* Set the visibility of the given sublayer name
*/
2008-11-05 22:44:50 +00:00
virtual void setSubLayerVisibility( const QString & name, bool vis );
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
public slots:
/** \brief Create GDAL pyramid overviews */
2012-08-26 20:16:51 -03:00
// QString buildPyramids( const RasterPyramidList &,
// const QString & theResamplingMethod = "NEAREST",
// bool theTryInternalFlag = false );
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
void showStatusMessage( const QString & theMessage );
2008-01-11 06:38:10 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Propagate progress updates from GDAL up to the parent app */
void updateProgress( int, int );
2008-01-11 06:38:10 +00:00
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
signals:
/** \brief Signal for notifying listeners of long running processes */
void progressUpdate( int theValue );
2007-01-09 02:39:15 +00:00
2008-10-06 18:50:42 +00:00
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
protected:
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Read the symbology for the current layer from the Dom node supplied */
bool readSymbology( const QDomNode& node, QString& errorMessage );
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Reads layer specific state from project file Dom node */
bool readXml( QDomNode & layer_node );
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Write the symbology for the layer into the docment provided */
2008-12-15 13:15:47 +00:00
bool writeSymbology( QDomNode&, QDomDocument& doc, QString& errorMessage ) const;
2007-01-09 02:39:15 +00:00
2008-11-05 22:44:50 +00:00
/** \brief Write layer specific state to project file Dom node */
bool writeXml( QDomNode & layer_node, QDomDocument & doc );
2007-01-09 02:39:15 +00:00
};