1919#include " qgsmultibandcolorrenderer.h"
2020#include " qgsrasterlayer.h"
2121
22- QgsMultiBandColorRendererWidget::QgsMultiBandColorRendererWidget ( QgsRasterLayer* layer ): QgsRasterRendererWidget( layer )
22+ QgsMultiBandColorRendererWidget::QgsMultiBandColorRendererWidget ( QgsRasterLayer* layer, const QgsRectangle &extent ): QgsRasterRendererWidget( layer, extent )
2323{
2424 setupUi ( this );
2525 createValidators ();
@@ -32,6 +32,19 @@ QgsMultiBandColorRendererWidget::QgsMultiBandColorRendererWidget( QgsRasterLayer
3232 return ;
3333 }
3434
35+ mMinMaxWidget = new QgsRasterMinMaxWidget ( layer, this );
36+ mMinMaxWidget ->setExtent ( extent );
37+ layout ()->addWidget ( mMinMaxWidget );
38+ connect ( mMinMaxWidget , SIGNAL ( load ( int , double , double ) ),
39+ this , SLOT ( loadMinMax ( int , double , double ) ) );
40+
41+ connect ( mRedBandComboBox , SIGNAL ( currentIndexChanged ( int ) ),
42+ this , SLOT ( onBandChanged ( int ) ) );
43+ connect ( mGreenBandComboBox , SIGNAL ( currentIndexChanged ( int ) ),
44+ this , SLOT ( onBandChanged ( int ) ) );
45+ connect ( mBlueBandComboBox , SIGNAL ( currentIndexChanged ( int ) ),
46+ this , SLOT ( onBandChanged ( int ) ) );
47+
3548 // fill available bands into combo boxes
3649 mRedBandComboBox ->addItem ( tr ( " Not set" ), -1 );
3750 mGreenBandComboBox ->addItem ( tr ( " Not set" ), -1 );
@@ -53,6 +66,7 @@ QgsMultiBandColorRendererWidget::QgsMultiBandColorRendererWidget( QgsRasterLayer
5366 }
5467
5568 setFromRenderer ( mRasterLayer ->renderer () );
69+ onBandChanged ( 0 ); // reset mMinMaxWidget bands
5670 }
5771}
5872
@@ -166,77 +180,82 @@ void QgsMultiBandColorRendererWidget::setCustomMinMaxValues( QgsMultiBandColorRe
166180 r->setBlueContrastEnhancement ( blueEnhancement );
167181}
168182
169- void QgsMultiBandColorRendererWidget::on_mLoadPushButton_clicked ( )
183+ void QgsMultiBandColorRendererWidget::onBandChanged ( int index )
170184{
171- int redBand = mRedBandComboBox ->itemData ( mRedBandComboBox ->currentIndex () ).toInt ();
172- int greenBand = mGreenBandComboBox ->itemData ( mGreenBandComboBox ->currentIndex () ).toInt ();
173- int blueBand = mBlueBandComboBox ->itemData ( mBlueBandComboBox ->currentIndex () ).toInt ();
174-
175- loadMinMaxValueForBand ( redBand, mRedMinLineEdit , mRedMaxLineEdit );
176- loadMinMaxValueForBand ( greenBand, mGreenMinLineEdit , mGreenMaxLineEdit );
177- loadMinMaxValueForBand ( blueBand, mBlueMinLineEdit , mBlueMaxLineEdit );
185+ QList<int > myBands;
186+ myBands.append ( mRedBandComboBox ->itemData ( mRedBandComboBox ->currentIndex () ).toInt () );
187+ myBands.append ( mGreenBandComboBox ->itemData ( mGreenBandComboBox ->currentIndex () ).toInt () );
188+ myBands.append ( mBlueBandComboBox ->itemData ( mBlueBandComboBox ->currentIndex () ).toInt () );
189+ mMinMaxWidget ->setBands ( myBands );
178190}
179191
180- void QgsMultiBandColorRendererWidget::setMinMaxValue ( const QgsContrastEnhancement* ce, QLineEdit* minEdit, QLineEdit* maxEdit )
192+ void QgsMultiBandColorRendererWidget::loadMinMax ( int theBandNo, double theMin, double theMax )
181193{
182- if ( !minEdit || !maxEdit )
194+ QgsDebugMsg ( QString ( " theBandNo = %1 theMin = %2 theMax = %3" ).arg ( theBandNo ).arg ( theMin ).arg ( theMax ) );
195+
196+ QLineEdit *myMinLineEdit, *myMaxLineEdit;
197+
198+ if ( mRedBandComboBox ->itemData ( mRedBandComboBox ->currentIndex () ).toInt () == theBandNo )
183199 {
184- return ;
200+ myMinLineEdit = mRedMinLineEdit ;
201+ myMaxLineEdit = mRedMaxLineEdit ;
185202 }
186-
187- if ( !ce )
203+ else if ( mGreenBandComboBox ->itemData ( mGreenBandComboBox ->currentIndex () ).toInt () == theBandNo )
188204 {
189- minEdit->clear ();
190- maxEdit->clear ();
191- return ;
205+ myMinLineEdit = mGreenMinLineEdit ;
206+ myMaxLineEdit = mGreenMaxLineEdit ;
192207 }
193-
194- minEdit->setText ( QString::number ( ce->minimumValue () ) );
195- maxEdit->setText ( QString::number ( ce->maximumValue () ) );
196- mContrastEnhancementAlgorithmComboBox ->setCurrentIndex ( mContrastEnhancementAlgorithmComboBox ->findData (
197- ( int )( ce->contrastEnhancementAlgorithm () ) ) );
198- }
199-
200- void QgsMultiBandColorRendererWidget::loadMinMaxValueForBand ( int band, QLineEdit* minEdit, QLineEdit* maxEdit )
201- {
202- if ( !minEdit || !maxEdit || !mRasterLayer )
208+ else if ( mBlueBandComboBox ->itemData ( mBlueBandComboBox ->currentIndex () ).toInt () == theBandNo )
209+ {
210+ myMinLineEdit = mBlueMinLineEdit ;
211+ myMaxLineEdit = mBlueMaxLineEdit ;
212+ }
213+ else // should not happen
203214 {
215+ QgsDebugMsg ( " Band not found" );
204216 return ;
205217 }
206218
207- double minMaxValues[2 ];
208- bool ok = false ;
209-
210- if ( mEstimateRadioButton ->isChecked () )
219+ if ( qIsNaN ( theMin ) )
211220 {
212- ok = bandMinMax ( Estimate, band, minMaxValues );
221+ myMinLineEdit-> clear ( );
213222 }
214- else if ( mActualRadioButton -> isChecked () )
223+ else
215224 {
216- ok = bandMinMax ( Actual, band, minMaxValues );
225+ myMinLineEdit-> setText ( QString::number ( theMin ) );
217226 }
218- else if ( mCurrentExtentRadioButton ->isChecked () )
227+
228+ if ( qIsNaN ( theMax ) )
219229 {
220- ok = bandMinMax ( CurrentExtent, band, minMaxValues );
230+ myMaxLineEdit-> clear ( );
221231 }
222- else if ( mUseStdDevRadioButton -> isChecked () )
232+ else
223233 {
224- QgsRasterBandStats rasterBandStats = mRasterLayer ->dataProvider ()->bandStatistics ( band );
225- double diff = mStdDevSpinBox ->value () * rasterBandStats.stdDev ;
226- minMaxValues[0 ] = rasterBandStats.mean - diff;
227- minMaxValues[1 ] = rasterBandStats.mean + diff;
234+ myMaxLineEdit->setText ( QString::number ( theMax ) );
228235 }
236+ }
229237
230- if ( ok )
238+ void QgsMultiBandColorRendererWidget::setMinMaxValue ( const QgsContrastEnhancement* ce, QLineEdit* minEdit, QLineEdit* maxEdit )
239+ {
240+ if ( !minEdit || !maxEdit )
231241 {
232- minEdit->setText ( QString::number ( minMaxValues[0 ] ) );
233- maxEdit->setText ( QString::number ( minMaxValues[1 ] ) );
242+ return ;
234243 }
235- else
244+
245+ if ( !ce )
236246 {
237247 minEdit->clear ();
238248 maxEdit->clear ();
249+ return ;
239250 }
251+
252+ minEdit->setText ( QString::number ( ce->minimumValue () ) );
253+ maxEdit->setText ( QString::number ( ce->maximumValue () ) );
254+
255+ // QgsMultiBandColorRenderer is using individual contrast enhancements for each
256+ // band, but this widget GUI has one for all
257+ mContrastEnhancementAlgorithmComboBox ->setCurrentIndex ( mContrastEnhancementAlgorithmComboBox ->findData (
258+ ( int )( ce->contrastEnhancementAlgorithm () ) ) );
240259}
241260
242261void QgsMultiBandColorRendererWidget::setFromRenderer ( const QgsRasterRenderer* r )
0 commit comments