[processing] Allow temporary folder to be temporarily changed through

the algorithm settings panel
This commit is contained in:
Nyall Dawson 2023-03-20 15:00:36 +10:00
parent fa22256717
commit 9d44782be4
3 changed files with 66 additions and 22 deletions

View File

@ -159,6 +159,7 @@ QgsProcessingAlgorithmDialogBase::QgsProcessingAlgorithmDialogBase( QWidget *par
mGeometryCheck = mContextOptionsWidget->invalidGeometryCheck(); mGeometryCheck = mContextOptionsWidget->invalidGeometryCheck();
mDistanceUnits = mContextOptionsWidget->distanceUnit(); mDistanceUnits = mContextOptionsWidget->distanceUnit();
mAreaUnits = mContextOptionsWidget->areaUnit(); mAreaUnits = mContextOptionsWidget->areaUnit();
mTemporaryFolderOverride = mContextOptionsWidget->temporaryFolder();
} ); } );
} }
} }
@ -867,6 +868,7 @@ void QgsProcessingAlgorithmDialogBase::applyContextOverrides( QgsProcessingConte
context->setInvalidGeometryCheck( mGeometryCheck ); context->setInvalidGeometryCheck( mGeometryCheck );
context->setDistanceUnit( mDistanceUnits ); context->setDistanceUnit( mDistanceUnits );
context->setAreaUnit( mAreaUnits ); 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( "Skip (Ignore) Features with Invalid Geometries" ), QgsFeatureRequest::GeometrySkipInvalid );
mComboInvalidFeatureFiltering->addItem( tr( "Stop Algorithm Execution When a Geometry is Invalid" ), QgsFeatureRequest::GeometryAbortOnInvalid ); 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 ) ); mDistanceUnitsCombo->addItem( tr( "Default" ), QVariant::fromValue( Qgis::DistanceUnit::Unknown ) );
for ( Qgis::DistanceUnit unit : for ( Qgis::DistanceUnit unit :
{ {
@ -1005,6 +1011,7 @@ QgsProcessingContextOptionsWidget::QgsProcessingContextOptionsWidget( QWidget *p
connect( mComboInvalidFeatureFiltering, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged ); connect( mComboInvalidFeatureFiltering, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
connect( mDistanceUnitsCombo, 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( mAreaUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
connect( mTemporaryFolderWidget, &QgsFileWidget::fileChanged, this, &QgsPanelWidget::widgetChanged );
} }
void QgsProcessingContextOptionsWidget::setFromContext( const QgsProcessingContext *context ) 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( mComboInvalidFeatureFiltering )->setCurrentIndex( mComboInvalidFeatureFiltering->findData( static_cast< int >( context->invalidGeometryCheck() ) ) );
whileBlocking( mDistanceUnitsCombo )->setCurrentIndex( mDistanceUnitsCombo->findData( QVariant::fromValue( context->distanceUnit() ) ) ); whileBlocking( mDistanceUnitsCombo )->setCurrentIndex( mDistanceUnitsCombo->findData( QVariant::fromValue( context->distanceUnit() ) ) );
whileBlocking( mAreaUnitsCombo )->setCurrentIndex( mAreaUnitsCombo->findData( QVariant::fromValue( context->areaUnit() ) ) ); whileBlocking( mAreaUnitsCombo )->setCurrentIndex( mAreaUnitsCombo->findData( QVariant::fromValue( context->areaUnit() ) ) );
whileBlocking( mTemporaryFolderWidget )->setFilePath( context->temporaryFolder() );
} }
QgsFeatureRequest::InvalidGeometryCheck QgsProcessingContextOptionsWidget::invalidGeometryCheck() const QgsFeatureRequest::InvalidGeometryCheck QgsProcessingContextOptionsWidget::invalidGeometryCheck() const
@ -1029,4 +1037,9 @@ Qgis::AreaUnit QgsProcessingContextOptionsWidget::areaUnit() const
return mAreaUnitsCombo->currentData().value< Qgis::AreaUnit >(); return mAreaUnitsCombo->currentData().value< Qgis::AreaUnit >();
} }
QString QgsProcessingContextOptionsWidget::temporaryFolder()
{
return mTemporaryFolderWidget->filePath();
}
///@endcond ///@endcond

View File

@ -474,6 +474,7 @@ class GUI_EXPORT QgsProcessingAlgorithmDialogBase : public QDialog, public QgsPr
QgsFeatureRequest::InvalidGeometryCheck mGeometryCheck = QgsFeatureRequest::InvalidGeometryCheck::GeometryAbortOnInvalid; QgsFeatureRequest::InvalidGeometryCheck mGeometryCheck = QgsFeatureRequest::InvalidGeometryCheck::GeometryAbortOnInvalid;
Qgis::DistanceUnit mDistanceUnits = Qgis::DistanceUnit::Unknown; Qgis::DistanceUnit mDistanceUnits = Qgis::DistanceUnit::Unknown;
Qgis::AreaUnit mAreaUnits = Qgis::AreaUnit::Unknown; Qgis::AreaUnit mAreaUnits = Qgis::AreaUnit::Unknown;
QString mTemporaryFolderOverride;
QString formatHelp( QgsProcessingAlgorithm *algorithm ); QString formatHelp( QgsProcessingAlgorithm *algorithm );
void scrollToBottomOfLog(); void scrollToBottomOfLog();
@ -558,6 +559,11 @@ class GUI_EXPORT QgsProcessingContextOptionsWidget : public QgsPanelWidget, priv
*/ */
Qgis::AreaUnit areaUnit() const; Qgis::AreaUnit areaUnit() const;
/**
* Returns the optional temporary folder override location.
*/
QString temporaryFolder();
}; };
#endif #endif

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>448</width> <width>448</width>
<height>197</height> <height>328</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -43,7 +43,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>448</width> <width>448</width>
<height>197</height> <height>328</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0"> <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
@ -54,26 +54,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Invalid feature filtering</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2"> <item row="2" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
@ -103,6 +83,45 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Invalid feature filtering</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Environment Settings</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Temporary folder</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QgsFileWidget" name="mTemporaryFolderWidget" native="true"/>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
@ -122,6 +141,12 @@
<header>qgspanelwidget.h</header> <header>qgspanelwidget.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget>
<class>QgsFileWidget</class>
<extends>QWidget</extends>
<header>qgsfilewidget.h</header>
<container>1</container>
</customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections/> <connections/>