From 5135c0e60a00844d47a27c78fc95557fd4db04bb Mon Sep 17 00:00:00 2001 From: nirvn Date: Mon, 24 Jun 2019 10:15:40 +0700 Subject: [PATCH] [ui] When the color ramp shader widget list of values has been customized, maintain those values when modifying the color ramp (fixes #30345) --- src/gui/raster/qgscolorrampshaderwidget.cpp | 33 ++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/gui/raster/qgscolorrampshaderwidget.cpp b/src/gui/raster/qgscolorrampshaderwidget.cpp index f270dc4fbd5..bcde6116f51 100644 --- a/src/gui/raster/qgscolorrampshaderwidget.cpp +++ b/src/gui/raster/qgscolorrampshaderwidget.cpp @@ -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( &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 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 &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(); }