Skip to content

Commit b7cd9dc

Browse files
committedApr 3, 2017
Rework paletted raster renderer widget
- Switch to a real model - Allow adding new rows and deleting multiple selected rows - Allow changing colors inline in style dock (no modal color picker)
1 parent a157db7 commit b7cd9dc

File tree

8 files changed

+439
-125
lines changed

8 files changed

+439
-125
lines changed
 

‎python/core/raster/qgspalettedrasterrenderer.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class QgsPalettedRasterRenderer : QgsRasterRenderer
3232
void legendSymbologyItems( QList< QPair< QString, QColor > > &symbolItems /Out/ ) const;
3333

3434
QList<int> usesBands() const;
35+
static QgsPalettedRasterRenderer::ClassData colorTableToClassData( const QList<QgsColorRampShader::ColorRampItem> &table );
3536

3637
private:
3738

‎src/core/raster/qgspalettedrasterrenderer.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,18 @@ QList<int> QgsPalettedRasterRenderer::usesBands() const
255255
return bandList;
256256
}
257257

258+
QgsPalettedRasterRenderer::ClassData QgsPalettedRasterRenderer::colorTableToClassData( const QList<QgsColorRampShader::ColorRampItem> &table )
259+
{
260+
QList<QgsColorRampShader::ColorRampItem>::const_iterator colorIt = table.constBegin();
261+
QgsPalettedRasterRenderer::ClassData classes;
262+
for ( ; colorIt != table.constEnd(); ++colorIt )
263+
{
264+
int idx = ( int )( colorIt->value );
265+
classes.insert( idx, QgsPalettedRasterRenderer::Class( colorIt->color, colorIt->label ) );
266+
}
267+
return classes;
268+
}
269+
258270
void QgsPalettedRasterRenderer::updateArrays()
259271
{
260272
// find maximum color index
@@ -263,6 +275,7 @@ void QgsPalettedRasterRenderer::updateArrays()
263275
{
264276
mMaxColorIndex = qMax( mMaxColorIndex, mIt.key() );
265277
}
278+
mMaxColorIndex = qMax( 0, mMaxColorIndex );
266279

267280
delete [] mColors;
268281
delete [] mIsNoData;

‎src/core/raster/qgspalettedrasterrenderer.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <QVector>
2323

2424
#include "qgsrasterrenderer.h"
25+
#include "qgscolorrampshader.h"
2526

2627
class QColor;
2728
class QDomElement;
@@ -89,6 +90,12 @@ class CORE_EXPORT QgsPalettedRasterRenderer: public QgsRasterRenderer
8990

9091
QList<int> usesBands() const override;
9192

93+
/**
94+
* Converts a raster color \a table to paletted renderer class data.
95+
* @note added in QGIS 3.0
96+
*/
97+
static QgsPalettedRasterRenderer::ClassData colorTableToClassData( const QList<QgsColorRampShader::ColorRampItem> &table );
98+
9299
private:
93100

94101
int mBand;
@@ -100,8 +107,6 @@ class CORE_EXPORT QgsPalettedRasterRenderer: public QgsRasterRenderer
100107
QRgb *mColors = nullptr;
101108
bool *mIsNoData = nullptr;
102109
void updateArrays();
103-
104-
105110
};
106111

107112
#endif // QGSPALETTEDRASTERRENDERER_H

‎src/core/raster/qgsrasterrendererregistry.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,7 @@ QgsRasterRenderer *QgsRasterRendererRegistry::defaultRendererForDrawingStyle( Qg
122122
case QgsRaster::PalettedColor:
123123
{
124124
int grayBand = 1; //reasonable default
125-
QList<QgsColorRampShader::ColorRampItem> colorEntries = provider->colorTable( grayBand );
126-
127-
QList<QgsColorRampShader::ColorRampItem>::const_iterator colorIt = colorEntries.constBegin();
128-
QgsPalettedRasterRenderer::ClassData classes;
129-
for ( ; colorIt != colorEntries.constEnd(); ++colorIt )
130-
{
131-
int idx = ( int )( colorIt->value );
132-
classes.insert( idx, QgsPalettedRasterRenderer::Class( colorIt->color, colorIt->label ) );
133-
}
134-
125+
QgsPalettedRasterRenderer::ClassData classes = QgsPalettedRasterRenderer::colorTableToClassData( provider->colorTable( grayBand ) );
135126
renderer = new QgsPalettedRasterRenderer( provider,
136127
grayBand,
137128
classes );

0 commit comments

Comments
 (0)
Please sign in to comment.