From 1e6c400548f9b24e5a256af9202d8aaa60a4f825 Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Tue, 5 Jun 2012 09:29:28 +0200 Subject: [PATCH] Wire in QgsRasterLayerSaveAsDialog in QgisApp --- src/app/qgisapp.cpp | 13 ++++++++- src/gui/CMakeLists.txt | 1 + src/gui/qgsrasterlayersaveasdialog.cpp | 36 ++++++++++++++++++++++++ src/gui/qgsrasterlayersaveasdialog.h | 5 ++++ src/ui/qgsrasterlayersaveasdialogbase.ui | 10 +++---- 5 files changed, 59 insertions(+), 6 deletions(-) diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 7f601eb07f4c..300960e031c3 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -158,6 +158,7 @@ #include "qgspythonrunner.h" #include "qgsquerybuilder.h" #include "qgsrastercalcdialog.h" +#include "qgsrasterfilewriter.h" #include "qgsrasterlayer.h" #include "qgsrasterlayerproperties.h" #include "qgsrasterrenderer.h" @@ -3771,7 +3772,17 @@ void QgisApp::saveAsRasterFile() } QgsRasterLayerSaveAsDialog d( rasterLayer->dataProvider() ); - d.exec(); + if ( d.exec() == QDialog::Accepted ) + { + QgsRasterFileWriter fileWriter( d.outputFileName() ); + if ( d.tileMode() ) + { + fileWriter.setTiledMode( true ); + fileWriter.setMaxTileWidth( d.maximumTileSizeX() ); + fileWriter.setMaxTileHeight( d.maximumTileSizeY() ); + } + fileWriter.writeRaster( rasterLayer->dataProvider(), d.nColumns() ); + } } void QgisApp::saveAsFile() diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index b1e3d0b7de73..4909eeb2930b 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -153,6 +153,7 @@ qgscredentialdialog.h qgsowssourceselect.h qgsprojectionselector.h qgsquickprint.h +qgsrasterlayersaveasdialog.h qgsludialog.h qgsprojectbadlayerguihandler.h qgslonglongvalidator.h diff --git a/src/gui/qgsrasterlayersaveasdialog.cpp b/src/gui/qgsrasterlayersaveasdialog.cpp index 7774ad61ca1d..0b9fcf67faa8 100644 --- a/src/gui/qgsrasterlayersaveasdialog.cpp +++ b/src/gui/qgsrasterlayersaveasdialog.cpp @@ -1,5 +1,6 @@ #include "qgsrasterlayersaveasdialog.h" #include "qgsrasterdataprovider.h" +#include QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, QWidget* parent, Qt::WindowFlags f ): QDialog( parent, f ), @@ -30,6 +31,12 @@ QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* s mMaximumSizeYLineEdit->setText( QString::number( 2000 ) ); } } + + QPushButton* okButton = mButtonBox->button( QDialogButtonBox::Ok ); + if ( okButton ) + { + okButton->setEnabled( false ); + } } void QgsRasterLayerSaveAsDialog::setValidators() @@ -44,6 +51,35 @@ QgsRasterLayerSaveAsDialog::~QgsRasterLayerSaveAsDialog() { } +void QgsRasterLayerSaveAsDialog::on_mBrowseButton_clicked() +{ + QString fileName; + if ( mTileModeCheckBox->isChecked() ) + { + fileName = QFileDialog::getExistingDirectory( this, tr( "Select output directory" ) ); + } + else + { + fileName = QFileDialog::getOpenFileName( this, tr( "Select output file" ) ); + } + + if ( !fileName.isEmpty() ) + { + mSaveAsLineEdit->setText( fileName ); + } +} + +void QgsRasterLayerSaveAsDialog::on_mSaveAsLineEdit_textChanged( const QString& text ) +{ + QPushButton* okButton = mButtonBox->button( QDialogButtonBox::Ok ); + if ( !okButton ) + { + return; + } + + okButton->setEnabled( QFile::exists( text ) ); +} + int QgsRasterLayerSaveAsDialog::nColumns() const { return mColumnsLineEdit->text().toInt(); diff --git a/src/gui/qgsrasterlayersaveasdialog.h b/src/gui/qgsrasterlayersaveasdialog.h index 3cd7288a18e9..631ea93235cc 100644 --- a/src/gui/qgsrasterlayersaveasdialog.h +++ b/src/gui/qgsrasterlayersaveasdialog.h @@ -7,6 +7,7 @@ class QgsRasterDataProvider; class QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRasterLayerSaveAsDialogBase { + Q_OBJECT public: QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, QWidget* parent = 0, Qt::WindowFlags f = 0 ); ~QgsRasterLayerSaveAsDialog(); @@ -19,6 +20,10 @@ class QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRasterLayerSave QString outputFileName() const; QString outputFormat() const; + private slots: + void on_mBrowseButton_clicked(); + void on_mSaveAsLineEdit_textChanged( const QString& text ); + private: QgsRasterDataProvider* mDataProvider; diff --git a/src/ui/qgsrasterlayersaveasdialogbase.ui b/src/ui/qgsrasterlayersaveasdialogbase.ui index e1178d915bad..604147dbebb4 100644 --- a/src/ui/qgsrasterlayersaveasdialogbase.ui +++ b/src/ui/qgsrasterlayersaveasdialogbase.ui @@ -40,14 +40,14 @@ - false + true - false + true Browse... @@ -115,7 +115,7 @@ - + Qt::Horizontal @@ -129,7 +129,7 @@ - buttonBox + mButtonBox accepted() QgsRasterLayerSaveAsDialogBase accept() @@ -145,7 +145,7 @@ - buttonBox + mButtonBox rejected() QgsRasterLayerSaveAsDialogBase reject()