[ui] When the color ramp shader widget list of values has been

customized, maintain those values when modifying the color ramp
(fixes #30345)
This commit is contained in:
nirvn 2019-06-24 10:15:40 +07:00 committed by Mathieu Pellerin
parent 200c871c24
commit 5135c0e60a

View File

@ -66,8 +66,7 @@ QgsColorRampShaderWidget::QgsColorRampShaderWidget( QWidget *parent )
mColormapTreeWidget->setColumnWidth( ColorColumn, Qgis::UI_SCALE_FACTOR * fontMetrics().width( 'X' ) * 6.6 );
mColormapTreeWidget->setContextMenuPolicy( Qt::CustomContextMenu );
mColormapTreeWidget->setSelectionMode( QAbstractItemView::ExtendedSelection );
connect( mColormapTreeWidget, &QTreeView::customContextMenuRequested, this, [ = ]( QPoint ) { contextMenu->exec( QCursor::pos() ); }
);
connect( mColormapTreeWidget, &QTreeView::customContextMenuRequested, this, [ = ]( QPoint ) { contextMenu->exec( QCursor::pos() ); } );
QString defaultPalette = settings.value( QStringLiteral( "Raster/defaultPalette" ), "" ).toString();
btnColorRamp->setColorRampFromName( defaultPalette );
@ -89,7 +88,7 @@ QgsColorRampShaderWidget::QgsColorRampShaderWidget( QWidget *parent )
resetClassifyButton();
connect( mClassificationModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsColorRampShaderWidget::classify );
connect( mClassifyButton, &QPushButton::clicked, this, &QgsColorRampShaderWidget::applyColorRamp );
connect( mClassifyButton, &QPushButton::clicked, this, &QgsColorRampShaderWidget::classify );
connect( btnColorRamp, &QgsColorRampButton::colorRampChanged, this, &QgsColorRampShaderWidget::applyColorRamp );
connect( mNumberOfEntriesSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsColorRampShaderWidget::classify );
connect( mClipCheckBox, &QAbstractButton::toggled, this, &QgsColorRampShaderWidget::widgetChanged );
@ -319,7 +318,6 @@ void QgsColorRampShaderWidget::classify()
mRasterDataProvider );
colorRampShader->setClip( mClipCheckBox->isChecked() );
mColormapTreeWidget->clear();
const QList<QgsColorRampShader::ColorRampItem> colorRampItemList = colorRampShader->colorRampItemList();
@ -336,7 +334,6 @@ void QgsColorRampShaderWidget::classify()
}
mClipCheckBox->setChecked( colorRampShader->clip() );
autoLabel();
emit widgetChanged();
}
@ -371,7 +368,30 @@ void QgsColorRampShaderWidget::applyColorRamp()
mClassificationModeComboBox->setCurrentIndex( mClassificationModeComboBox->findData( QgsColorRampShader::EqualInterval ) );
}
classify();
int topLevelItemCount = mColormapTreeWidget->topLevelItemCount();
if ( topLevelItemCount > 0 )
{
// if the list values has been customized, maintain pre-existing values
QTreeWidgetItem *currentItem = nullptr;
for ( int i = 0; i < topLevelItemCount; ++i )
{
currentItem = mColormapTreeWidget->topLevelItem( i );
if ( !currentItem )
{
continue;
}
double value = currentItem->text( ValueColumn ).toDouble();
double position = ( value - mMin ) / ( mMax - mMin );
currentItem->setData( ColorColumn, Qt::EditRole, ramp->color( position ) );
}
emit widgetChanged();
}
else
{
classify();
}
}
void QgsColorRampShaderWidget::populateColormapTreeWidget( const QList<QgsColorRampShader::ColorRampItem> &colorRampItems )
@ -409,7 +429,6 @@ void QgsColorRampShaderWidget::mLoadFromBandButton_clicked()
{
QMessageBox::warning( this, tr( "Load Color Map" ), tr( "The color map for band %1 has no entries." ).arg( mBand ) );
}
loadMinimumMaximumFromTree();
emit widgetChanged();
}