diff --git a/src/app/qgsrasterlayerproperties.cpp b/src/app/qgsrasterlayerproperties.cpp index b17def53a74..f52e29ac753 100644 --- a/src/app/qgsrasterlayerproperties.cpp +++ b/src/app/qgsrasterlayerproperties.cpp @@ -256,10 +256,17 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv cboxTransparencyBand->addItem( bandName, i ); } +// Alpha band is set in sync() +#if 0 if ( renderer ) { - cboxTransparencyBand->setCurrentIndex( cboxTransparencyBand->findData( renderer->alphaBand() ) ); + QgsDebugMsg( QString( "alphaBand = %1" ).arg( renderer->alphaBand() ) ); + if ( renderer->alphaBand() > 0 ) + { + cboxTransparencyBand->setCurrentIndex( cboxTransparencyBand->findData( renderer->alphaBand() ) ); + } } +#endif } // create histogram widget diff --git a/src/core/raster/qgsrasternuller.cpp b/src/core/raster/qgsrasternuller.cpp index 8edf954d710..673b671305d 100644 --- a/src/core/raster/qgsrasternuller.cpp +++ b/src/core/raster/qgsrasternuller.cpp @@ -56,24 +56,23 @@ void * QgsRasterNuller::readBlock( int bandNo, QgsRectangle const & extent, int void * rasterData = mInput->block( bandNo, extent, width, height ); - QgsRasterInterface::DataType dataType = mInput->dataType( bandNo ); - int pixelSize = mInput->typeSize( dataType ) / 8; + QgsRasterInterface::DataType dataType = mInput->dataType( bandNo ); - double noDataValue = mInput->noDataValue ( bandNo ); + double noDataValue = mInput->noDataValue( bandNo ); - for ( int i = 0; i < height; ++i ) + for ( int i = 0; i < height; i++ ) { - for ( int j = 0; j < width; ++j ) + for ( int j = 0; j < width; j++ ) { - int index = pixelSize * ( i * width + j ); + int index = i * width + j; double value = readValue( rasterData, dataType, index ); - + foreach ( NoData noData, mNoData ) { - if ( ( value >= noData.min && value <= noData.max ) || - doubleNear( value, noData.min ) || - doubleNear( value, noData.max ) ) + if (( value >= noData.min && value <= noData.max ) || + doubleNear( value, noData.min ) || + doubleNear( value, noData.max ) ) { writeValue( rasterData, dataType, index, noDataValue ); } diff --git a/src/gui/qgsrasterlayersaveasdialog.cpp b/src/gui/qgsrasterlayersaveasdialog.cpp index 503dd251bc9..b719a683b37 100644 --- a/src/gui/qgsrasterlayersaveasdialog.cpp +++ b/src/gui/qgsrasterlayersaveasdialog.cpp @@ -589,7 +589,7 @@ void QgsRasterLayerSaveAsDialog::addNoDataRow( double min, double max ) lineEdit->setValidator( new QDoubleValidator( 0 ) ); if ( !qIsNaN( value ) ) { - valueString = QString::number( value, 'f' ); + valueString = QgsRasterInterface::printValue( value ); } break; default: @@ -603,6 +603,8 @@ void QgsRasterLayerSaveAsDialog::addNoDataRow( double min, double max ) lineEdit->setText( valueString ); mNoDataTableWidget->setCellWidget( mNoDataTableWidget->rowCount() - 1, i, lineEdit ); + adjustNoDataCellWidth( mNoDataTableWidget->rowCount() - 1, i ); + connect( lineEdit, SIGNAL( textEdited( const QString & ) ), this, SLOT( noDataCellTextEdited( const QString & ) ) ); } mNoDataTableWidget->resizeColumnsToContents(); @@ -737,6 +739,17 @@ double QgsRasterLayerSaveAsDialog::noDataCellValue( int row, int column ) const return lineEdit->text().toDouble(); } +void QgsRasterLayerSaveAsDialog::adjustNoDataCellWidth( int row, int column ) +{ + QLineEdit *lineEdit = dynamic_cast( mNoDataTableWidget->cellWidget( row, column ) ); + if ( !lineEdit ) return; + + int width = qMax( lineEdit->fontMetrics().width( lineEdit->text() ) + 10, 100 ); + width = qMax( width, mNoDataTableWidget->columnWidth( column ) ); + + lineEdit->setFixedWidth( width ); +} + QList QgsRasterLayerSaveAsDialog::noData() const { QList noDataList; diff --git a/src/gui/qgsrasterlayersaveasdialog.h b/src/gui/qgsrasterlayersaveasdialog.h index e87e268395c..783b9241831 100644 --- a/src/gui/qgsrasterlayersaveasdialog.h +++ b/src/gui/qgsrasterlayersaveasdialog.h @@ -134,6 +134,7 @@ class GUI_EXPORT QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRast void addNoDataRow( double min, double max ); void setNoDataToEdited( int row ); double noDataCellValue( int row, int column ) const; + void adjustNoDataCellWidth( int row, int column ); }; diff --git a/src/ui/qgsrasterlayersaveasdialogbase.ui b/src/ui/qgsrasterlayersaveasdialogbase.ui index 861a8572cb0..c164bcf954d 100644 --- a/src/ui/qgsrasterlayersaveasdialogbase.ui +++ b/src/ui/qgsrasterlayersaveasdialogbase.ui @@ -29,9 +29,9 @@ 0 - -293 - 539 - 831 + -263 + 549 + 806 @@ -527,6 +527,12 @@ true + + + 0 + 150 + + Additional no data values. The specified values will be set to no data in output raster. @@ -568,9 +574,6 @@ - - false - Load user defined fully transparent (100%) values @@ -643,7 +646,7 @@ No pyramids - mPyramidsButtonGroup + mPyramidsButtonGroup @@ -653,7 +656,7 @@ Build pyramids - mPyramidsButtonGroup + mPyramidsButtonGroup @@ -663,7 +666,7 @@ Use existing - mPyramidsButtonGroup + mPyramidsButtonGroup