1 /*************************************************************************** 2 qgsrasterlayersaveasdialog.h 3 --------------------- 4 begin : May 2012 5 copyright : (C) 2012 by Marco Hugentobler 6 email : marco dot hugentobler at sourcepole dot ch 7 *************************************************************************** 8 * * 9 * This program is free software; you can redistribute it and/or modify * 10 * it under the terms of the GNU General Public License as published by * 11 * the Free Software Foundation; either version 2 of the License, or * 12 * (at your option) any later version. * 13 * * 14 ***************************************************************************/ 15 #ifndef QGSRASTERLAYERSAVEASDIALOG_H 16 #define QGSRASTERLAYERSAVEASDIALOG_H 17 18 #include "ui_qgsrasterlayersaveasdialogbase.h" 19 #include "qgsrectangle.h" 20 #include "qgscoordinatereferencesystem.h" 21 #include "qgsrasterrange.h" 22 #include "qgis_gui.h" 23 #include "qgshelp.h" 24 25 class QgsRasterLayer; 26 class QgsRasterDataProvider; 27 class QgsRasterFormatOptionsWidget; 28 29 /** 30 * \ingroup gui 31 * \class QgsRasterLayerSaveAsDialog 32 */ 33 class GUI_EXPORT QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRasterLayerSaveAsDialogBase 34 { 35 Q_OBJECT 36 public: 37 enum Mode 38 { 39 RawDataMode, 40 RenderedImageMode 41 }; 42 enum CrsState 43 { 44 OriginalCrs, 45 CurrentCrs, 46 UserCrs 47 }; 48 enum ResolutionState 49 { 50 OriginalResolution, 51 UserResolution 52 }; 53 54 //! Constructor for QgsRasterLayerSaveAsDialog 55 QgsRasterLayerSaveAsDialog( QgsRasterLayer *rasterLayer, 56 QgsRasterDataProvider *sourceProvider, 57 const QgsRectangle ¤tExtent, 58 const QgsCoordinateReferenceSystem &layerCrs, 59 const QgsCoordinateReferenceSystem ¤tCrs, 60 QWidget *parent SIP_TRANSFERTHIS = nullptr, 61 Qt::WindowFlags f = Qt::WindowFlags() ); 62 63 Mode mode() const; 64 int nColumns() const; 65 int nRows() const; 66 double xResolution() const; 67 double yResolution() const; 68 int maximumTileSizeX() const; 69 int maximumTileSizeY() const; 70 bool tileMode() const; 71 72 /** 73 * Returns TRUE if the "add to canvas" checkbox is checked. 74 * 75 * \see setAddToCanvas() 76 */ 77 bool addToCanvas() const; 78 79 /** 80 * Sets whether the "add to canvas" checkbox should be \a checked. 81 * 82 * \see addToCanvas() 83 * \since QGIS 3.6 84 */ 85 void setAddToCanvas( bool checked ); 86 87 QString outputFileName() const; 88 89 /** 90 * Name of the output layer within GeoPackage file 91 * \since QGIS 3.4 92 */ 93 QString outputLayerName() const; 94 QString outputFormat() const; 95 QgsCoordinateReferenceSystem outputCrs(); 96 QStringList createOptions() const; 97 QgsRectangle outputRectangle() const; 98 QgsRasterRangeList noData() const; 99 100 QList< int > pyramidsList() const; 101 QgsRaster::RasterBuildPyramids buildPyramidsFlag() const; pyramidsResamplingMethod()102 QString pyramidsResamplingMethod() const { return mPyramidsOptionsWidget->resamplingMethod(); } pyramidsFormat()103 QgsRaster::RasterPyramidsFormat pyramidsFormat() const { return mPyramidsOptionsWidget->pyramidsFormat(); } pyramidsConfigOptions()104 QStringList pyramidsConfigOptions() const { return mPyramidsOptionsWidget->configOptions(); } 105 106 void hideFormat(); 107 void hideOutput(); 108 109 public slots: 110 void accept() override; 111 112 private slots: 113 void mRawModeRadioButton_toggled( bool ); 114 void mFormatComboBox_currentIndexChanged( const QString &text ); mResolutionRadioButton_toggled(bool)115 void mResolutionRadioButton_toggled( bool ) { toggleResolutionSize(); } mOriginalResolutionPushButton_clicked()116 void mOriginalResolutionPushButton_clicked() { setOriginalResolution(); } mXResolutionLineEdit_textEdited(const QString &)117 void mXResolutionLineEdit_textEdited( const QString & ) { mResolutionState = UserResolution; recalcSize(); } mYResolutionLineEdit_textEdited(const QString &)118 void mYResolutionLineEdit_textEdited( const QString & ) { mResolutionState = UserResolution; recalcSize(); } 119 mOriginalSizePushButton_clicked()120 void mOriginalSizePushButton_clicked() { setOriginalSize(); } mColumnsLineEdit_textEdited(const QString &)121 void mColumnsLineEdit_textEdited( const QString & ) { mResolutionState = UserResolution; recalcResolution(); } mRowsLineEdit_textEdited(const QString &)122 void mRowsLineEdit_textEdited( const QString & ) { mResolutionState = UserResolution; recalcResolution(); } 123 124 void mAddNoDataManuallyToolButton_clicked(); 125 void mLoadTransparentNoDataToolButton_clicked(); 126 void mRemoveSelectedNoDataToolButton_clicked(); 127 void mRemoveAllNoDataToolButton_clicked(); 128 void noDataCellTextEdited( const QString &text ); 129 void mTileModeCheckBox_toggled( bool toggled ); 130 void mPyramidsGroupBox_toggled( bool toggled ); 131 void populatePyramidsLevels(); 132 void extentChanged(); 133 void crsChanged(); 134 void showHelp(); 135 136 private: 137 QgsRasterLayer *mRasterLayer = nullptr; 138 QgsRasterDataProvider *mDataProvider = nullptr; 139 QgsRectangle mCurrentExtent; 140 QgsCoordinateReferenceSystem mLayerCrs; // may differ from provider CRS 141 QgsCoordinateReferenceSystem mCurrentCrs; 142 QgsCoordinateReferenceSystem mPreviousCrs; 143 ResolutionState mResolutionState; 144 QVector<bool> mNoDataToEdited; 145 146 void setValidators(); 147 void toggleResolutionSize(); 148 void setResolution( double xRes, double yRes, const QgsCoordinateReferenceSystem &srcCrs ); 149 void setOriginalResolution(); 150 void setOriginalSize(); 151 void recalcSize(); 152 void recalcResolution(); 153 void updateResolutionStateMsg(); 154 void recalcResolutionSize(); 155 156 void addNoDataRow( double min, double max ); 157 void setNoDataToEdited( int row ); 158 double noDataCellValue( int row, int column ) const; 159 void adjustNoDataCellWidth( int row, int column ); 160 bool validate() const; 161 // Returns true if the output layer already exists. 162 bool outputLayerExists() const; 163 164 void insertAvailableOutputFormats(); 165 166 friend class TestQgsRasterLayerSaveAsDialog; 167 }; 168 169 170 #endif // QGSRASTERLAYERSAVEASDIALOG_H 171 172