diff --git a/src/app/mesh/qgsmeshcalculatordialog.cpp b/src/app/mesh/qgsmeshcalculatordialog.cpp index 5315e1f5d29..3cb8b61b421 100644 --- a/src/app/mesh/qgsmeshcalculatordialog.cpp +++ b/src/app/mesh/qgsmeshcalculatordialog.cpp @@ -25,6 +25,7 @@ #include "qgssettings.h" #include "qgsgui.h" #include "qgsvectorlayer.h" +#include "qgsmapcanvas.h" #include "qgsmaplayerproxymodel.h" #include "qgswkbtypes.h" #include "qgsfeatureiterator.h" @@ -40,8 +41,10 @@ #include #include -QgsMeshCalculatorDialog::QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer, QWidget *parent, Qt::WindowFlags f ) - : QDialog( parent, f ), mLayer( meshLayer ) +QgsMeshCalculatorDialog::QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer, QgsMapCanvas *mapCanvas, QWidget *parent, Qt::WindowFlags f ) + : QDialog( parent, f ) + , mLayer( meshLayer ) + , mMapCanvas( mapCanvas ) { setupUi( this ); QgsGui::enableAutoGeometryRestore( this ); @@ -60,7 +63,6 @@ QgsMeshCalculatorDialog::QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer, QWidg connect( mOutputGroupNameLineEdit, &QLineEdit::textChanged, this, &QgsMeshCalculatorDialog::updateInfoMessage ); connect( mDatasetsListWidget, &QListView::doubleClicked, this, &QgsMeshCalculatorDialog::datasetGroupEntry ); - connect( mCurrentLayerExtentButton, &QPushButton::clicked, this, &QgsMeshCalculatorDialog::mCurrentLayerExtentButton_clicked ); connect( mAllTimesButton, &QPushButton::clicked, this, &QgsMeshCalculatorDialog::mAllTimesButton_clicked ); connect( mExpressionTextEdit, &QTextEdit::textChanged, this, &QgsMeshCalculatorDialog::updateInfoMessage ); @@ -68,11 +70,6 @@ QgsMeshCalculatorDialog::QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer, QWidg maskBox->setVisible( false ); useMaskCb->setEnabled( cboLayerMask->count() ); - mXMaxSpinBox->setShowClearButton( false ); - mXMinSpinBox->setShowClearButton( false ); - mYMaxSpinBox->setShowClearButton( false ); - mYMinSpinBox->setShowClearButton( false ); - connect( mPlusPushButton, &QPushButton::clicked, this, &QgsMeshCalculatorDialog::mPlusPushButton_clicked ); connect( mMinusPushButton, &QPushButton::clicked, this, &QgsMeshCalculatorDialog::mMinusPushButton_clicked ); connect( mLessButton, &QPushButton::clicked, this, &QgsMeshCalculatorDialog::mLessButton_clicked ); @@ -101,7 +98,16 @@ QgsMeshCalculatorDialog::QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer, QWidg mExpressionTextEdit->setCurrentFont( QFontDatabase::systemFont( QFontDatabase::FixedFont ) ); - useFullLayerExtent(); + mExtentGroupBox->setCurrentExtent( mMapCanvas->extent(), mMapCanvas->mapSettings().destinationCrs() ); + if ( mLayer ) + { + mExtentGroupBox->setOutputExtentFromLayer( mLayer ); + } + else + { + mExtentGroupBox->setOutputExtentFromCurrent(); + } + repopulateTimeCombos(); mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); connect( mButtonBox, &QDialogButtonBox::helpRequested, this, [=] { @@ -140,13 +146,7 @@ QString QgsMeshCalculatorDialog::outputFile() const QgsRectangle QgsMeshCalculatorDialog::outputExtent() const { - const QgsRectangle ret( - mXMinSpinBox->value(), - mYMinSpinBox->value(), - mXMaxSpinBox->value(), - mYMaxSpinBox->value() - ); - return ret; + return mExtentGroupBox->outputExtent(); } QgsGeometry QgsMeshCalculatorDialog::maskGeometry() const @@ -286,7 +286,7 @@ void QgsMeshCalculatorDialog::datasetGroupEntry( const QModelIndex &index ) void QgsMeshCalculatorDialog::toggleExtendMask() { bool visible = useMaskCb->isChecked(); - extendBox->setVisible( !visible ); + mExtentGroupBox->setVisible( !visible ); maskBox->setVisible( visible ); } @@ -390,11 +390,6 @@ QString QgsMeshCalculatorDialog::datasetGroupName( const QModelIndex &index ) co return index.data( Qt::DisplayRole ).toString(); } -void QgsMeshCalculatorDialog::mCurrentLayerExtentButton_clicked() -{ - useFullLayerExtent(); -} - void QgsMeshCalculatorDialog::mAllTimesButton_clicked() { useAllTimesFromLayer(); @@ -591,19 +586,6 @@ void QgsMeshCalculatorDialog::populateDriversComboBox() mOutputFormatComboBox->setCurrentIndex( 0 ); } -void QgsMeshCalculatorDialog::useFullLayerExtent() -{ - QgsMeshLayer *layer = meshLayer(); - if ( !layer ) - return; - - const QgsRectangle layerExtent = layer->extent(); - mXMinSpinBox->setValue( layerExtent.xMinimum() ); - mXMaxSpinBox->setValue( layerExtent.xMaximum() ); - mYMinSpinBox->setValue( layerExtent.yMinimum() ); - mYMaxSpinBox->setValue( layerExtent.yMaximum() ); -} - void QgsMeshCalculatorDialog::useAllTimesFromLayer() { const QString datasetGroupName = currentDatasetGroup(); diff --git a/src/app/mesh/qgsmeshcalculatordialog.h b/src/app/mesh/qgsmeshcalculatordialog.h index 68ff674f6ec..c89fd02227e 100644 --- a/src/app/mesh/qgsmeshcalculatordialog.h +++ b/src/app/mesh/qgsmeshcalculatordialog.h @@ -22,6 +22,8 @@ #include "qgsmeshcalculator.h" #include "qgis_app.h" +class QgsMapCanvas; + //! A dialog to enter a mesh calculation expression class APP_EXPORT QgsMeshCalculatorDialog : public QDialog, private Ui::QgsMeshCalculatorDialogBase { @@ -33,7 +35,7 @@ class APP_EXPORT QgsMeshCalculatorDialog : public QDialog, private Ui::QgsMeshCa * \param parent widget * \param f window flags */ - QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer = nullptr, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags() ); + QgsMeshCalculatorDialog( QgsMeshLayer *meshLayer = nullptr, QgsMapCanvas *mapCanvas = nullptr, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags() ); ~QgsMeshCalculatorDialog(); //! Returns new mesh calculator created from dialog options @@ -44,7 +46,6 @@ class APP_EXPORT QgsMeshCalculatorDialog : public QDialog, private Ui::QgsMeshCa private slots: void datasetGroupEntry( const QModelIndex &index ); - void mCurrentLayerExtentButton_clicked(); void mAllTimesButton_clicked(); void toggleExtendMask(); void updateInfoMessage(); @@ -127,6 +128,7 @@ class APP_EXPORT QgsMeshCalculatorDialog : public QDialog, private Ui::QgsMeshCa void populateDriversComboBox(); QgsMeshLayer *mLayer; + QgsMapCanvas *mMapCanvas = nullptr; QHash mMeshDrivers; QStringList mVariableNames; diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 439ea393fc1..64178b7a5dc 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -6214,7 +6214,7 @@ void QgisApp::showMeshCalculator() QMessageBox::information( this, tr( "Mesh Calculator" ), tr( "Mesh calculator with mesh layer in edit mode is not supported." ) ); return; } - QgsMeshCalculatorDialog d( meshLayer, this ); + QgsMeshCalculatorDialog d( meshLayer, mMapCanvas, this ); if ( d.exec() == QDialog::Accepted ) { //invoke analysis library diff --git a/src/ui/mesh/qgsmeshcalculatordialogbase.ui b/src/ui/mesh/qgsmeshcalculatordialogbase.ui index 11db2b54a43..806ee8f5d29 100644 --- a/src/ui/mesh/qgsmeshcalculatordialogbase.ui +++ b/src/ui/mesh/qgsmeshcalculatordialogbase.ui @@ -7,7 +7,7 @@ 0 0 912 - 954 + 982 @@ -174,138 +174,10 @@ - - - - 0 - 0 - + + + Spatial Extent - - - 0 - - - 0 - - - - - 5 - - - -999999999.000000000000000 - - - 999999999.000000000000000 - - - - - - - Y min - - - - - - - X max - - - - - - - 5 - - - -999999999.000000000000000 - - - 999999999.000000000000000 - - - - - - - Y max - - - - - - - 5 - - - -999999999.000000000000000 - - - 999999999.000000000000000 - - - - - - - 5 - - - -999999999.000000000000000 - - - 999999999.000000000000000 - - - - - - - X min - - - - - - - - - Use Selected Layer Extent - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - @@ -665,11 +537,6 @@
qgscollapsiblegroupbox.h
1 - - QgsDoubleSpinBox - QDoubleSpinBox -
qgsdoublespinbox.h
-
QgsFileWidget QWidget @@ -681,6 +548,12 @@ QComboBox
qgsmaplayercombobox.h
+ + QgsExtentGroupBox + QGroupBox +
qgsextentgroupbox.h
+ 1 +
mDatasetsListWidget @@ -690,11 +563,6 @@ useExtentCb useMaskCb cboLayerMask - mCurrentLayerExtentButton - mXMinSpinBox - mXMaxSpinBox - mYMinSpinBox - mYMaxSpinBox mAllTimesButton mStartTimeComboBox mEndTimeComboBox diff --git a/tests/src/app/testqgsmeshcalculatordialog.cpp b/tests/src/app/testqgsmeshcalculatordialog.cpp index 0a746336434..f8150a0ff66 100644 --- a/tests/src/app/testqgsmeshcalculatordialog.cpp +++ b/tests/src/app/testqgsmeshcalculatordialog.cpp @@ -85,7 +85,7 @@ void TestQgsMeshCalculatorDialog::testCalc() if ( !QgsTest::runFlakyTests() ) QSKIP( "This test is disabled on Travis CI environment" ); - auto dialog = std::make_unique( mpMeshLayer ); + auto dialog = std::make_unique( mpMeshLayer, mQgisApp->mapCanvas() ); const int groupCount = mpMeshLayer->dataProvider()->datasetGroupCount();