Skip to content

Commit 2497375

Browse files
committed
[FEATURE] save and restore color ramp used for singleband pseudocolor rendering
1 parent 1c44d74 commit 2497375

File tree

5 files changed

+29
-1
lines changed

5 files changed

+29
-1
lines changed

src/core/raster/qgscolorrampshader.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ QgsColorRampShader::QgsColorRampShader( double theMinimumValue, double theMaximu
3535
, mLUTFactor( 1.0 )
3636
, mLUTInitialized( false )
3737
, mClip( false )
38+
, mColorRampName( "" )
3839
{
3940
QgsDebugMsgLevel( "called.", 4 );
4041
}
@@ -82,6 +83,12 @@ void QgsColorRampShader::setColorRampType( const QString& theType )
8283
}
8384
}
8485

86+
void QgsColorRampShader::setColorRampName( const QString& theName )
87+
{
88+
mColorRampName = theName;
89+
}
90+
91+
8592
bool QgsColorRampShader::shade( double theValue, int* theReturnRedValue, int* theReturnGreenValue, int* theReturnBlueValue, int *theReturnAlphaValue )
8693
{
8794
if ( mColorRampItemList.isEmpty() )

src/core/raster/qgscolorrampshader.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ class CORE_EXPORT QgsColorRampShader : public QgsRasterShaderFunction
7575
//! \brief Get the color ramp type as a string
7676
QString colorRampTypeAsQString();
7777

78+
//! \brief Get the original color ramp name
79+
QString colorRampName() const {return mColorRampName;}
80+
7881
//! \brief Set custom colormap
7982
void setColorRampItemList( const QList<QgsColorRampShader::ColorRampItem>& theList ); //TODO: sort on set
8083

@@ -84,6 +87,9 @@ class CORE_EXPORT QgsColorRampShader : public QgsRasterShaderFunction
8487
//! \brief Set the color ramp type
8588
void setColorRampType( const QString& theType );
8689

90+
//! \brief Set the source color ramp name
91+
void setColorRampName( const QString& theName );
92+
8793
//! \brief Generates and new RGB value based on one input value
8894
bool shade( double, int*, int*, int*, int* ) override;
8995

@@ -121,6 +127,9 @@ class CORE_EXPORT QgsColorRampShader : public QgsRasterShaderFunction
121127
double mLUTFactor;
122128
bool mLUTInitialized;
123129

130+
/** Colorramp name*/
131+
QString mColorRampName;
132+
124133
//! Do not render values out of range
125134
bool mClip;
126135
};

src/core/raster/qgsrastershader.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ void QgsRasterShader::writeXml( QDomDocument& doc, QDomElement& parent ) const
143143
if ( colorRampShader )
144144
{
145145
QDomElement colorRampShaderElem = doc.createElement( QStringLiteral( "colorrampshader" ) );
146-
colorRampShaderElem.setAttribute( QStringLiteral( "colorRampType" ), colorRampShader->colorRampTypeAsQString() );
146+
colorRampShaderElem.setAttribute( "colorRampName", colorRampShader->colorRampName() );
147+
colorRampShaderElem.setAttribute( "colorRampType", colorRampShader->colorRampTypeAsQString() );
147148
colorRampShaderElem.setAttribute( QStringLiteral( "clip" ), colorRampShader->clip() );
148149
//items
149150
QList<QgsColorRampShader::ColorRampItem> itemList = colorRampShader->colorRampItemList();
@@ -169,6 +170,7 @@ void QgsRasterShader::readXml( const QDomElement& elem )
169170
if ( !colorRampShaderElem.isNull() )
170171
{
171172
QgsColorRampShader* colorRampShader = new QgsColorRampShader();
173+
colorRampShader->setColorRampName( colorRampShaderElem.attribute( "colorRampName", "" ) );
172174
colorRampShader->setColorRampType( colorRampShaderElem.attribute( QStringLiteral( "colorRampType" ), QStringLiteral( "INTERPOLATED" ) ) );
173175
colorRampShader->setClip( colorRampShaderElem.attribute( QStringLiteral( "clip" ), QStringLiteral( "0" ) ) == QLatin1String( "1" ) );
174176

src/core/raster/qgssinglebandpseudocolorrenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ QgsSingleBandPseudoColorRenderer* QgsSingleBandPseudoColorRenderer::clone() cons
6363
{
6464
QgsColorRampShader * colorRampShader = new QgsColorRampShader( mShader->minimumValue(), mShader->maximumValue() );
6565

66+
colorRampShader->setColorRampName( origColorRampShader->colorRampName() );
6667
colorRampShader->setColorRampType( origColorRampShader->colorRampType() );
6768
colorRampShader->setClip( origColorRampShader->clip() );
6869
colorRampShader->setColorRampItemList( origColorRampShader->colorRampItemList() );

src/gui/raster/qgssinglebandpseudocolorrendererwidget.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ QgsRasterRenderer* QgsSingleBandPseudoColorRendererWidget::renderer()
152152

153153
QgsColorRampShader::ColorRamp_TYPE interpolation = static_cast< QgsColorRampShader::ColorRamp_TYPE >( mColorInterpolationComboBox->currentData().toInt() );
154154
colorRampShader->setColorRampType( interpolation );
155+
colorRampShader->setColorRampName( mColorRampComboBox->currentText() );
155156
rasterShader->setRasterShaderFunction( colorRampShader );
156157

157158
int bandNumber = mBandComboBox->currentData().toInt();
@@ -792,6 +793,14 @@ void QgsSingleBandPseudoColorRendererWidget::setFromRenderer( const QgsRasterRen
792793
const QgsColorRampShader* colorRampShader = dynamic_cast<const QgsColorRampShader*>( rasterShader->rasterShaderFunction() );
793794
if ( colorRampShader )
794795
{
796+
int idx = mColorRampComboBox->findText( colorRampShader->colorRampName() );
797+
if ( idx == -1 )
798+
{
799+
QSettings settings;
800+
QString defaultPalette = settings.value( "/Raster/defaultPalette", "Spectral" ).toString();
801+
idx = mColorRampComboBox->findText( defaultPalette );
802+
}
803+
mColorRampComboBox->setCurrentIndex( idx );
795804
mColorInterpolationComboBox->setCurrentIndex( mColorInterpolationComboBox->findData( colorRampShader->colorRampType() ) );
796805

797806
const QList<QgsColorRampShader::ColorRampItem> colorRampItemList = colorRampShader->colorRampItemList();

0 commit comments

Comments
 (0)