Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[BUG] Fix QgsColorRampShaderWidget (#35214)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
  • Loading branch information
qgis-bot and github-actions[bot] committed Mar 23, 2020
1 parent 892d06c commit df0b95a
Showing 1 changed file with 16 additions and 25 deletions.
41 changes: 16 additions & 25 deletions src/gui/raster/qgscolorrampshaderwidget.cpp
Expand Up @@ -88,6 +88,7 @@ QgsColorRampShaderWidget::QgsColorRampShaderWidget( QWidget *parent )
resetClassifyButton();

connect( mClassificationModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsColorRampShaderWidget::classify );
connect( mColorInterpolationComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsColorRampShaderWidget::classify );
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 );
Expand Down Expand Up @@ -259,7 +260,6 @@ void QgsColorRampShaderWidget::setUnitFromLabels()
}
}


void QgsColorRampShaderWidget::mAddEntryButton_clicked()
{
QgsTreeWidgetItemObject *newItem = new QgsTreeWidgetItemObject( mColormapTreeWidget );
Expand Down Expand Up @@ -331,6 +331,7 @@ void QgsColorRampShaderWidget::classify()
connect( newItem, &QgsTreeWidgetItemObject::itemEdited,
this, &QgsColorRampShaderWidget::mColormapTreeWidget_itemEdited );
}

mClipCheckBox->setChecked( colorRampShader->clip() );

autoLabel();
Expand All @@ -342,7 +343,6 @@ void QgsColorRampShaderWidget::mClassificationModeComboBox_currentIndexChanged(
QgsColorRampShader::ClassificationMode mode = static_cast< QgsColorRampShader::ClassificationMode >( mClassificationModeComboBox->itemData( index ).toInt() );
mNumberOfEntriesSpinBox->setEnabled( mode != QgsColorRampShader::Continuous );
emit classificationModeChanged( mode );

}

void QgsColorRampShaderWidget::applyColorRamp()
Expand Down Expand Up @@ -382,7 +382,7 @@ void QgsColorRampShaderWidget::applyColorRamp()

double value = currentItem->text( ValueColumn ).toDouble();
double position = ( value - mMin ) / ( mMax - mMin );
currentItem->setData( ColorColumn, Qt::EditRole, ramp->color( position ) );
whileBlocking( static_cast<QgsTreeWidgetItemObject *>( currentItem ) )->setData( ColorColumn, Qt::EditRole, ramp->color( position ) );
}

emit widgetChanged();
Expand All @@ -408,7 +408,6 @@ void QgsColorRampShaderWidget::populateColormapTreeWidget( const QList<QgsColorR
this, &QgsColorRampShaderWidget::mColormapTreeWidget_itemEdited );
}
setUnitFromLabels();
emit widgetChanged();
}

void QgsColorRampShaderWidget::mLoadFromBandButton_clicked()
Expand Down Expand Up @@ -639,9 +638,20 @@ void QgsColorRampShaderWidget::mColormapTreeWidget_itemEdited( QTreeWidgetItem *

void QgsColorRampShaderWidget::setFromShader( const QgsColorRampShader &colorRampShader )
{
populateColormapTreeWidget( colorRampShader.colorRampItemList() );

// Those objects are connected to classify() the color ramp shader if they change, or call widget change
// need to block them to avoid to classify and to alter the color ramp, or to call duplicate widget change
whileBlocking( mClipCheckBox )->setChecked( colorRampShader.clip() );
whileBlocking( mColorInterpolationComboBox )->setCurrentIndex( mColorInterpolationComboBox->findData( colorRampShader.colorRampType() ) );
mColorInterpolationComboBox_currentIndexChanged( mColorInterpolationComboBox->currentIndex() );
whileBlocking( mClassificationModeComboBox )->setCurrentIndex( mClassificationModeComboBox->findData( colorRampShader.classificationMode() ) );
mClassificationModeComboBox_currentIndexChanged( mClassificationModeComboBox->currentIndex() );
whileBlocking( mNumberOfEntriesSpinBox )->setValue( colorRampShader.colorRampItemList().count() ); // some default

if ( colorRampShader.sourceColorRamp() )
{
btnColorRamp->setColorRamp( colorRampShader.sourceColorRamp() );
whileBlocking( btnColorRamp )->setColorRamp( colorRampShader.sourceColorRamp() );
}
else
{
Expand All @@ -650,26 +660,7 @@ void QgsColorRampShaderWidget::setFromShader( const QgsColorRampShader &colorRam
btnColorRamp->setColorRampFromName( defaultPalette );
}

mColorInterpolationComboBox->setCurrentIndex( mColorInterpolationComboBox->findData( colorRampShader.colorRampType() ) );

mColormapTreeWidget->clear();
const QList<QgsColorRampShader::ColorRampItem> colorRampItemList = colorRampShader.colorRampItemList();
QList<QgsColorRampShader::ColorRampItem>::const_iterator it = colorRampItemList.constBegin();
for ( ; it != colorRampItemList.end(); ++it )
{
QgsTreeWidgetItemObject *newItem = new QgsTreeWidgetItemObject( mColormapTreeWidget );
newItem->setText( ValueColumn, QString::number( it->value, 'g', 15 ) );
newItem->setData( ColorColumn, Qt::EditRole, it->color );
newItem->setText( LabelColumn, it->label );
newItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable );
connect( newItem, &QgsTreeWidgetItemObject::itemEdited,
this, &QgsColorRampShaderWidget::mColormapTreeWidget_itemEdited );
}
setUnitFromLabels();

mClipCheckBox->setChecked( colorRampShader.clip() );
mClassificationModeComboBox->setCurrentIndex( mClassificationModeComboBox->findData( colorRampShader.classificationMode() ) );
mNumberOfEntriesSpinBox->setValue( colorRampShader.colorRampItemList().count() ); // some default
emit widgetChanged();
}

void QgsColorRampShaderWidget::mColorInterpolationComboBox_currentIndexChanged( int index )
Expand Down

0 comments on commit df0b95a

Please sign in to comment.