QgsRasterCalcDialog::QgsRasterCalcDialog( QWidget * parent, Qt::WindowFlags f ): QDialog( parent, f ) { setupUi( this ); //add supported output formats insertAvailableOutputFormats(); insertAvailableRasterBands(); }
QgsRasterCalcDialog::QgsRasterCalcDialog( QgsRasterLayer *rasterLayer, QWidget *parent, Qt::WindowFlags f ): QDialog( parent, f ) { setupUi( this ); QgsGui::enableAutoGeometryRestore( this ); connect( mRasterBandsListWidget, &QListWidget::itemDoubleClicked, this, &QgsRasterCalcDialog::mRasterBandsListWidget_itemDoubleClicked ); connect( mButtonBox, &QDialogButtonBox::accepted, this, &QgsRasterCalcDialog::mButtonBox_accepted ); connect( mCurrentLayerExtentButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mCurrentLayerExtentButton_clicked ); connect( mExpressionTextEdit, &QTextEdit::textChanged, this, &QgsRasterCalcDialog::mExpressionTextEdit_textChanged ); connect( mPlusPushButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mPlusPushButton_clicked ); connect( mMinusPushButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mMinusPushButton_clicked ); connect( mMultiplyPushButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mMultiplyPushButton_clicked ); connect( mDividePushButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mDividePushButton_clicked ); connect( mSqrtButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mSqrtButton_clicked ); connect( mCosButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mCosButton_clicked ); connect( mSinButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mSinButton_clicked ); connect( mASinButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mASinButton_clicked ); connect( mExpButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mExpButton_clicked ); connect( mLnButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mLnButton_clicked ); connect( mLogButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mLogButton_clicked ); connect( mNotEqualButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mNotEqualButton_clicked ); connect( mTanButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mTanButton_clicked ); connect( mACosButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mACosButton_clicked ); connect( mATanButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mATanButton_clicked ); connect( mOpenBracketPushButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mOpenBracketPushButton_clicked ); connect( mCloseBracketPushButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mCloseBracketPushButton_clicked ); connect( mLessButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mLessButton_clicked ); connect( mGreaterButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mGreaterButton_clicked ); connect( mEqualButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mEqualButton_clicked ); connect( mLesserEqualButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mLesserEqualButton_clicked ); connect( mGreaterEqualButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mGreaterEqualButton_clicked ); connect( mAndButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mAndButton_clicked ); connect( mOrButton, &QPushButton::clicked, this, &QgsRasterCalcDialog::mOrButton_clicked ); connect( mButtonBox, &QDialogButtonBox::helpRequested, this, &QgsRasterCalcDialog::showHelp ); if ( rasterLayer && rasterLayer->dataProvider() && rasterLayer->dataProvider()->name() == QLatin1String( "gdal" ) ) { setExtentSize( rasterLayer->width(), rasterLayer->height(), rasterLayer->extent() ); mCrsSelector->setCrs( rasterLayer->crs() ); } //add supported output formats insertAvailableOutputFormats(); insertAvailableRasterBands(); mExpressionTextEdit->setCurrentFont( QFontDatabase::systemFont( QFontDatabase::FixedFont ) ); QgsSettings settings; mOutputLayer->setStorageMode( QgsFileWidget::SaveFile ); mOutputLayer->setDialogTitle( tr( "Enter result file" ) ); mOutputLayer->setDefaultRoot( settings.value( QStringLiteral( "/RasterCalculator/lastOutputDir" ), QDir::homePath() ).toString() ); connect( mOutputLayer, &QgsFileWidget::fileChanged, this, [ = ]() { setAcceptButtonState(); } ); }
QgsRasterCalcDialog::QgsRasterCalcDialog( QWidget * parent, Qt::WindowFlags f ): QDialog( parent, f ) { setupUi( this ); QSettings settings; restoreGeometry( settings.value( "/Windows/RasterCalc/geometry" ).toByteArray() ); //add supported output formats insertAvailableOutputFormats(); insertAvailableRasterBands(); if ( !mAvailableRasterBands.isEmpty() ) { //grab default crs from first raster mCrsSelector->setCrs( mAvailableRasterBands.at( 0 ).raster->crs() ); } }
QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterLayer *rasterLayer, QgsRasterDataProvider *sourceProvider, const QgsRectangle ¤tExtent, const QgsCoordinateReferenceSystem &layerCrs, const QgsCoordinateReferenceSystem ¤tCrs, QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) , mRasterLayer( rasterLayer ) , mDataProvider( sourceProvider ) , mCurrentExtent( currentExtent ) , mLayerCrs( layerCrs ) , mCurrentCrs( currentCrs ) , mResolutionState( OriginalResolution ) { setupUi( this ); connect( mRawModeRadioButton, &QRadioButton::toggled, this, &QgsRasterLayerSaveAsDialog::mRawModeRadioButton_toggled ); connect( mFormatComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsRasterLayerSaveAsDialog::mFormatComboBox_currentIndexChanged ); connect( mResolutionRadioButton, &QRadioButton::toggled, this, &QgsRasterLayerSaveAsDialog::mResolutionRadioButton_toggled ); connect( mOriginalResolutionPushButton, &QPushButton::clicked, this, &QgsRasterLayerSaveAsDialog::mOriginalResolutionPushButton_clicked ); connect( mXResolutionLineEdit, &QLineEdit::textEdited, this, &QgsRasterLayerSaveAsDialog::mXResolutionLineEdit_textEdited ); connect( mYResolutionLineEdit, &QLineEdit::textEdited, this, &QgsRasterLayerSaveAsDialog::mYResolutionLineEdit_textEdited ); connect( mOriginalSizePushButton, &QPushButton::clicked, this, &QgsRasterLayerSaveAsDialog::mOriginalSizePushButton_clicked ); connect( mColumnsLineEdit, &QLineEdit::textEdited, this, &QgsRasterLayerSaveAsDialog::mColumnsLineEdit_textEdited ); connect( mRowsLineEdit, &QLineEdit::textEdited, this, &QgsRasterLayerSaveAsDialog::mRowsLineEdit_textEdited ); connect( mAddNoDataManuallyToolButton, &QPushButton::clicked, this, &QgsRasterLayerSaveAsDialog::mAddNoDataManuallyToolButton_clicked ); connect( mLoadTransparentNoDataToolButton, &QPushButton::clicked, this, &QgsRasterLayerSaveAsDialog::mLoadTransparentNoDataToolButton_clicked ); connect( mRemoveSelectedNoDataToolButton, &QPushButton::clicked, this, &QgsRasterLayerSaveAsDialog::mRemoveSelectedNoDataToolButton_clicked ); connect( mRemoveAllNoDataToolButton, &QPushButton::clicked, this, &QgsRasterLayerSaveAsDialog::mRemoveAllNoDataToolButton_clicked ); connect( mTileModeCheckBox, &QCheckBox::toggled, this, &QgsRasterLayerSaveAsDialog::mTileModeCheckBox_toggled ); connect( mPyramidsGroupBox, &QgsCollapsibleGroupBox::toggled, this, &QgsRasterLayerSaveAsDialog::mPyramidsGroupBox_toggled ); mAddNoDataManuallyToolButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/symbologyAdd.svg" ) ) ); mLoadTransparentNoDataToolButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionFileOpen.svg" ) ) ); mRemoveSelectedNoDataToolButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/symbologyRemove.svg" ) ) ); mRemoveAllNoDataToolButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionRemove.svg" ) ) ); mNoDataTableWidget->setColumnCount( 2 ); mNoDataTableWidget->setHorizontalHeaderItem( 0, new QTableWidgetItem( tr( "From" ) ) ); mNoDataTableWidget->setHorizontalHeaderItem( 1, new QTableWidgetItem( tr( "To" ) ) ); mRawModeRadioButton_toggled( true ); setValidators(); toggleResolutionSize(); insertAvailableOutputFormats(); //fill reasonable default values depending on the provider if ( mDataProvider ) { if ( mDataProvider->capabilities() & QgsRasterDataProvider::Size ) { setOriginalResolution(); int xSize = mDataProvider->xSize(); int ySize = mDataProvider->ySize(); mMaximumSizeXLineEdit->setText( QString::number( xSize ) ); mMaximumSizeYLineEdit->setText( QString::number( ySize ) ); } else //wms, sometimes wcs { mTileModeCheckBox->setChecked( true ); mMaximumSizeXLineEdit->setText( QString::number( 2000 ) ); mMaximumSizeYLineEdit->setText( QString::number( 2000 ) ); } // setup creation option widget mCreateOptionsWidget->setProvider( mDataProvider->name() ); if ( mDataProvider->name() == QLatin1String( "gdal" ) ) { mCreateOptionsWidget->setFormat( mFormatComboBox->currentData().toString() ); } mCreateOptionsWidget->setRasterLayer( mRasterLayer ); mCreateOptionsWidget->update(); } // Only do pyramids if dealing directly with GDAL. if ( mDataProvider && mDataProvider->capabilities() & QgsRasterDataProvider::BuildPyramids ) { // setup pyramids option widget // mPyramidsOptionsWidget->createOptionsWidget()->setType( QgsRasterFormatSaveOptionsWidget::ProfileLineEdit ); mPyramidsOptionsWidget->createOptionsWidget()->setRasterLayer( mRasterLayer ); // TODO enable "use existing", has no effect for now, because using Create() in gdal provider // if ( ! mDataProvider->hasPyramids() ) // mPyramidsButtonGroup->button( QgsRaster::PyramidsCopyExisting )->setEnabled( false ); mPyramidsUseExistingCheckBox->setEnabled( false ); mPyramidsUseExistingCheckBox->setVisible( false ); populatePyramidsLevels(); connect( mPyramidsOptionsWidget, &QgsRasterPyramidsOptionsWidget::overviewListChanged, this, &QgsRasterLayerSaveAsDialog::populatePyramidsLevels ); } else { mPyramidsGroupBox->setEnabled( false ); } // restore checked state for most groupboxes (default is to restore collapsed state) // create options and pyramids will be preset, if user has selected defaults in the gdal options dlg mCreateOptionsGroupBox->setSaveCheckedState( true ); //mTilesGroupBox->setSaveCheckedState( true ); // don't restore nodata, it needs user input // pyramids are not necessarily built every time mCrsSelector->setLayerCrs( mLayerCrs ); //default to layer CRS - see https://issues.qgis.org/issues/14209 for discussion mCrsSelector->setCrs( mLayerCrs ); connect( mCrsSelector, &QgsProjectionSelectionWidget::crsChanged, this, &QgsRasterLayerSaveAsDialog::crsChanged ); QPushButton *okButton = mButtonBox->button( QDialogButtonBox::Ok ); if ( okButton ) { okButton->setEnabled( false ); } connect( mButtonBox, &QDialogButtonBox::helpRequested, this, &QgsRasterLayerSaveAsDialog::showHelp ); mExtentGroupBox->setOutputCrs( outputCrs() ); mExtentGroupBox->setOriginalExtent( mDataProvider->extent(), mLayerCrs ); mExtentGroupBox->setCurrentExtent( mCurrentExtent, mCurrentCrs ); mExtentGroupBox->setOutputExtentFromOriginal(); connect( mExtentGroupBox, &QgsExtentGroupBox::extentChanged, this, &QgsRasterLayerSaveAsDialog::extentChanged ); recalcResolutionSize(); QgsSettings settings; restoreGeometry( settings.value( QStringLiteral( "Windows/RasterLayerSaveAs/geometry" ) ).toByteArray() ); if ( mTileModeCheckBox->isChecked() ) { mTilesGroupBox->show(); mFilename->setStorageMode( QgsFileWidget::GetDirectory ); mFilename->setDialogTitle( tr( "Select Output Directory" ) ); } else { mTilesGroupBox->hide(); mFilename->setStorageMode( QgsFileWidget::SaveFile ); mFilename->setDialogTitle( tr( "Save Layer As" ) ); } mFilename->setDefaultRoot( settings.value( QStringLiteral( "UI/lastRasterFileDir" ), QDir::homePath() ).toString() ); connect( mFilename, &QgsFileWidget::fileChanged, this, [ = ]( const QString & filePath ) { QgsSettings settings; QFileInfo tmplFileInfo( filePath ); settings.setValue( QStringLiteral( "UI/lastRasterFileDir" ), tmplFileInfo.absolutePath() ); if ( !filePath.isEmpty() && mLayerName->isEnabled() ) { QFileInfo fileInfo( filePath ); mLayerName->setText( fileInfo.baseName() ); } if ( mTileModeCheckBox->isChecked() ) { QString fileName = filePath; Q_FOREVER { // TODO: would not it be better to select .vrt file instead of directory? //fileName = QFileDialog::getSaveFileName( this, tr( "Select output file" ), QString(), tr( "VRT" ) + " (*.vrt *.VRT)" ); if ( fileName.isEmpty() ) break; // canceled // Check if directory is empty QDir dir( fileName ); QString baseName = QFileInfo( fileName ).baseName(); QStringList filters; filters << QStringLiteral( "%1.*" ).arg( baseName ); QStringList files = dir.entryList( filters ); if ( files.isEmpty() ) break; if ( QMessageBox::warning( this, tr( "Save Raster Layer" ), tr( "The directory %1 contains files which will be overwritten: %2" ).arg( dir.absolutePath(), files.join( QStringLiteral( ", " ) ) ), QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Ok ) break; fileName = QFileDialog::getExistingDirectory( this, tr( "Select output directory" ), tmplFileInfo.absolutePath() ); } } QPushButton *okButton = mButtonBox->button( QDialogButtonBox::Ok ); if ( !okButton ) { return; } okButton->setEnabled( tmplFileInfo.absoluteDir().exists() ); } );