Skip to content

Commit 51c5805

Browse files
committedJan 29, 2018
[raster] don't auto-classify upon customizing values tree (fixes #17102)
1 parent 77163ba commit 51c5805

File tree

3 files changed

+51
-18
lines changed

3 files changed

+51
-18
lines changed
 

‎python/gui/raster/qgssinglebandpseudocolorrendererwidget.sip.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ Executes the single band pseudo raster classficiation
4040
void loadMinMax( int bandNo, double min, double max );
4141
%Docstring
4242
called when new min/max values are loaded
43+
%End
44+
void loadMinMaxFromTree();
45+
%Docstring
46+
called when the color ramp tree has changed
4347
%End
4448

4549
};

‎src/gui/raster/qgssinglebandpseudocolorrendererwidget.cpp

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@
4141

4242
QgsSingleBandPseudoColorRendererWidget::QgsSingleBandPseudoColorRendererWidget( QgsRasterLayer *layer, const QgsRectangle &extent )
4343
: QgsRasterRendererWidget( layer, extent )
44-
, mDisableMinMaxWidgetRefresh( false )
4544
, mMinMaxOrigin( 0 )
4645
{
4746
QgsSettings settings;
4847

4948
setupUi( this );
49+
5050
connect( mAddEntryButton, &QPushButton::clicked, this, &QgsSingleBandPseudoColorRendererWidget::mAddEntryButton_clicked );
5151
connect( mDeleteEntryButton, &QPushButton::clicked, this, &QgsSingleBandPseudoColorRendererWidget::mDeleteEntryButton_clicked );
5252
connect( mLoadFromBandButton, &QPushButton::clicked, this, &QgsSingleBandPseudoColorRendererWidget::mLoadFromBandButton_clicked );
@@ -98,9 +98,6 @@ QgsSingleBandPseudoColorRendererWidget::QgsSingleBandPseudoColorRendererWidget(
9898
mMinMaxContainerWidget->setLayout( layout );
9999
layout->addWidget( mMinMaxWidget );
100100

101-
connect( mMinMaxWidget, &QgsRasterMinMaxWidget::widgetChanged, this, &QgsSingleBandPseudoColorRendererWidget::widgetChanged );
102-
connect( mMinMaxWidget, &QgsRasterMinMaxWidget::load, this, &QgsSingleBandPseudoColorRendererWidget::loadMinMax );
103-
104101
mBandComboBox->setLayer( mRasterLayer );
105102

106103
mColorInterpolationComboBox->addItem( tr( "Discrete" ), QgsColorRampShader::Discrete );
@@ -117,6 +114,9 @@ QgsSingleBandPseudoColorRendererWidget::QgsSingleBandPseudoColorRendererWidget(
117114

118115
setFromRenderer( layer->renderer() );
119116

117+
connect( mMinMaxWidget, &QgsRasterMinMaxWidget::widgetChanged, this, &QgsSingleBandPseudoColorRendererWidget::widgetChanged );
118+
connect( mMinMaxWidget, &QgsRasterMinMaxWidget::load, this, &QgsSingleBandPseudoColorRendererWidget::loadMinMax );
119+
120120
// If there is currently no min/max, load default with user current default options
121121
if ( mMinLineEdit->text().isEmpty() || mMaxLineEdit->text().isEmpty() )
122122
{
@@ -189,8 +189,6 @@ QgsRasterRenderer *QgsSingleBandPseudoColorRendererWidget::renderer()
189189
void QgsSingleBandPseudoColorRendererWidget::doComputations()
190190
{
191191
mMinMaxWidget->doComputations();
192-
if ( mColormapTreeWidget->topLevelItemCount() == 0 )
193-
applyColorRamp();
194192
}
195193

196194
void QgsSingleBandPseudoColorRendererWidget::setMapCanvas( QgsMapCanvas *canvas )
@@ -319,6 +317,8 @@ void QgsSingleBandPseudoColorRendererWidget::mAddEntryButton_clicked()
319317
this, &QgsSingleBandPseudoColorRendererWidget::mColormapTreeWidget_itemEdited );
320318
mColormapTreeWidget->sortItems( ValueColumn, Qt::AscendingOrder );
321319
autoLabel();
320+
321+
loadMinMaxFromTree();
322322
emit widgetChanged();
323323
}
324324

@@ -335,6 +335,8 @@ void QgsSingleBandPseudoColorRendererWidget::mDeleteEntryButton_clicked()
335335
{
336336
delete item;
337337
}
338+
339+
loadMinMaxFromTree();
338340
emit widgetChanged();
339341
}
340342

@@ -449,6 +451,8 @@ void QgsSingleBandPseudoColorRendererWidget::mLoadFromBandButton_clicked()
449451
{
450452
QMessageBox::warning( this, tr( "Load Color Map" ), tr( "The color map for band %1 has no entries" ).arg( bandIndex ) );
451453
}
454+
455+
loadMinMaxFromTree();
452456
emit widgetChanged();
453457
}
454458

@@ -539,6 +543,8 @@ void QgsSingleBandPseudoColorRendererWidget::mLoadFromFileButton_clicked()
539543
{
540544
QMessageBox::warning( this, tr( "Read access denied" ), tr( "Read access denied. Adjust the file permissions and try again.\n\n" ) );
541545
}
546+
547+
loadMinMaxFromTree();
542548
emit widgetChanged();
543549
}
544550

@@ -645,6 +651,9 @@ void QgsSingleBandPseudoColorRendererWidget::mColormapTreeWidget_itemEdited( QTr
645651
{
646652
mColormapTreeWidget->sortItems( ValueColumn, Qt::AscendingOrder );
647653
autoLabel();
654+
655+
loadMinMaxFromTree();
656+
648657
emit widgetChanged();
649658
}
650659
else if ( column == LabelColumn )
@@ -756,26 +765,48 @@ void QgsSingleBandPseudoColorRendererWidget::loadMinMax( int bandNo, double min,
756765
Q_UNUSED( bandNo );
757766
QgsDebugMsg( QString( "theBandNo = %1 min = %2 max = %3" ).arg( bandNo ).arg( min ).arg( max ) );
758767

759-
mDisableMinMaxWidgetRefresh = true;
768+
double oldMin = lineEditValue( mMinLineEdit );
769+
double oldMax = lineEditValue( mMaxLineEdit );
770+
760771
if ( std::isnan( min ) )
761772
{
762-
mMinLineEdit->clear();
773+
whileBlocking( mMinLineEdit )->clear();
763774
}
764775
else
765776
{
766-
mMinLineEdit->setText( QString::number( min ) );
777+
whileBlocking( mMinLineEdit )->setText( QString::number( min ) );
767778
}
768779

769780
if ( std::isnan( max ) )
770781
{
771-
mMaxLineEdit->clear();
782+
whileBlocking( mMaxLineEdit )->clear();
772783
}
773784
else
774785
{
775-
mMaxLineEdit->setText( QString::number( max ) );
786+
whileBlocking( mMaxLineEdit )->setText( QString::number( max ) );
787+
}
788+
789+
if ( oldMin != min || oldMax != max )
790+
{
791+
classify();
776792
}
777-
mDisableMinMaxWidgetRefresh = false;
778-
classify();
793+
}
794+
795+
void QgsSingleBandPseudoColorRendererWidget::loadMinMaxFromTree()
796+
{
797+
QTreeWidgetItem *item = mColormapTreeWidget->topLevelItem( 0 );
798+
if ( !item )
799+
{
800+
return;
801+
}
802+
803+
double min = item->text( ValueColumn ).toDouble();
804+
item = mColormapTreeWidget->topLevelItem( mColormapTreeWidget->topLevelItemCount() - 1 );
805+
double max = item->text( ValueColumn ).toDouble();
806+
807+
whileBlocking( mMinLineEdit )->setText( QString::number( min ) );
808+
whileBlocking( mMaxLineEdit )->setText( QString::number( max ) );
809+
minMaxModified();
779810
}
780811

781812
void QgsSingleBandPseudoColorRendererWidget::setLineEditValue( QLineEdit *lineEdit, double value )
@@ -871,8 +902,5 @@ void QgsSingleBandPseudoColorRendererWidget::mMaxLineEdit_textEdited( const QStr
871902

872903
void QgsSingleBandPseudoColorRendererWidget::minMaxModified()
873904
{
874-
if ( !mDisableMinMaxWidgetRefresh )
875-
{
876-
mMinMaxWidget->userHasSetManualMinMaxValues();
877-
}
905+
mMinMaxWidget->userHasSetManualMinMaxValues();
878906
}

‎src/gui/raster/qgssinglebandpseudocolorrendererwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ class GUI_EXPORT QgsSingleBandPseudoColorRendererWidget: public QgsRasterRendere
5656
void classify();
5757
//! called when new min/max values are loaded
5858
void loadMinMax( int bandNo, double min, double max );
59+
//! called when the color ramp tree has changed
60+
void loadMinMaxFromTree();
5961

6062
private:
6163

@@ -107,7 +109,6 @@ class GUI_EXPORT QgsSingleBandPseudoColorRendererWidget: public QgsRasterRendere
107109
double lineEditValue( const QLineEdit *lineEdit ) const;
108110
void resetClassifyButton();
109111
QgsRasterMinMaxWidget *mMinMaxWidget = nullptr;
110-
bool mDisableMinMaxWidgetRefresh;
111112
int mMinMaxOrigin;
112113

113114
void minMaxModified();

0 commit comments

Comments
 (0)
Please sign in to comment.