24 #include <QFileDialog>
25 #include <QMessageBox>
31 QWidget* parent, Qt::WindowFlags f ) :
33 , mRasterLayer( rasterLayer ), mDataProvider( sourceProvider )
34 , mCurrentExtent( currentExtent ), mLayerCrs( layerCrs )
35 , mCurrentCrs( currentCrs )
36 , mResolutionState( OriginalResolution )
44 mNoDataTableWidget->setColumnCount( 2 );
45 mNoDataTableWidget->setHorizontalHeaderItem( 0,
new QTableWidgetItem(
tr(
"From" ) ) );
46 mNoDataTableWidget->setHorizontalHeaderItem( 1,
new QTableWidgetItem(
tr(
"To" ) ) );
53 mCrsComboBox->addItem(
"Project",
CurrentCrs );
54 mCrsComboBox->addItem(
"Selected",
UserCrs );
60 QStringList myFormats;
62 foreach ( QString myFormat, myFormats )
64 mFormatComboBox->addItem( myFormat );
75 mMaximumSizeXLineEdit->setText( QString::number( xSize ) );
76 mMaximumSizeYLineEdit->setText( QString::number( ySize ) );
80 mTileModeCheckBox->setChecked(
true );
81 mMaximumSizeXLineEdit->setText( QString::number( 2000 ) );
82 mMaximumSizeYLineEdit->setText( QString::number( 2000 ) );
89 mCreateOptionsWidget->setFormat( myFormats[0] );
92 mCreateOptionsWidget->update();
100 mPyramidsOptionsWidget->createOptionsWidget()->setRasterLayer(
mRasterLayer );
105 mPyramidsUseExistingCheckBox->setEnabled(
false );
106 mPyramidsUseExistingCheckBox->setVisible(
false );
109 connect( mPyramidsOptionsWidget, SIGNAL( overviewListChanged() ),
114 mPyramidsGroupBox->setEnabled(
false );
119 mCreateOptionsGroupBox->setSaveCheckedState(
true );
124 mTilesGroupBox->hide();
128 QPushButton* okButton = mButtonBox->button( QDialogButtonBox::Ok );
131 okButton->setEnabled(
false );
134 mExtentGroupBox->setOutputCrs(
outputCrs() );
137 mExtentGroupBox->setOutputExtentFromOriginal();
143 mXResolutionLineEdit->setValidator(
new QDoubleValidator(
this ) );
144 mYResolutionLineEdit->setValidator(
new QDoubleValidator(
this ) );
145 mColumnsLineEdit->setValidator(
new QIntValidator(
this ) );
146 mRowsLineEdit->setValidator(
new QIntValidator(
this ) );
147 mMaximumSizeXLineEdit->setValidator(
new QIntValidator(
this ) );
148 mMaximumSizeYLineEdit->setValidator(
new QIntValidator(
this ) );
158 if ( mTileModeCheckBox->isChecked() )
163 fileName = QFileDialog::getExistingDirectory(
this,
tr(
"Select output directory" ) );
166 if ( fileName.isEmpty() )
break;
169 QDir dir( fileName );
170 QString baseName = QFileInfo( fileName ).baseName();
172 filters << QString(
"%1.*" ).arg( baseName );
173 QStringList files = dir.entryList( filters );
174 if ( !files.isEmpty() )
176 QMessageBox::StandardButton button = QMessageBox::warning(
this,
tr(
"Warning" ),
177 tr(
"The directory %1 contains files which will be overwritten: %2" ).arg( dir.absolutePath() ).arg( files.join(
", " ) ),
178 QMessageBox::Ok | QMessageBox::Cancel );
180 if ( button == QMessageBox::Ok )
197 fileName = QFileDialog::getSaveFileName(
this,
tr(
"Select output file" ), QString(),
tr(
"GeoTIFF" ) +
" (*.tif *.tiff *.TIF *.TIFF)" );
200 if ( !fileName.isEmpty() )
202 mSaveAsLineEdit->setText( fileName );
208 QPushButton* okButton = mButtonBox->button( QDialogButtonBox::Ok );
214 okButton->setEnabled( QFileInfo( text ).absoluteDir().exists() );
223 mCreateOptionsWidget->setFormat( text );
224 mCreateOptionsWidget->update();
230 return mColumnsLineEdit->text().toInt();
235 return mRowsLineEdit->text().toInt();
240 return mXResolutionLineEdit->text().toDouble();
245 return mYResolutionLineEdit->text().toDouble();
250 return mMaximumSizeXLineEdit->text().toInt();
255 return mMaximumSizeYLineEdit->text().toInt();
260 return mTileModeCheckBox->isChecked();
265 return mSaveAsLineEdit->text();
270 return mFormatComboBox->currentText();
275 return mCreateOptionsGroupBox->isChecked() ? mCreateOptionsWidget->options() : QStringList();
280 return mExtentGroupBox->outputExtent();
285 mFormatLabel->hide();
286 mFormatComboBox->hide();
291 mSaveAsLabel->hide();
292 mSaveAsLineEdit->hide();
293 mBrowseButton->hide();
294 QPushButton* okButton = mButtonBox->button( QDialogButtonBox::Ok );
297 okButton->setEnabled(
true );
305 bool on = mResolutionRadioButton->isChecked();
306 mXResolutionLineEdit->setEnabled( on );
307 mYResolutionLineEdit->setEnabled( on );
308 mOriginalResolutionPushButton->setEnabled( on && hasResolution );
309 mColumnsLineEdit->setEnabled( !on );
310 mRowsLineEdit->setEnabled( !on );
311 mOriginalSizePushButton->setEnabled( !on && hasResolution );
346 QgsRectangle srcExtent( srsCenter.
x() - xRes / 2, srsCenter.
y() - yRes / 2, srsCenter.
x() + xRes / 2, srsCenter.
y() + yRes / 2 );
349 xRes = extent.width();
350 yRes = extent.height();
352 mXResolutionLineEdit->setText( QString::number( xRes ) );
353 mYResolutionLineEdit->setText( QString::number( yRes ) );
362 mColumnsLineEdit->setText( QString::number( xSize ) );
363 mRowsLineEdit->setText( QString::number( ySize ) );
380 mXResolutionLineEdit->setText( QString::number( xRes ) );
381 mYResolutionLineEdit->setText( QString::number( yRes ) );
388 if ( mResolutionRadioButton->isChecked() )
408 msg =
tr(
"user defined" );
413 msg =
tr(
"Resolution (current: %1)" ).arg( msg );
414 mResolutionGroupBox->setTitle( msg );
420 if ( mSizeRadioButton->isChecked() )
432 if ( selector->exec() )
435 mCrsComboBox->setCurrentIndex( mCrsComboBox->findData(
UserCrs ) );
446 mExtentGroupBox->setOutputCrs(
outputCrs() );
454 mExtentGroupBox->setOutputExtentFromOriginal();
458 mExtentGroupBox->setOutputExtentFromCurrent();
462 mExtentGroupBox->setOutputExtentFromUser( mExtentGroupBox->outputExtent(),
mPreviousCrs );
466 if ( mResolutionRadioButton->isChecked() )
492 mCrsComboBox->setItemText( mCrsComboBox->findData(
OriginalCrs ),
495 mCrsComboBox->setItemText( mCrsComboBox->findData(
CurrentCrs ),
498 mCrsComboBox->setItemText( mCrsComboBox->findData(
UserCrs ),
504 int state = mCrsComboBox->itemData( mCrsComboBox->currentIndex() ).toInt();
529 addNoDataRow( std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN() );
536 if ( !rasterTransparency )
return;
543 if ( transparencyPixel.
min != transparencyPixel.
max )
553 mNoDataTableWidget->removeRow( mNoDataTableWidget->currentRow() );
558 while ( mNoDataTableWidget->rowCount() > 0 )
560 mNoDataTableWidget->removeRow( 0 );
566 mNoDataTableWidget->insertRow( mNoDataTableWidget->rowCount() );
567 for (
int i = 0; i < 2; i++ )
569 double value = i == 0 ? min :
max;
570 QLineEdit *lineEdit =
new QLineEdit();
571 lineEdit->setFrame(
false );
572 lineEdit->setContentsMargins( 1, 1, 1, 1 );
578 lineEdit->setValidator(
new QDoubleValidator( 0 ) );
579 if ( !qIsNaN( value ) )
585 lineEdit->setValidator(
new QIntValidator( 0 ) );
586 if ( !qIsNaN( value ) )
588 valueString = QString::number( static_cast<int>( value ) );
592 lineEdit->setText( valueString );
593 mNoDataTableWidget->setCellWidget( mNoDataTableWidget->rowCount() - 1, i, lineEdit );
597 connect( lineEdit, SIGNAL( textEdited(
const QString & ) ),
this, SLOT(
noDataCellTextEdited(
const QString & ) ) );
599 mNoDataTableWidget->resizeColumnsToContents();
600 mNoDataTableWidget->resizeRowsToContents();
607 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( sender() );
608 if ( !lineEdit )
return;
611 for (
int r = 0 ; r < mNoDataTableWidget->rowCount(); r++ )
613 for (
int c = 0 ; c < mNoDataTableWidget->columnCount(); c++ )
615 if ( mNoDataTableWidget->cellWidget( r, c ) == sender() )
622 if ( row != -1 )
break;
624 QgsDebugMsg( QString(
"row = %1 column =%2" ).arg( row ).arg( column ) );
628 QLineEdit *toLineEdit =
dynamic_cast<QLineEdit *
>( mNoDataTableWidget->cellWidget( row, 1 ) );
629 if ( !toLineEdit )
return;
631 QgsDebugMsg( QString(
"toChanged = %1" ).arg( toChanged ) );
634 toLineEdit->setText( lineEdit->text() );
637 else if ( column == 1 )
662 mTilesGroupBox->show();
666 mTilesGroupBox->hide();
680 if ( mPyramidsGroupBox->isChecked() )
682 QList<QgsRasterPyramid> myPyramidList;
685 if ( mPyramidsUseExistingCheckBox->isChecked() )
691 if ( ! mPyramidsOptionsWidget->overviewList().isEmpty() )
694 QList<QgsRasterPyramid>::iterator myRasterPyramidIterator;
695 for ( myRasterPyramidIterator = myPyramidList.begin();
696 myRasterPyramidIterator != myPyramidList.end();
697 ++myRasterPyramidIterator )
699 if ( ! mPyramidsUseExistingCheckBox->isChecked() || myRasterPyramidIterator->exists )
701 text += QString::number( myRasterPyramidIterator->xDim ) + QString(
"x" ) +
702 QString::number( myRasterPyramidIterator->yDim ) +
" ";
707 mPyramidResolutionsLineEdit->setText( text.trimmed() );
721 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( mNoDataTableWidget->cellWidget( row, column ) );
722 if ( !lineEdit || lineEdit->text().isEmpty() )
724 std::numeric_limits<double>::quiet_NaN();
726 return lineEdit->text().toDouble();
731 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( mNoDataTableWidget->cellWidget( row, column ) );
732 if ( !lineEdit )
return;
734 int width = qMax( lineEdit->fontMetrics().width( lineEdit->text() ) + 10, 100 );
735 width = qMax( width, mNoDataTableWidget->columnWidth( column ) );
737 lineEdit->setFixedWidth( width );
743 if ( ! mNoDataGroupBox->isChecked() )
746 for (
int r = 0 ; r < mNoDataTableWidget->rowCount(); r++ )
749 noDataList.append( noData );
757 return mPyramidsGroupBox->isChecked() ? mPyramidsOptionsWidget->overviewList() : QList<int>();
762 if ( ! mPyramidsGroupBox->isChecked() )
764 else if ( mPyramidsUseExistingCheckBox->isChecked() )
772 if ( mCreateOptionsGroupBox->isChecked() )
774 QString message = mCreateOptionsWidget->validateOptions(
true,
false );
775 if ( !message.isNull() )
778 if ( mPyramidsGroupBox->isChecked() )
780 QString message = mPyramidsOptionsWidget->createOptionsWidget()->validateOptions(
true,
false );
781 if ( !message.isNull() )
void setNoDataToEdited(int row)
QgsCoordinateReferenceSystem mCurrentCrs
virtual int bandCount() const =0
Get number of bands.
QList< QgsRasterTransparency::TransparentSingleValuePixel > transparentSingleValuePixelList() const
Accessor for transparentSingleValuePixelList.
QgsRectangle mCurrentExtent
void on_mRemoveAllNoDataToolButton_clicked()
QgsCoordinateReferenceSystem mPreviousCrs
A rectangle specified with double values.
void on_mSaveAsLineEdit_textChanged(const QString &text)
static QString printValue(double value)
Print double value with all necessary significant digits.
void noDataCellTextEdited(const QString &text)
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
void on_mAddNoDataManuallyToolButton_clicked()
static QIcon getThemeIcon(const QString &theName)
Helper to get a theme icon.
void on_mRemoveSelectedNoDataToolButton_clicked()
A generic dialog to prompt the user for a Coordinate Reference System.
bool createFromId(const long theId, CrsType theType=PostgisCrsId)
Raster values range container.
QgsCoordinateReferenceSystem outputCrs()
QList< int > pyramidsList() const
void updateResolutionStateMsg()
void populatePyramidsLevels()
virtual QString name() const =0
return a provider name
virtual int ySize() const
const QgsRasterTransparency * rasterTransparency() const
double ANALYSIS_EXPORT max(double x, double y)
returns the maximum of two doubles or the first argument if both are equal
QgsRasterLayerSaveAsDialog(QgsRasterLayer *rasterLayer, QgsRasterDataProvider *sourceProvider, const QgsRectangle ¤tExtent, const QgsCoordinateReferenceSystem &layerCrs, const QgsCoordinateReferenceSystem ¤tCrs, QWidget *parent=0, Qt::WindowFlags f=0)
bool createFromOgcWmsCrs(QString theCrs)
Set up this CRS from the given OGC CRS.
double noDataCellValue(int row, int column) const
QgsRasterRenderer * renderer() const
virtual QList< QgsRasterPyramid > buildPyramidList(QList< int > overviewList=QList< int >())
Accessor for ths raster layers pyramid list.
double percentTransparent
virtual QGis::DataType srcDataType(int bandNo) const =0
Returns source data type for the band specified by number, source data type may be shorter than dataT...
virtual QgsRectangle extent()=0
Get the extent of the data source.
QgsCoordinateReferenceSystem mUserCrs
QgsRaster::RasterBuildPyramids buildPyramidsFlag() const
QgsRectangle outputRectangle() const
void setMessage(QString theMessage="")
If no parameter is passed, the message will be a generic 'define the CRS for this layer'...
double xResolution() const
~QgsRasterLayerSaveAsDialog()
void on_mBrowseButton_clicked()
QgsRasterLayer * mRasterLayer
void recalcResolutionSize()
QgsRasterDataProvider * mDataProvider
void on_mPyramidsGroupBox_toggled(bool toggled)
A class to represent a point geometry.
void addNoDataRow(double min, double max)
double yResolution() const
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
void setResolution(double xRes, double yRes, const QgsCoordinateReferenceSystem &srcCrs)
QgsRasterRangeList noData() const
int maximumTileSizeX() const
void setSelectedCrsId(long theID)
QList< QgsRasterRange > QgsRasterRangeList
virtual int xSize() const
Get raster size.
void on_mLoadTransparentNoDataToolButton_clicked()
Class for storing a coordinate reference system (CRS)
void toggleResolutionSize()
void on_mFormatComboBox_currentIndexChanged(const QString &text)
void setOriginalResolution()
QgsRasterDataProvider * dataProvider()
Returns the data provider.
Defines the list of pixel values to be considered as transparent or semi transparent when rendering r...
QString description() const
double ANALYSIS_EXPORT min(double x, double y)
returns the minimum of two doubles or the first argument if both are equal
QStringList createOptions() const
double width() const
Width of the rectangle.
void adjustNoDataCellWidth(int row, int column)
void on_mChangeCrsPushButton_clicked()
QgsCoordinateReferenceSystem mLayerCrs
void on_mRawModeRadioButton_toggled(bool)
QVector< bool > mNoDataToEdited
QgsPoint center() const
Center point of the rectangle.
void on_mTileModeCheckBox_toggled(bool toggled)
ResolutionState mResolutionState
int maximumTileSizeY() const
double height() const
Height of the rectangle.
QString outputFormat() const
Base class for raster data providers.
QString outputFileName() const