@@ -178,9 +178,6 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
178
178
.arg ( pyramidSentence2 ).arg ( pyramidSentence3 )
179
179
.arg ( pyramidSentence4 ).arg ( pyramidSentence5 ) );
180
180
181
- // update based on lyr's current state
182
- sync ();
183
-
184
181
QSettings settings;
185
182
restoreGeometry ( settings.value ( " /Windows/RasterLayerProperties/geometry" ).toByteArray () );
186
183
tabBar->setCurrentIndex ( settings.value ( " /Windows/RasterLayerProperties/row" ).toInt () );
@@ -292,6 +289,9 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
292
289
}
293
290
}
294
291
on_mRenderTypeComboBox_currentIndexChanged ( mRenderTypeComboBox ->currentIndex () );
292
+
293
+ // update based on lyr's current state
294
+ sync ();
295
295
} // QgsRasterLayerProperties ctor
296
296
297
297
@@ -306,20 +306,22 @@ QgsRasterLayerProperties::~QgsRasterLayerProperties()
306
306
}
307
307
}
308
308
309
- void QgsRasterLayerProperties::populateTransparencyTable ()
309
+ void QgsRasterLayerProperties::populateTransparencyTable ( QgsRasterRenderer* renderer )
310
310
{
311
311
QgsDebugMsg ( " entering." );
312
312
if ( !mRasterLayer )
313
313
{
314
314
return ;
315
315
}
316
- QgsRasterRenderer* renderer = mRasterLayer -> renderer ();
316
+
317
317
if ( !renderer )
318
318
{
319
319
return ;
320
320
}
321
321
322
322
tableTransparency->clear ();
323
+ tableTransparency->setColumnCount ( 0 );
324
+ tableTransparency->setRowCount ( 0 );
323
325
324
326
QList<int > bandList = renderer->usesBands ();
325
327
tableTransparency->setColumnCount ( bandList.size () + 1 );
@@ -371,20 +373,32 @@ void QgsRasterLayerProperties::populateTransparencyTable()
371
373
372
374
void QgsRasterLayerProperties::setRendererWidget ( const QString& rendererName )
373
375
{
374
- delete mRendererWidget ;
375
- mRendererWidget = 0 ;
376
+ QgsRasterRendererWidget* oldWidget = mRendererWidget ;
376
377
377
378
QgsRasterRendererRegistryEntry rendererEntry;
378
379
if ( QgsRasterRendererRegistry::instance ()->rendererData ( rendererName, rendererEntry ) )
379
380
{
380
381
if ( rendererEntry.widgetCreateFunction ) // single band color data renderer e.g. has no widget
381
382
{
382
383
mRendererWidget = ( *rendererEntry.widgetCreateFunction )( mRasterLayer );
383
- QWidget* oldWidget = mRendererStackedWidget ->currentWidget ();
384
384
mRendererStackedWidget ->addWidget ( mRendererWidget );
385
- delete oldWidget;
385
+ if ( oldWidget )
386
+ {
387
+ // compare used bands in new and old renderer and reset transparency dialog if different
388
+ QgsRasterRenderer* oldRenderer = oldWidget->renderer ();
389
+ QgsRasterRenderer* newRenderer = mRendererWidget ->renderer ();
390
+ QList<int > oldBands = oldRenderer->usesBands ();
391
+ QList<int > newBands = newRenderer->usesBands ();
392
+ if ( oldBands != newBands )
393
+ {
394
+ populateTransparencyTable ( newRenderer );
395
+ }
396
+ delete oldRenderer;
397
+ delete newRenderer;
398
+ }
386
399
}
387
400
}
401
+ delete oldWidget;
388
402
}
389
403
390
404
/* *
@@ -460,7 +474,7 @@ void QgsRasterLayerProperties::sync()
460
474
leNoDataValue->insert ( " " );
461
475
}
462
476
463
- populateTransparencyTable ();
477
+ populateTransparencyTable ( mRasterLayer -> renderer () );
464
478
465
479
QgsDebugMsg ( " populate colormap tab" );
466
480
/*
@@ -578,7 +592,7 @@ void QgsRasterLayerProperties::apply()
578
592
579
593
// Walk through each row in table and test value. If not valid set to 0.0 and continue building transparency list
580
594
QgsRasterTransparency* rasterTransparency = new QgsRasterTransparency ();
581
- if ( mRasterLayer -> bandCount () == 3 )
595
+ if ( tableTransparency-> columnCount () == 4 )
582
596
{
583
597
double myTransparentValue;
584
598
double myPercentTransparent;
@@ -678,7 +692,7 @@ void QgsRasterLayerProperties::apply()
678
692
}
679
693
rasterTransparency->setTransparentThreeValuePixelList ( myTransparentThreeValuePixelList );
680
694
}
681
- else if ( mRasterLayer -> bandCount () == 1 )
695
+ else if ( tableTransparency-> columnCount () == 2 )
682
696
{
683
697
double myTransparentValue;
684
698
double myPercentTransparent;
@@ -967,9 +981,21 @@ void QgsRasterLayerProperties::on_pbnChangeSpatialRefSys_clicked()
967
981
968
982
void QgsRasterLayerProperties::on_pbnDefaultValues_clicked ()
969
983
{
984
+ if ( !mRendererWidget )
985
+ {
986
+ return ;
987
+ }
970
988
971
- if ( /* rbtnThreeBand->isChecked() &&*/ QgsRasterLayer::PalettedColor != mRasterLayer ->drawingStyle () &&
972
- QgsRasterLayer::PalettedMultiBandColor != mRasterLayer ->drawingStyle () )
989
+ QgsRasterRenderer* r = mRendererWidget ->renderer ();
990
+ if ( !r )
991
+ {
992
+ return ;
993
+ }
994
+
995
+ int nBands = r->usesBands ().size ();
996
+ delete r;
997
+
998
+ if ( nBands == 3 )
973
999
{
974
1000
tableTransparency->clear ();
975
1001
tableTransparency->setColumnCount ( 4 );
@@ -986,7 +1012,7 @@ void QgsRasterLayerProperties::on_pbnDefaultValues_clicked()
986
1012
tableTransparency->setItem ( 0 , 3 , new QTableWidgetItem ( " 100.0" ) );
987
1013
}
988
1014
}
989
- else
1015
+ else // 1 band
990
1016
{
991
1017
tableTransparency->clear ();
992
1018
tableTransparency->setColumnCount ( 2 );
@@ -1009,7 +1035,6 @@ void QgsRasterLayerProperties::on_pbnDefaultValues_clicked()
1009
1035
tableTransparency->setItem ( 0 , 0 , new QTableWidgetItem ( QString::number ( mRasterLayer ->noDataValue (), ' f' ) ) );
1010
1036
tableTransparency->setItem ( 0 , 1 , new QTableWidgetItem ( " 100.0" ) );
1011
1037
}
1012
-
1013
1038
}
1014
1039
}
1015
1040
0 commit comments