2222#include < QDomDocument>
2323#include < QDomElement>
2424#include < QImage>
25+ #include < QVector>
2526
2627QgsPalettedRasterRenderer::QgsPalettedRasterRenderer ( QgsRasterInterface* input, int bandNumber,
27- QColor* colorArray, int nColors ):
28- QgsRasterRenderer( input, " paletted" ), mBand( bandNumber ), mNColors( nColors )
28+ QColor* colorArray, int nColors, const QVector<QString> labels ):
29+ QgsRasterRenderer( input, " paletted" ), mBand( bandNumber ), mNColors( nColors ), mLabels( labels )
2930{
3031 mColors = new QRgb[nColors];
3132 for ( int i = 0 ; i < nColors; ++i )
@@ -35,8 +36,8 @@ QgsPalettedRasterRenderer::QgsPalettedRasterRenderer( QgsRasterInterface* input,
3536 delete[] colorArray;
3637}
3738
38- QgsPalettedRasterRenderer::QgsPalettedRasterRenderer ( QgsRasterInterface* input, int bandNumber, QRgb* colorArray, int nColors ):
39- QgsRasterRenderer( input, " paletted" ), mBand( bandNumber ), mColors( colorArray ), mNColors( nColors )
39+ QgsPalettedRasterRenderer::QgsPalettedRasterRenderer ( QgsRasterInterface* input, int bandNumber, QRgb* colorArray, int nColors, const QVector<QString> labels ):
40+ QgsRasterRenderer( input, " paletted" ), mBand( bandNumber ), mColors( colorArray ), mNColors( nColors ), mLabels( labels )
4041{
4142}
4243
@@ -51,6 +52,7 @@ QgsRasterInterface * QgsPalettedRasterRenderer::clone() const
5152 renderer->setOpacity ( mOpacity );
5253 renderer->setAlphaBand ( mAlphaBand );
5354 renderer->setRasterTransparency ( mRasterTransparency );
55+ renderer->mLabels = mLabels ;
5456 return renderer;
5557}
5658
@@ -64,6 +66,7 @@ QgsRasterRenderer* QgsPalettedRasterRenderer::create( const QDomElement& elem, Q
6466 int bandNumber = elem.attribute ( " band" , " -1" ).toInt ();
6567 int nColors = 0 ;
6668 QRgb* colors = 0 ;
69+ QVector<QString> labels;
6770
6871 QDomElement paletteElem = elem.firstChildElement ( " colorPalette" );
6972 if ( !paletteElem.isNull () )
@@ -94,14 +97,20 @@ QgsRasterRenderer* QgsPalettedRasterRenderer::create( const QDomElement& elem, Q
9497 if ( value >= 0 && value < nColors )
9598 {
9699 colors[value] = QColor ( entryElem.attribute ( " color" , " #000000" ) ).rgba ();
100+ QString label = entryElem.attribute ( " label" );
101+ if ( !label.isEmpty () )
102+ {
103+ if ( value >= labels.size () ) labels.resize ( value + 1 );
104+ labels[value] = label;
105+ }
97106 }
98107 else
99108 {
100109 QgsDebugMsg ( QString ( " value %1 out of range" ).arg ( value ) );
101110 }
102111 }
103112 }
104- QgsRasterRenderer * r = new QgsPalettedRasterRenderer ( input, bandNumber, colors, nColors );
113+ QgsPalettedRasterRenderer * r = new QgsPalettedRasterRenderer ( input, bandNumber, colors, nColors, labels );
105114 r->readXML ( elem );
106115 return r;
107116}
@@ -134,6 +143,15 @@ QRgb* QgsPalettedRasterRenderer::rgbArray() const
134143 return rgbValues;
135144}
136145
146+ void QgsPalettedRasterRenderer::setLabel ( int idx, QString label )
147+ {
148+ if ( idx >= mLabels .size () )
149+ {
150+ mLabels .resize ( idx + 1 );
151+ }
152+ mLabels [idx] = label;
153+ }
154+
137155QgsRasterBlock * QgsPalettedRasterRenderer::block ( int bandNo, QgsRectangle const & extent, int width, int height )
138156{
139157 QgsRasterBlock *outputBlock = new QgsRasterBlock ();
@@ -240,6 +258,10 @@ void QgsPalettedRasterRenderer::writeXML( QDomDocument& doc, QDomElement& parent
240258 QDomElement colorElem = doc.createElement ( " paletteEntry" );
241259 colorElem.setAttribute ( " value" , i );
242260 colorElem.setAttribute ( " color" , QColor ( mColors [i] ).name () );
261+ if ( !label ( i ).isEmpty () )
262+ {
263+ colorElem.setAttribute ( " label" , label ( i ) );
264+ }
243265 colorPaletteElem.appendChild ( colorElem );
244266 }
245267 rasterRendererElem.appendChild ( colorPaletteElem );
@@ -251,7 +273,8 @@ void QgsPalettedRasterRenderer::legendSymbologyItems( QList< QPair< QString, QCo
251273{
252274 for ( int i = 0 ; i < mNColors ; ++i )
253275 {
254- symbolItems.push_back ( qMakePair ( QString::number ( i ), QColor ( mColors [i] ) ) );
276+ QString lab = label ( i ).isEmpty () ? QString::number ( i ) : label ( i );
277+ symbolItems.push_back ( qMakePair ( lab, QColor ( mColors [i] ) ) );
255278 }
256279}
257280
0 commit comments