Skip to content

Commit e5b8b32

Browse files
committedJun 4, 2017
Make paletted raster widget behave the same as categorized widget
when changing current band Now the widget asks users if they want to delete existing categories when they switch a band, just like how the categorized renderer widget asks when the categorized field is changed.
1 parent c040469 commit e5b8b32

File tree

4 files changed

+46
-1
lines changed

4 files changed

+46
-1
lines changed
 

‎python/core/raster/qgspalettedrasterrenderer.sip

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ Returns number of colors
9191
.. versionadded:: 2.1
9292
%End
9393

94+
int band() const;
95+
%Docstring
96+
Returns the raster band used for rendering the raster.
97+
.. versionadded:: 3.0
98+
:rtype: int
99+
%End
100+
94101
virtual void writeXml( QDomDocument &doc, QDomElement &parentElem ) const;
95102

96103

‎src/core/raster/qgspalettedrasterrenderer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ class CORE_EXPORT QgsPalettedRasterRenderer: public QgsRasterRenderer
8888
* \since QGIS 2.1 */
8989
void setLabel( int idx, const QString &label );
9090

91+
/**
92+
* Returns the raster band used for rendering the raster.
93+
* \since QGIS 3.0
94+
*/
95+
int band() const { return mBand; }
96+
9197
void writeXml( QDomDocument &doc, QDomElement &parentElem ) const override;
9298

9399
void legendSymbologyItems( QList< QPair< QString, QColor > > &symbolItems SIP_OUT ) const override;

‎src/gui/raster/qgspalettedrendererwidget.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ QgsPalettedRendererWidget::QgsPalettedRendererWidget( QgsRasterLayer *layer, con
113113
}
114114

115115
connect( QgsProject::instance(), static_cast < void ( QgsProject::* )( QgsMapLayer * ) >( &QgsProject::layerWillBeRemoved ), this, &QgsPalettedRendererWidget::layerWillBeRemoved );
116-
connect( mBandComboBox, &QgsRasterBandComboBox::bandChanged, this, &QgsPalettedRendererWidget::loadFromLayer );
116+
connect( mBandComboBox, &QgsRasterBandComboBox::bandChanged, this, &QgsPalettedRendererWidget::bandChanged );
117117
}
118118

119119
QgsPalettedRendererWidget::~QgsPalettedRendererWidget()
@@ -143,6 +143,9 @@ void QgsPalettedRendererWidget::setFromRenderer( const QgsRasterRenderer *r )
143143
const QgsPalettedRasterRenderer *pr = dynamic_cast<const QgsPalettedRasterRenderer *>( r );
144144
if ( pr )
145145
{
146+
mBand = pr->band();
147+
whileBlocking( mBandComboBox )->setBand( mBand );
148+
146149
//read values and colors and fill into tree widget
147150
mModel->setClassData( pr->classes() );
148151

@@ -440,6 +443,32 @@ void QgsPalettedRendererWidget::loadFromLayer()
440443
}
441444
}
442445

446+
void QgsPalettedRendererWidget::bandChanged( int band )
447+
{
448+
if ( band == mBand )
449+
return;
450+
451+
bool deleteExisting = false;
452+
if ( !mModel->classData().isEmpty() )
453+
{
454+
int res = QMessageBox::question( this,
455+
tr( "Confirm Delete" ),
456+
tr( "The classification band was changed from %1 to %2.\n"
457+
"Should the existing classes be deleted?" ).arg( mBand ).arg( band ),
458+
QMessageBox::Yes | QMessageBox::No );
459+
460+
deleteExisting = ( res == QMessageBox::Yes );
461+
}
462+
463+
mBand = band;
464+
mModel->blockSignals( true );
465+
if ( deleteExisting )
466+
mModel->deleteAll();
467+
468+
mModel->blockSignals( false );
469+
emit widgetChanged();
470+
}
471+
443472
void QgsPalettedRendererWidget::gatheredClasses()
444473
{
445474
if ( !mGatherer || mGatherer->wasCanceled() )

‎src/gui/raster/qgspalettedrendererwidget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ class GUI_EXPORT QgsPalettedRendererWidget: public QgsRasterRendererWidget, priv
207207
//! Background class gatherer thread
208208
QgsPalettedRendererClassGatherer *mGatherer = nullptr;
209209

210+
int mBand = -1;
211+
210212
void setSelectionColor( const QItemSelection &selection, const QColor &color );
211213

212214
private slots:
@@ -221,6 +223,7 @@ class GUI_EXPORT QgsPalettedRendererWidget: public QgsRasterRendererWidget, priv
221223
void saveColorTable();
222224
void classify();
223225
void loadFromLayer();
226+
void bandChanged( int band );
224227

225228
void gatheredClasses();
226229
void gathererThreadFinished();

0 commit comments

Comments
 (0)
Please sign in to comment.