diff --git a/python/core/raster/qgsrasterlayer.sip b/python/core/raster/qgsrasterlayer.sip index 679488460a4..f897e3bce3d 100644 --- a/python/core/raster/qgsrasterlayer.sip +++ b/python/core/raster/qgsrasterlayer.sip @@ -113,7 +113,7 @@ class QgsRasterLayer : QgsMapLayer void setDataProvider( const QString & provider ); /** \brief Accessor for drawing style */ - DrawingStyle drawingStyle(); + //DrawingStyle drawingStyle(); /** \brief Accessor that returns the width of the (unclipped) raster */ int width(); @@ -125,7 +125,7 @@ class QgsRasterLayer : QgsMapLayer LayerType rasterType(); /** \brief Mutator for drawing style */ - void setDrawingStyle( const DrawingStyle & theDrawingStyle ); + //void setDrawingStyle( const DrawingStyle & theDrawingStyle ); /**Set raster renderer. Takes ownership of the renderer object*/ void setRenderer( QgsRasterRenderer* theRenderer /Transfer/ ); diff --git a/src/app/qgsrasterlayerproperties.cpp b/src/app/qgsrasterlayerproperties.cpp index 15dd64a16ff..817a8ca0524 100644 --- a/src/app/qgsrasterlayerproperties.cpp +++ b/src/app/qgsrasterlayerproperties.cpp @@ -32,6 +32,7 @@ #include "qgsmaprenderer.h" #include "qgsmaptoolemitpoint.h" #include "qgsmaptopixel.h" +#include "qgsmultibandcolorrenderer.h" #include "qgsmultibandcolorrendererwidget.h" #include "qgspalettedrendererwidget.h" #include "qgsproject.h" @@ -1206,7 +1207,7 @@ void QgsRasterLayerProperties::on_pbnExportTransparentPixelValues_clicked() { QTextStream myOutputStream( &myOutputFile ); myOutputStream << "# " << tr( "QGIS Generated Transparent Pixel Value Export File" ) << "\n"; - if ( /*rbtnThreeBand->isChecked() &&*/ QgsRasterLayer::MultiBandColor == mRasterLayer->drawingStyle() ) + if ( rasterIsMultiBandColor() ) { myOutputStream << "#\n#\n# " << tr( "Red" ) << "\t" << tr( "Green" ) << "\t" << tr( "Blue" ) << "\t" << tr( "Percent Transparent" ); for ( int myTableRunner = 0; myTableRunner < tableTransparency->rowCount(); myTableRunner++ ) @@ -1219,17 +1220,7 @@ void QgsRasterLayerProperties::on_pbnExportTransparentPixelValues_clicked() } else { - if ( QgsRasterLayer::PalettedColor != mRasterLayer->drawingStyle() && - QgsRasterLayer::PalettedSingleBandGray != mRasterLayer->drawingStyle() && - QgsRasterLayer::PalettedSingleBandPseudoColor != mRasterLayer->drawingStyle() && - QgsRasterLayer::PalettedMultiBandColor != mRasterLayer->drawingStyle() ) - { - myOutputStream << "#\n#\n# " << tr( "Gray" ) << "\t" << tr( "Percent Transparent" ); - } - else - { - myOutputStream << "#\n#\n# " << tr( "Indexed Value" ) << "\t" << tr( "Percent Transparent" ); - } + myOutputStream << "#\n#\n# " << tr( "Value" ) << "\t" << tr( "Percent Transparent" ); for ( int myTableRunner = 0; myTableRunner < tableTransparency->rowCount(); myTableRunner++ ) { @@ -1331,7 +1322,7 @@ void QgsRasterLayerProperties::on_pbnImportTransparentPixelValues_clicked() { QTextStream myInputStream( &myInputFile ); QString myInputLine; - if ( /*rbtnThreeBand->isChecked() &&*/ QgsRasterLayer::MultiBandColor == mRasterLayer->drawingStyle() ) + if ( rasterIsMultiBandColor() ) { for ( int myTableRunner = tableTransparency->rowCount() - 1; myTableRunner >= 0; myTableRunner-- ) { @@ -1714,3 +1705,9 @@ void QgsRasterLayerProperties::on_mResetColorRenderingBtn_clicked() mColorizeCheck->setChecked( false ); sliderColorizeStrength->setValue( 100 ); } + +bool QgsRasterLayerProperties::rasterIsMultiBandColor() +{ + return mRasterLayer && dynamic_cast( mRasterLayer->renderer() ) != 0; +} + diff --git a/src/app/qgsrasterlayerproperties.h b/src/app/qgsrasterlayerproperties.h index fcb6a778a2c..9c3929f7c95 100644 --- a/src/app/qgsrasterlayerproperties.h +++ b/src/app/qgsrasterlayerproperties.h @@ -155,6 +155,8 @@ class QgsRasterLayerProperties : public QgsOptionsDialogBase, private Ui::QgsRas QgsRasterRendererWidget* mRendererWidget; + bool rasterIsMultiBandColor(); + void setupTransparencyTable( int nBands ); /** \brief Clear the current transparency table and populate the table with the correct types for current drawing mode and data type*/ diff --git a/src/core/raster/qgsrasterlayer.cpp b/src/core/raster/qgsrasterlayer.cpp index 1114c45c3c8..bc7d3748545 100644 --- a/src/core/raster/qgsrasterlayer.cpp +++ b/src/core/raster/qgsrasterlayer.cpp @@ -788,7 +788,7 @@ void QgsRasterLayer::init() { mRasterType = QgsRasterLayer::GrayOrUndefined; - setDrawingStyle( QgsRasterLayer::UndefinedDrawingStyle ); + setRendererForDrawingStyle( QgsRasterLayer::UndefinedDrawingStyle ); //Initialize the last view port structure, should really be a class mLastViewPort.mWidth = 0; @@ -895,16 +895,16 @@ void QgsRasterLayer::setDataProvider( QString const & provider ) QgsDebugMsg( "mRasterType = " + QString::number( mRasterType ) ); if ( mRasterType == ColorLayer ) { - QgsDebugMsg( "Setting mDrawingStyle to SingleBandColorDataStyle " + QString::number( SingleBandColorDataStyle ) ); - setDrawingStyle( SingleBandColorDataStyle ); + QgsDebugMsg( "Setting drawing style to SingleBandColorDataStyle " + QString::number( SingleBandColorDataStyle ) ); + setRendererForDrawingStyle( SingleBandColorDataStyle ); } else if ( mRasterType == Palette && mDataProvider->colorInterpretation( 1 ) == QgsRaster::PaletteIndex ) { - setDrawingStyle( PalettedColor ); //sensible default + setRendererForDrawingStyle( PalettedColor ); //sensible default } else if ( mRasterType == Palette && mDataProvider->colorInterpretation( 1 ) == QgsRaster::ContinuousPalette ) { - setDrawingStyle( SingleBandPseudoColor ); + setRendererForDrawingStyle( SingleBandPseudoColor ); // Load color table QList colorTable = mDataProvider->colorTable( 1 ); QgsSingleBandPseudoColorRenderer* r = dynamic_cast( renderer() ); @@ -921,11 +921,11 @@ void QgsRasterLayer::setDataProvider( QString const & provider ) } else if ( mRasterType == Multiband ) { - setDrawingStyle( MultiBandColor ); //sensible default + setRendererForDrawingStyle( MultiBandColor ); //sensible default } else //GrayOrUndefined { - setDrawingStyle( SingleBandGray ); //sensible default + setRendererForDrawingStyle( SingleBandGray ); //sensible default } // Auto set alpha band @@ -1092,19 +1092,20 @@ void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnh void QgsRasterLayer::setDefaultContrastEnhancement() { - QgsDebugMsg( QString( "mDrawingStyle = %1" ).arg( mDrawingStyle ) ); + QgsDebugMsg( "Entered" ); QSettings mySettings; QString myKey; QString myDefault; - if ( mDrawingStyle == SingleBandGray || mDrawingStyle == MultiBandSingleBandGray ) + // TODO: we should not test renderer class here, move it somehow to renderers + if ( dynamic_cast( renderer() ) ) { myKey = "singleBand"; myDefault = "StretchToMinimumMaximum"; } - else if ( mDrawingStyle == MultiBandColor ) + else if ( dynamic_cast( renderer() ) ) { if ( QgsRasterBlock::typeSize( dataProvider()->srcDataType( 1 ) ) == 1 ) { @@ -1148,52 +1149,54 @@ void QgsRasterLayer::setDefaultContrastEnhancement() void QgsRasterLayer::setDrawingStyle( QString const & theDrawingStyleQString ) { QgsDebugMsg( "DrawingStyle = " + theDrawingStyleQString ); + DrawingStyle drawingStyle; if ( theDrawingStyleQString == "SingleBandGray" )//no need to tr() this its not shown in ui { - mDrawingStyle = SingleBandGray; + drawingStyle = SingleBandGray; } else if ( theDrawingStyleQString == "SingleBandPseudoColor" )//no need to tr() this its not shown in ui { - mDrawingStyle = SingleBandPseudoColor; + drawingStyle = SingleBandPseudoColor; } else if ( theDrawingStyleQString == "PalettedColor" )//no need to tr() this its not shown in ui { - mDrawingStyle = PalettedColor; + drawingStyle = PalettedColor; } else if ( theDrawingStyleQString == "PalettedSingleBandGray" )//no need to tr() this its not shown in ui { - mDrawingStyle = PalettedSingleBandGray; + drawingStyle = PalettedSingleBandGray; } else if ( theDrawingStyleQString == "PalettedSingleBandPseudoColor" )//no need to tr() this its not shown in ui { - mDrawingStyle = PalettedSingleBandPseudoColor; + drawingStyle = PalettedSingleBandPseudoColor; } else if ( theDrawingStyleQString == "PalettedMultiBandColor" )//no need to tr() this its not shown in ui { - mDrawingStyle = PalettedMultiBandColor; + drawingStyle = PalettedMultiBandColor; } else if ( theDrawingStyleQString == "MultiBandSingleBandGray" )//no need to tr() this its not shown in ui { - mDrawingStyle = MultiBandSingleBandGray; + drawingStyle = MultiBandSingleBandGray; } else if ( theDrawingStyleQString == "MultiBandSingleBandPseudoColor" )//no need to tr() this its not shown in ui { - mDrawingStyle = MultiBandSingleBandPseudoColor; + drawingStyle = MultiBandSingleBandPseudoColor; } else if ( theDrawingStyleQString == "MultiBandColor" )//no need to tr() this its not shown in ui { - mDrawingStyle = MultiBandColor; + drawingStyle = MultiBandColor; } else if ( theDrawingStyleQString == "SingleBandColorDataStyle" )//no need to tr() this its not shown in ui { - QgsDebugMsg( "Setting mDrawingStyle to SingleBandColorDataStyle " + QString::number( SingleBandColorDataStyle ) ); - mDrawingStyle = SingleBandColorDataStyle; - QgsDebugMsg( "Setted mDrawingStyle to " + QString::number( mDrawingStyle ) ); + QgsDebugMsg( "Setting drawingStyle to SingleBandColorDataStyle " + QString::number( SingleBandColorDataStyle ) ); + drawingStyle = SingleBandColorDataStyle; + QgsDebugMsg( "Setted drawingStyle to " + QString::number( drawingStyle ) ); } else { - mDrawingStyle = UndefinedDrawingStyle; + drawingStyle = UndefinedDrawingStyle; } + setRendererForDrawingStyle( drawingStyle ); } void QgsRasterLayer::setLayerOrder( QStringList const & layers ) @@ -1413,24 +1416,6 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe Raster layer project file XML of form: - \verbatim - - Wynoochee_dem - /home/mcoletti/mnt/MCOLETTIF8F9/c/Toolkit_Course/Answers/Training_Data/wynoochee_dem.img - 0 - 255 - - SingleBandGray - - 0 - Not Set - Not Set - Not Set - Undefined - - - \endverbatim - @note Called by QgsMapLayer::readXML(). */ bool QgsRasterLayer::readXml( const QDomNode& layer_node ) @@ -1505,11 +1490,9 @@ bool QgsRasterLayer::readXml( const QDomNode& layer_node ) bool res = readSymbology( layer_node, theError ); // old wms settings we need to correct - if ( res && - mProviderKey == "wms" && - mDrawingStyle == MultiBandColor ) + if ( res && mProviderKey == "wms" ) { - mDrawingStyle = SingleBandColorDataStyle; + setRendererForDrawingStyle( SingleBandColorDataStyle ); } // Check timestamp diff --git a/src/core/raster/qgsrasterlayer.h b/src/core/raster/qgsrasterlayer.h index a4c63f7c595..450aa1c56ff 100644 --- a/src/core/raster/qgsrasterlayer.h +++ b/src/core/raster/qgsrasterlayer.h @@ -260,14 +260,14 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer /** [ data provider interface ] Set the data provider */ void setDataProvider( const QString & provider ); - /** \brief Accessor for drawing style */ - DrawingStyle drawingStyle() { return mDrawingStyle; } - /** \brief Accessor for raster layer type (which is a read only property) */ LayerType rasterType() { return mRasterType; } + /** \brief Accessor for drawing style */ + //DrawingStyle drawingStyle() { return mDrawingStyle; } + /** \brief Mutator for drawing style */ - void setDrawingStyle( const DrawingStyle & theDrawingStyle ) { mDrawingStyle = theDrawingStyle; setRendererForDrawingStyle( theDrawingStyle ); } + //void setDrawingStyle( const DrawingStyle & theDrawingStyle ) { mDrawingStyle = theDrawingStyle; setRendererForDrawingStyle( theDrawingStyle ); } /**Set raster renderer. Takes ownership of the renderer object*/ void setRenderer( QgsRasterRenderer* theRenderer ); @@ -439,7 +439,7 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer /** Pointer to data provider */ QgsRasterDataProvider* mDataProvider; - DrawingStyle mDrawingStyle; + //DrawingStyle mDrawingStyle; /** [ data provider interface ]The error message associated with the last error */ QString mError; diff --git a/src/mapserver/qgsmslayerbuilder.cpp b/src/mapserver/qgsmslayerbuilder.cpp index eda1ba6e417..5bb4cce9ba0 100644 --- a/src/mapserver/qgsmslayerbuilder.cpp +++ b/src/mapserver/qgsmslayerbuilder.cpp @@ -17,6 +17,7 @@ #include "qgsmslayerbuilder.h" #include "qgsrasterlayer.h" +#include "qgsrasterrendererregistry.h" #include #include @@ -92,7 +93,8 @@ void QgsMSLayerBuilder::clearRasterSymbology( QgsRasterLayer* rl ) const { if ( rl->rasterType() == QgsRasterLayer::GrayOrUndefined ) { - rl->setDrawingStyle( QgsRasterLayer::SingleBandPseudoColor ); + //rl->setDrawingStyle( QgsRasterLayer::SingleBandPseudoColor ); + rl->setRenderer( QgsRasterRendererRegistry::instance()->defaultRendererForDrawingStyle( QgsRasterLayer::SingleBandPseudoColor, rl->dataProvider() ) ); } } } diff --git a/src/mapserver/qgssldparser.cpp b/src/mapserver/qgssldparser.cpp index 96a654d56c8..f6350cacab7 100644 --- a/src/mapserver/qgssldparser.cpp +++ b/src/mapserver/qgssldparser.cpp @@ -31,6 +31,7 @@ #include "qgsmslayercache.h" #include "qgsmsutils.h" #include "qgsrasterlayer.h" +#include "qgsrasterrendererregistry.h" #include "qgscolorrampshader.h" #include "qgscoordinatereferencesystem.h" #include "qgslabelattributes.h" @@ -1496,7 +1497,8 @@ void QgsSLDParser::clearRasterSymbology( QgsRasterLayer* rl ) const { if ( rl->rasterType() == QgsRasterLayer::GrayOrUndefined ) { - rl->setDrawingStyle( QgsRasterLayer::SingleBandPseudoColor ); + //rl->setDrawingStyle( QgsRasterLayer::SingleBandPseudoColor ); + rl->setRenderer( QgsRasterRendererRegistry::instance()->defaultRendererForDrawingStyle( QgsRasterLayer::SingleBandPseudoColor, rl->dataProvider() ) ); } } }