@@ -2237,11 +2237,21 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
2237
2237
Q_UNUSED ( errorMessage );
2238
2238
QDomElement rasterRendererElem;
2239
2239
2240
- // rasterlayerproperties element there -> old format
2241
- if ( !layer_node.firstChildElement ( " rasterproperties" ).isNull () )
2240
+ // pipe element was introduced in the end of 1.9 development when there were
2241
+ // already many project files in use so we support 1.9 backward compatibility
2242
+ // even it was never officialy released -> use pipe element if present, otherwise
2243
+ // use layer node
2244
+ QDomNode pipeNode = layer_node.firstChildElement ( " pipe" );
2245
+ if ( pipeNode.isNull () ) // old project
2246
+ {
2247
+ pipeNode = layer_node;
2248
+ }
2249
+
2250
+ // rasterlayerproperties element there -> old format (1.8 and early 1.9)
2251
+ if ( !pipeNode.firstChildElement ( " rasterproperties" ).isNull () )
2242
2252
{
2243
2253
// copy node because layer_node is const
2244
- QDomNode layerNodeCopy = layer_node .cloneNode ();
2254
+ QDomNode layerNodeCopy = pipeNode .cloneNode ();
2245
2255
QDomDocument doc = layerNodeCopy.ownerDocument ();
2246
2256
QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement ( " rasterproperties" );
2247
2257
QgsProjectFileTransform::convertRasterProperties ( doc, layerNodeCopy, rasterPropertiesElem,
@@ -2251,7 +2261,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
2251
2261
}
2252
2262
else
2253
2263
{
2254
- rasterRendererElem = layer_node .firstChildElement ( " rasterrenderer" );
2264
+ rasterRendererElem = pipeNode .firstChildElement ( " rasterrenderer" );
2255
2265
}
2256
2266
2257
2267
if ( !rasterRendererElem.isNull () )
@@ -2270,7 +2280,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
2270
2280
mPipe .set ( brightnessFilter );
2271
2281
2272
2282
// brightness coefficient
2273
- QDomElement brightnessElem = layer_node .firstChildElement ( " brightnesscontrast" );
2283
+ QDomElement brightnessElem = pipeNode .firstChildElement ( " brightnesscontrast" );
2274
2284
if ( !brightnessElem.isNull () )
2275
2285
{
2276
2286
brightnessFilter->readXML ( brightnessElem );
@@ -2281,7 +2291,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
2281
2291
mPipe .set ( hueSaturationFilter );
2282
2292
2283
2293
// saturation coefficient
2284
- QDomElement hueSaturationElem = layer_node .firstChildElement ( " huesaturation" );
2294
+ QDomElement hueSaturationElem = pipeNode .firstChildElement ( " huesaturation" );
2285
2295
if ( !hueSaturationElem.isNull () )
2286
2296
{
2287
2297
hueSaturationFilter->readXML ( hueSaturationElem );
@@ -2292,7 +2302,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
2292
2302
mPipe .set ( resampleFilter );
2293
2303
2294
2304
// max oversampling
2295
- QDomElement resampleElem = layer_node .firstChildElement ( " rasterresampler" );
2305
+ QDomElement resampleElem = pipeNode .firstChildElement ( " rasterresampler" );
2296
2306
if ( !resampleElem.isNull () )
2297
2307
{
2298
2308
resampleFilter->readXML ( resampleElem );
@@ -2472,6 +2482,20 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
2472
2482
Q_UNUSED ( errorMessage );
2473
2483
QDomElement layerElem = layer_node.toElement ();
2474
2484
2485
+ // Store pipe members (except provider) into pipe element, in future, it will be
2486
+ // possible to add custom filters into the pipe
2487
+ QDomElement pipeElement = document.createElement ( " pipe" );
2488
+
2489
+ for ( int i = 1 ; i < mPipe .size (); i++ )
2490
+ {
2491
+ QgsRasterInterface * interface = mPipe .at ( i );
2492
+ if ( !interface ) continue ;
2493
+ interface->writeXML ( document, pipeElement );
2494
+ }
2495
+
2496
+ layer_node.appendChild ( pipeElement );
2497
+
2498
+ #if 0
2475
2499
QgsRasterRenderer *renderer = mPipe.renderer();
2476
2500
if ( renderer )
2477
2501
{
@@ -2498,6 +2522,7 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
2498
2522
QDomElement layerElem = layer_node.toElement();
2499
2523
resampleFilter->writeXML( document, layerElem );
2500
2524
}
2525
+ #endif
2501
2526
2502
2527
// add blend mode node
2503
2528
QDomElement blendModeElement = document.createElement ( " blendMode" );
0 commit comments