raster filters moved to pipe node in project file to allow custom filters in future

This commit is contained in:
Radim Blazek 2013-04-19 16:59:10 +02:00
parent d4d26257b7
commit 1f872ce69d
8 changed files with 39 additions and 14 deletions

View File

@ -32,7 +32,7 @@ class QgsRasterResampleFilter : QgsRasterInterface
void setMaxOversampling( double os ); void setMaxOversampling( double os );
double maxOversampling() const; double maxOversampling() const;
void writeXML( QDomDocument& doc, QDomElement& parentElem ); void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
/**Sets base class members from xml. Usually called from create() methods of subclasses*/ /**Sets base class members from xml. Usually called from create() methods of subclasses*/
void readXML( const QDomElement& resamplefilterElem ); void readXML( const QDomElement& resamplefilterElem );

View File

@ -191,7 +191,7 @@ int QgsBrightnessContrastFilter::adjustColorComponent( int colorComponent, int a
} }
} }
void QgsBrightnessContrastFilter::writeXML( QDomDocument& doc, QDomElement& parentElem ) void QgsBrightnessContrastFilter::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
{ {
if ( parentElem.isNull() ) if ( parentElem.isNull() )
{ {

View File

@ -48,7 +48,7 @@ class CORE_EXPORT QgsBrightnessContrastFilter : public QgsRasterInterface
void setContrast( int contrast ) { mContrast = qBound( -100, contrast, 100 ); } void setContrast( int contrast ) { mContrast = qBound( -100, contrast, 100 ); }
int contrast() const { return mContrast; } int contrast() const { return mContrast; }
void writeXML( QDomDocument& doc, QDomElement& parentElem ); void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
/**Sets base class members from xml. Usually called from create() methods of subclasses*/ /**Sets base class members from xml. Usually called from create() methods of subclasses*/
void readXML( const QDomElement& filterElem ); void readXML( const QDomElement& filterElem );

View File

@ -333,7 +333,7 @@ void QgsHueSaturationFilter::setColorizeColor( QColor colorizeColor )
mColorizeS = mColorizeColor.saturation(); mColorizeS = mColorizeColor.saturation();
} }
void QgsHueSaturationFilter::writeXML( QDomDocument& doc, QDomElement& parentElem ) void QgsHueSaturationFilter::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
{ {
if ( parentElem.isNull() ) if ( parentElem.isNull() )
{ {

View File

@ -65,7 +65,7 @@ class CORE_EXPORT QgsHueSaturationFilter : public QgsRasterInterface
void setColorizeStrength( int colorizeStrength ) { mColorizeStrength = colorizeStrength; } void setColorizeStrength( int colorizeStrength ) { mColorizeStrength = colorizeStrength; }
int colorizeStrength() const { return mColorizeStrength; } int colorizeStrength() const { return mColorizeStrength; }
void writeXML( QDomDocument& doc, QDomElement& parentElem ); void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
/**Sets base class members from xml. Usually called from create() methods of subclasses*/ /**Sets base class members from xml. Usually called from create() methods of subclasses*/
void readXML( const QDomElement& filterElem ); void readXML( const QDomElement& filterElem );

View File

@ -2237,11 +2237,21 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
Q_UNUSED( errorMessage ); Q_UNUSED( errorMessage );
QDomElement rasterRendererElem; QDomElement rasterRendererElem;
//rasterlayerproperties element there -> old format // pipe element was introduced in the end of 1.9 development when there were
if ( !layer_node.firstChildElement( "rasterproperties" ).isNull() ) // already many project files in use so we support 1.9 backward compatibility
// even it was never officialy released -> use pipe element if present, otherwise
// use layer node
QDomNode pipeNode = layer_node.firstChildElement( "pipe" );
if ( pipeNode.isNull() ) // old project
{
pipeNode = layer_node;
}
//rasterlayerproperties element there -> old format (1.8 and early 1.9)
if ( !pipeNode.firstChildElement( "rasterproperties" ).isNull() )
{ {
//copy node because layer_node is const //copy node because layer_node is const
QDomNode layerNodeCopy = layer_node.cloneNode(); QDomNode layerNodeCopy = pipeNode.cloneNode();
QDomDocument doc = layerNodeCopy.ownerDocument(); QDomDocument doc = layerNodeCopy.ownerDocument();
QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement( "rasterproperties" ); QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement( "rasterproperties" );
QgsProjectFileTransform::convertRasterProperties( doc, layerNodeCopy, rasterPropertiesElem, QgsProjectFileTransform::convertRasterProperties( doc, layerNodeCopy, rasterPropertiesElem,
@ -2251,7 +2261,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
} }
else else
{ {
rasterRendererElem = layer_node.firstChildElement( "rasterrenderer" ); rasterRendererElem = pipeNode.firstChildElement( "rasterrenderer" );
} }
if ( !rasterRendererElem.isNull() ) if ( !rasterRendererElem.isNull() )
@ -2270,7 +2280,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
mPipe.set( brightnessFilter ); mPipe.set( brightnessFilter );
//brightness coefficient //brightness coefficient
QDomElement brightnessElem = layer_node.firstChildElement( "brightnesscontrast" ); QDomElement brightnessElem = pipeNode.firstChildElement( "brightnesscontrast" );
if ( !brightnessElem.isNull() ) if ( !brightnessElem.isNull() )
{ {
brightnessFilter->readXML( brightnessElem ); brightnessFilter->readXML( brightnessElem );
@ -2281,7 +2291,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
mPipe.set( hueSaturationFilter ); mPipe.set( hueSaturationFilter );
//saturation coefficient //saturation coefficient
QDomElement hueSaturationElem = layer_node.firstChildElement( "huesaturation" ); QDomElement hueSaturationElem = pipeNode.firstChildElement( "huesaturation" );
if ( !hueSaturationElem.isNull() ) if ( !hueSaturationElem.isNull() )
{ {
hueSaturationFilter->readXML( hueSaturationElem ); hueSaturationFilter->readXML( hueSaturationElem );
@ -2292,7 +2302,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
mPipe.set( resampleFilter ); mPipe.set( resampleFilter );
//max oversampling //max oversampling
QDomElement resampleElem = layer_node.firstChildElement( "rasterresampler" ); QDomElement resampleElem = pipeNode.firstChildElement( "rasterresampler" );
if ( !resampleElem.isNull() ) if ( !resampleElem.isNull() )
{ {
resampleFilter->readXML( resampleElem ); resampleFilter->readXML( resampleElem );
@ -2472,6 +2482,20 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
Q_UNUSED( errorMessage ); Q_UNUSED( errorMessage );
QDomElement layerElem = layer_node.toElement(); QDomElement layerElem = layer_node.toElement();
// Store pipe members (except provider) into pipe element, in future, it will be
// possible to add custom filters into the pipe
QDomElement pipeElement = document.createElement( "pipe" );
for ( int i = 1; i < mPipe.size(); i++ )
{
QgsRasterInterface * interface = mPipe.at( i );
if ( !interface ) continue;
interface->writeXML( document, pipeElement );
}
layer_node.appendChild( pipeElement );
#if 0
QgsRasterRenderer *renderer = mPipe.renderer(); QgsRasterRenderer *renderer = mPipe.renderer();
if ( renderer ) if ( renderer )
{ {
@ -2498,6 +2522,7 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
QDomElement layerElem = layer_node.toElement(); QDomElement layerElem = layer_node.toElement();
resampleFilter->writeXML( document, layerElem ); resampleFilter->writeXML( document, layerElem );
} }
#endif
// add blend mode node // add blend mode node
QDomElement blendModeElement = document.createElement( "blendMode" ); QDomElement blendModeElement = document.createElement( "blendMode" );

View File

@ -220,7 +220,7 @@ QgsRasterBlock * QgsRasterResampleFilter::block( int bandNo, QgsRectangle const
return outputBlock; // No resampling return outputBlock; // No resampling
} }
void QgsRasterResampleFilter::writeXML( QDomDocument& doc, QDomElement& parentElem ) void QgsRasterResampleFilter::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
{ {
if ( parentElem.isNull() ) if ( parentElem.isNull() )
{ {

View File

@ -55,7 +55,7 @@ class CORE_EXPORT QgsRasterResampleFilter : public QgsRasterInterface
void setMaxOversampling( double os ) { mMaxOversampling = os; } void setMaxOversampling( double os ) { mMaxOversampling = os; }
double maxOversampling() const { return mMaxOversampling; } double maxOversampling() const { return mMaxOversampling; }
void writeXML( QDomDocument& doc, QDomElement& parentElem ); void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
/**Sets base class members from xml. Usually called from create() methods of subclasses*/ /**Sets base class members from xml. Usually called from create() methods of subclasses*/
void readXML( const QDomElement& filterElem ); void readXML( const QDomElement& filterElem );