From 9d44782be4214593f3658a9133ef648b2a64d30c Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 20 Mar 2023 15:00:36 +1000 Subject: [PATCH] [processing] Allow temporary folder to be temporarily changed through the algorithm settings panel --- .../qgsprocessingalgorithmdialogbase.cpp | 13 ++++ .../qgsprocessingalgorithmdialogbase.h | 6 ++ .../qgsprocessingcontextoptionsbase.ui | 69 +++++++++++++------ 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp b/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp index 0f3e093caee..d6a8ae4a4a2 100644 --- a/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp +++ b/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp @@ -159,6 +159,7 @@ QgsProcessingAlgorithmDialogBase::QgsProcessingAlgorithmDialogBase( QWidget *par mGeometryCheck = mContextOptionsWidget->invalidGeometryCheck(); mDistanceUnits = mContextOptionsWidget->distanceUnit(); mAreaUnits = mContextOptionsWidget->areaUnit(); + mTemporaryFolderOverride = mContextOptionsWidget->temporaryFolder(); } ); } } @@ -867,6 +868,7 @@ void QgsProcessingAlgorithmDialogBase::applyContextOverrides( QgsProcessingConte context->setInvalidGeometryCheck( mGeometryCheck ); context->setDistanceUnit( mDistanceUnits ); context->setAreaUnit( mAreaUnits ); + context->setTemporaryFolder( mTemporaryFolderOverride ); } } @@ -946,6 +948,10 @@ QgsProcessingContextOptionsWidget::QgsProcessingContextOptionsWidget( QWidget *p mComboInvalidFeatureFiltering->addItem( tr( "Skip (Ignore) Features with Invalid Geometries" ), QgsFeatureRequest::GeometrySkipInvalid ); mComboInvalidFeatureFiltering->addItem( tr( "Stop Algorithm Execution When a Geometry is Invalid" ), QgsFeatureRequest::GeometryAbortOnInvalid ); + mTemporaryFolderWidget->setDialogTitle( tr( "Select Temporary Directory" ) ); + mTemporaryFolderWidget->setStorageMode( QgsFileWidget::GetDirectory ); + mTemporaryFolderWidget->lineEdit()->setPlaceholderText( tr( "Default" ) ); + mDistanceUnitsCombo->addItem( tr( "Default" ), QVariant::fromValue( Qgis::DistanceUnit::Unknown ) ); for ( Qgis::DistanceUnit unit : { @@ -1005,6 +1011,7 @@ QgsProcessingContextOptionsWidget::QgsProcessingContextOptionsWidget( QWidget *p connect( mComboInvalidFeatureFiltering, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged ); connect( mDistanceUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged ); connect( mAreaUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged ); + connect( mTemporaryFolderWidget, &QgsFileWidget::fileChanged, this, &QgsPanelWidget::widgetChanged ); } void QgsProcessingContextOptionsWidget::setFromContext( const QgsProcessingContext *context ) @@ -1012,6 +1019,7 @@ void QgsProcessingContextOptionsWidget::setFromContext( const QgsProcessingConte whileBlocking( mComboInvalidFeatureFiltering )->setCurrentIndex( mComboInvalidFeatureFiltering->findData( static_cast< int >( context->invalidGeometryCheck() ) ) ); whileBlocking( mDistanceUnitsCombo )->setCurrentIndex( mDistanceUnitsCombo->findData( QVariant::fromValue( context->distanceUnit() ) ) ); whileBlocking( mAreaUnitsCombo )->setCurrentIndex( mAreaUnitsCombo->findData( QVariant::fromValue( context->areaUnit() ) ) ); + whileBlocking( mTemporaryFolderWidget )->setFilePath( context->temporaryFolder() ); } QgsFeatureRequest::InvalidGeometryCheck QgsProcessingContextOptionsWidget::invalidGeometryCheck() const @@ -1029,4 +1037,9 @@ Qgis::AreaUnit QgsProcessingContextOptionsWidget::areaUnit() const return mAreaUnitsCombo->currentData().value< Qgis::AreaUnit >(); } +QString QgsProcessingContextOptionsWidget::temporaryFolder() +{ + return mTemporaryFolderWidget->filePath(); +} + ///@endcond diff --git a/src/gui/processing/qgsprocessingalgorithmdialogbase.h b/src/gui/processing/qgsprocessingalgorithmdialogbase.h index 6a35b42232d..882ebbdd597 100644 --- a/src/gui/processing/qgsprocessingalgorithmdialogbase.h +++ b/src/gui/processing/qgsprocessingalgorithmdialogbase.h @@ -474,6 +474,7 @@ class GUI_EXPORT QgsProcessingAlgorithmDialogBase : public QDialog, public QgsPr QgsFeatureRequest::InvalidGeometryCheck mGeometryCheck = QgsFeatureRequest::InvalidGeometryCheck::GeometryAbortOnInvalid; Qgis::DistanceUnit mDistanceUnits = Qgis::DistanceUnit::Unknown; Qgis::AreaUnit mAreaUnits = Qgis::AreaUnit::Unknown; + QString mTemporaryFolderOverride; QString formatHelp( QgsProcessingAlgorithm *algorithm ); void scrollToBottomOfLog(); @@ -558,6 +559,11 @@ class GUI_EXPORT QgsProcessingContextOptionsWidget : public QgsPanelWidget, priv */ Qgis::AreaUnit areaUnit() const; + /** + * Returns the optional temporary folder override location. + */ + QString temporaryFolder(); + }; #endif diff --git a/src/ui/processing/qgsprocessingcontextoptionsbase.ui b/src/ui/processing/qgsprocessingcontextoptionsbase.ui index 560b30efa55..9a835bbb268 100644 --- a/src/ui/processing/qgsprocessingcontextoptionsbase.ui +++ b/src/ui/processing/qgsprocessingcontextoptionsbase.ui @@ -7,7 +7,7 @@ 0 0 448 - 197 + 328 @@ -43,7 +43,7 @@ 0 0 448 - 197 + 328 @@ -54,26 +54,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Invalid feature filtering - - - @@ -103,6 +83,45 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Invalid feature filtering + + + + + + + Environment Settings + + + + + + Temporary folder + + + + + + + + + @@ -122,6 +141,12 @@
qgspanelwidget.h
1 + + QgsFileWidget + QWidget +
qgsfilewidget.h
+ 1 +