diff --git a/src/app/qgsrasterlayerproperties.cpp b/src/app/qgsrasterlayerproperties.cpp index 706a7cb88ba9..9b6325b765d3 100644 --- a/src/app/qgsrasterlayerproperties.cpp +++ b/src/app/qgsrasterlayerproperties.cpp @@ -325,8 +325,43 @@ void QgsRasterLayerProperties::populateTransparencyTable() return; } + tableTransparency->clear(); + + QList bandList = renderer->usesBands(); + tableTransparency->setColumnCount( bandList.size() + 1 ); + for ( int i = 0; i < bandList.size(); ++i ) + { + tableTransparency->setHorizontalHeaderItem( i, new QTableWidgetItem( QString::number( bandList.at( i ) ) ) ); + } + const QgsRasterTransparency* rasterTransparency = renderer->rasterTransparency(); + if ( !rasterTransparency ) + { + return; + } + + if ( bandList.count() == 1 ) + { + tableTransparency->setHorizontalHeaderItem( 1, new QTableWidgetItem( tr( "Percent Transparent" ) ) ); + QList pixelList = rasterTransparency->transparentSingleValuePixelList(); + for ( int i = 0; i < pixelList.size(); ++i ) + { + tableTransparency->insertRow( i ); + QTableWidgetItem* grayItem = new QTableWidgetItem( QString::number( pixelList[i].pixelValue ) ); + QTableWidgetItem* percentItem = new QTableWidgetItem( QString::number( pixelList[i].percentTransparent ) ); + tableTransparency->setItem( i, 0, grayItem ); + tableTransparency->setItem( i, 1, percentItem ); + } + } + else if ( bandList.count() == 3 ) + { + + } + + + +#if 0 //Clear existing color transparency list //NOTE: May want to just tableTransparency->clearContents() and fill back in after checking to be sure list and table are the same size QString myNumberFormatter; @@ -405,6 +440,7 @@ void QgsRasterLayerProperties::populateTransparencyTable() tableTransparency->resizeColumnsToContents(); tableTransparency->resizeRowsToContents(); +#endif //0 } void QgsRasterLayerProperties::setRendererWidget( const QString& rendererName ) diff --git a/src/core/raster/qgsmultibandcolorrenderer.cpp b/src/core/raster/qgsmultibandcolorrenderer.cpp index 58fd6a3f6cd2..c12e064af1c3 100644 --- a/src/core/raster/qgsmultibandcolorrenderer.cpp +++ b/src/core/raster/qgsmultibandcolorrenderer.cpp @@ -351,3 +351,21 @@ void QgsMultiBandColorRenderer::writeXML( QDomDocument& doc, QDomElement& parent } parentElem.appendChild( rasterRendererElem ); } + +QList QgsMultiBandColorRenderer::usesBands() const +{ + QList bandList; + if ( mRedBand != -1 ) + { + bandList << mRedBand; + } + if ( mGreenBand != -1 ) + { + bandList << mGreenBand; + } + if ( mBlueBand != -1 ) + { + bandList << mBlueBand; + } + return bandList; +} diff --git a/src/core/raster/qgsmultibandcolorrenderer.h b/src/core/raster/qgsmultibandcolorrenderer.h index bb89002e9361..2315d3e5fc53 100644 --- a/src/core/raster/qgsmultibandcolorrenderer.h +++ b/src/core/raster/qgsmultibandcolorrenderer.h @@ -57,6 +57,8 @@ class CORE_EXPORT QgsMultiBandColorRenderer: public QgsRasterRenderer void writeXML( QDomDocument& doc, QDomElement& parentElem ) const; + QList usesBands() const; + private: int mRedBand; int mGreenBand; diff --git a/src/core/raster/qgspalettedrasterrenderer.cpp b/src/core/raster/qgspalettedrasterrenderer.cpp index 3d69c3d60b7e..66d88b886e7e 100644 --- a/src/core/raster/qgspalettedrasterrenderer.cpp +++ b/src/core/raster/qgspalettedrasterrenderer.cpp @@ -217,3 +217,13 @@ void QgsPalettedRasterRenderer::legendSymbologyItems( QList< QPair< QString, QCo symbolItems.push_back( qMakePair( QString::number( i ), mColors[i] ) ); } } + +QList QgsPalettedRasterRenderer::usesBands() const +{ + QList bandList; + if ( mBandNumber != -1 ) + { + bandList << mBandNumber; + } + return bandList; +} diff --git a/src/core/raster/qgspalettedrasterrenderer.h b/src/core/raster/qgspalettedrasterrenderer.h index 1357d5b8cf5f..5996281ddcd2 100644 --- a/src/core/raster/qgspalettedrasterrenderer.h +++ b/src/core/raster/qgspalettedrasterrenderer.h @@ -42,6 +42,8 @@ class CORE_EXPORT QgsPalettedRasterRenderer: public QgsRasterRenderer void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const; + QList usesBands() const; + private: int mBandNumber; /**Color array*/ diff --git a/src/core/raster/qgsrasterrenderer.h b/src/core/raster/qgsrasterrenderer.h index 672bf7462cf0..46177e010c9a 100644 --- a/src/core/raster/qgsrasterrenderer.h +++ b/src/core/raster/qgsrasterrenderer.h @@ -85,6 +85,9 @@ class CORE_EXPORT QgsRasterRenderer /**Sets base class members from xml. Usually called from create() methods of subclasses*/ void readXML( const QDomElement& rendererElem ); + /**Returns a list of band numbers used by the renderer*/ + virtual QList usesBands() const { return QList(); } + protected: inline double readValue( void *data, QgsRasterDataProvider::DataType type, int index ); diff --git a/src/core/raster/qgssinglebandcolordatarenderer.cpp b/src/core/raster/qgssinglebandcolordatarenderer.cpp index 28ae943c5e64..59839656fa5a 100644 --- a/src/core/raster/qgssinglebandcolordatarenderer.cpp +++ b/src/core/raster/qgssinglebandcolordatarenderer.cpp @@ -114,3 +114,13 @@ void QgsSingleBandColorDataRenderer::writeXML( QDomDocument& doc, QDomElement& p rasterRendererElem.setAttribute( "band", mBand ); parentElem.appendChild( rasterRendererElem ); } + +QList QgsSingleBandColorDataRenderer::usesBands() const +{ + QList bandList; + if ( mBand != -1 ) + { + bandList << mBand; + } + return bandList; +} diff --git a/src/core/raster/qgssinglebandcolordatarenderer.h b/src/core/raster/qgssinglebandcolordatarenderer.h index ce21e8e3de10..ddda6373c029 100644 --- a/src/core/raster/qgssinglebandcolordatarenderer.h +++ b/src/core/raster/qgssinglebandcolordatarenderer.h @@ -34,6 +34,8 @@ class CORE_EXPORT QgsSingleBandColorDataRenderer: public QgsRasterRenderer void writeXML( QDomDocument& doc, QDomElement& parentElem ) const; + QList usesBands() const; + private: int mBand; }; diff --git a/src/core/raster/qgssinglebandgrayrenderer.cpp b/src/core/raster/qgssinglebandgrayrenderer.cpp index bf0c01126646..d95221e8fc91 100644 --- a/src/core/raster/qgssinglebandgrayrenderer.cpp +++ b/src/core/raster/qgssinglebandgrayrenderer.cpp @@ -199,3 +199,13 @@ void QgsSingleBandGrayRenderer::legendSymbologyItems( QList< QPair< QString, QCo symbolItems.push_back( qMakePair( QString::number( mContrastEnhancement->maximumValue() ), QColor( 255, 255, 255 ) ) ); } } + +QList QgsSingleBandGrayRenderer::usesBands() const +{ + QList bandList; + if ( mGrayBand != -1 ) + { + bandList << mGrayBand; + } + return bandList; +} diff --git a/src/core/raster/qgssinglebandgrayrenderer.h b/src/core/raster/qgssinglebandgrayrenderer.h index f86cdb7409d9..1bf87adb9a91 100644 --- a/src/core/raster/qgssinglebandgrayrenderer.h +++ b/src/core/raster/qgssinglebandgrayrenderer.h @@ -43,6 +43,8 @@ class CORE_EXPORT QgsSingleBandGrayRenderer: public QgsRasterRenderer void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const; + QList usesBands() const; + private: int mGrayBand; QgsContrastEnhancement* mContrastEnhancement; diff --git a/src/core/raster/qgssinglebandpseudocolorrenderer.cpp b/src/core/raster/qgssinglebandpseudocolorrenderer.cpp index b394a50612c2..8c24f1e175c9 100644 --- a/src/core/raster/qgssinglebandpseudocolorrenderer.cpp +++ b/src/core/raster/qgssinglebandpseudocolorrenderer.cpp @@ -191,3 +191,13 @@ void QgsSingleBandPseudoColorRenderer::legendSymbologyItems( QList< QPair< QStri } } } + +QList QgsSingleBandPseudoColorRenderer::usesBands() const +{ + QList bandList; + if ( mBand != -1 ) + { + bandList << mBand; + } + return bandList; +} diff --git a/src/core/raster/qgssinglebandpseudocolorrenderer.h b/src/core/raster/qgssinglebandpseudocolorrenderer.h index cb7f0c7f94bc..c0c3fba3dd4a 100644 --- a/src/core/raster/qgssinglebandpseudocolorrenderer.h +++ b/src/core/raster/qgssinglebandpseudocolorrenderer.h @@ -43,6 +43,8 @@ class CORE_EXPORT QgsSingleBandPseudoColorRenderer: public QgsRasterRenderer void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const; + QList usesBands() const; + private: QgsRasterShader* mShader; int mBand;