Skip to content

Commit 9d44782

Browse files
committedMar 20, 2023
[processing] Allow temporary folder to be temporarily changed through
the algorithm settings panel
1 parent fa22256 commit 9d44782

File tree

3 files changed

+64
-20
lines changed

3 files changed

+64
-20
lines changed
 

‎src/gui/processing/qgsprocessingalgorithmdialogbase.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ QgsProcessingAlgorithmDialogBase::QgsProcessingAlgorithmDialogBase( QWidget *par
159159
mGeometryCheck = mContextOptionsWidget->invalidGeometryCheck();
160160
mDistanceUnits = mContextOptionsWidget->distanceUnit();
161161
mAreaUnits = mContextOptionsWidget->areaUnit();
162+
mTemporaryFolderOverride = mContextOptionsWidget->temporaryFolder();
162163
} );
163164
}
164165
}
@@ -867,6 +868,7 @@ void QgsProcessingAlgorithmDialogBase::applyContextOverrides( QgsProcessingConte
867868
context->setInvalidGeometryCheck( mGeometryCheck );
868869
context->setDistanceUnit( mDistanceUnits );
869870
context->setAreaUnit( mAreaUnits );
871+
context->setTemporaryFolder( mTemporaryFolderOverride );
870872
}
871873
}
872874

@@ -946,6 +948,10 @@ QgsProcessingContextOptionsWidget::QgsProcessingContextOptionsWidget( QWidget *p
946948
mComboInvalidFeatureFiltering->addItem( tr( "Skip (Ignore) Features with Invalid Geometries" ), QgsFeatureRequest::GeometrySkipInvalid );
947949
mComboInvalidFeatureFiltering->addItem( tr( "Stop Algorithm Execution When a Geometry is Invalid" ), QgsFeatureRequest::GeometryAbortOnInvalid );
948950

951+
mTemporaryFolderWidget->setDialogTitle( tr( "Select Temporary Directory" ) );
952+
mTemporaryFolderWidget->setStorageMode( QgsFileWidget::GetDirectory );
953+
mTemporaryFolderWidget->lineEdit()->setPlaceholderText( tr( "Default" ) );
954+
949955
mDistanceUnitsCombo->addItem( tr( "Default" ), QVariant::fromValue( Qgis::DistanceUnit::Unknown ) );
950956
for ( Qgis::DistanceUnit unit :
951957
{
@@ -1005,13 +1011,15 @@ QgsProcessingContextOptionsWidget::QgsProcessingContextOptionsWidget( QWidget *p
10051011
connect( mComboInvalidFeatureFiltering, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
10061012
connect( mDistanceUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
10071013
connect( mAreaUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
1014+
connect( mTemporaryFolderWidget, &QgsFileWidget::fileChanged, this, &QgsPanelWidget::widgetChanged );
10081015
}
10091016

10101017
void QgsProcessingContextOptionsWidget::setFromContext( const QgsProcessingContext *context )
10111018
{
10121019
whileBlocking( mComboInvalidFeatureFiltering )->setCurrentIndex( mComboInvalidFeatureFiltering->findData( static_cast< int >( context->invalidGeometryCheck() ) ) );
10131020
whileBlocking( mDistanceUnitsCombo )->setCurrentIndex( mDistanceUnitsCombo->findData( QVariant::fromValue( context->distanceUnit() ) ) );
10141021
whileBlocking( mAreaUnitsCombo )->setCurrentIndex( mAreaUnitsCombo->findData( QVariant::fromValue( context->areaUnit() ) ) );
1022+
whileBlocking( mTemporaryFolderWidget )->setFilePath( context->temporaryFolder() );
10151023
}
10161024

10171025
QgsFeatureRequest::InvalidGeometryCheck QgsProcessingContextOptionsWidget::invalidGeometryCheck() const
@@ -1029,4 +1037,9 @@ Qgis::AreaUnit QgsProcessingContextOptionsWidget::areaUnit() const
10291037
return mAreaUnitsCombo->currentData().value< Qgis::AreaUnit >();
10301038
}
10311039

1040+
QString QgsProcessingContextOptionsWidget::temporaryFolder()
1041+
{
1042+
return mTemporaryFolderWidget->filePath();
1043+
}
1044+
10321045
///@endcond

‎src/gui/processing/qgsprocessingalgorithmdialogbase.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ class GUI_EXPORT QgsProcessingAlgorithmDialogBase : public QDialog, public QgsPr
474474
QgsFeatureRequest::InvalidGeometryCheck mGeometryCheck = QgsFeatureRequest::InvalidGeometryCheck::GeometryAbortOnInvalid;
475475
Qgis::DistanceUnit mDistanceUnits = Qgis::DistanceUnit::Unknown;
476476
Qgis::AreaUnit mAreaUnits = Qgis::AreaUnit::Unknown;
477+
QString mTemporaryFolderOverride;
477478

478479
QString formatHelp( QgsProcessingAlgorithm *algorithm );
479480
void scrollToBottomOfLog();
@@ -558,6 +559,11 @@ class GUI_EXPORT QgsProcessingContextOptionsWidget : public QgsPanelWidget, priv
558559
*/
559560
Qgis::AreaUnit areaUnit() const;
560561

562+
/**
563+
* Returns the optional temporary folder override location.
564+
*/
565+
QString temporaryFolder();
566+
561567
};
562568

563569
#endif

‎src/ui/processing/qgsprocessingcontextoptionsbase.ui

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>448</width>
10-
<height>197</height>
10+
<height>328</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -43,7 +43,7 @@
4343
<x>0</x>
4444
<y>0</y>
4545
<width>448</width>
46-
<height>197</height>
46+
<height>328</height>
4747
</rect>
4848
</property>
4949
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
@@ -54,7 +54,36 @@
5454
</property>
5555
</widget>
5656
</item>
57-
<item row="3" column="0">
57+
<item row="2" column="0" colspan="2">
58+
<widget class="QGroupBox" name="groupBox">
59+
<property name="title">
60+
<string>Calculation Settings</string>
61+
</property>
62+
<layout class="QGridLayout" name="gridLayout_2">
63+
<item row="0" column="0">
64+
<widget class="QLabel" name="label_2">
65+
<property name="text">
66+
<string>Distance units</string>
67+
</property>
68+
</widget>
69+
</item>
70+
<item row="0" column="1">
71+
<widget class="QComboBox" name="mDistanceUnitsCombo"/>
72+
</item>
73+
<item row="1" column="0">
74+
<widget class="QLabel" name="label_3">
75+
<property name="text">
76+
<string>Area units</string>
77+
</property>
78+
</widget>
79+
</item>
80+
<item row="1" column="1">
81+
<widget class="QComboBox" name="mAreaUnitsCombo"/>
82+
</item>
83+
</layout>
84+
</widget>
85+
</item>
86+
<item row="4" column="0">
5887
<spacer name="verticalSpacer">
5988
<property name="orientation">
6089
<enum>Qt::Vertical</enum>
@@ -74,31 +103,21 @@
74103
</property>
75104
</widget>
76105
</item>
77-
<item row="2" column="0" colspan="2">
78-
<widget class="QGroupBox" name="groupBox">
106+
<item row="3" column="0" colspan="2">
107+
<widget class="QGroupBox" name="groupBox_2">
79108
<property name="title">
80-
<string>Calculation Settings</string>
109+
<string>Environment Settings</string>
81110
</property>
82-
<layout class="QGridLayout" name="gridLayout_2">
111+
<layout class="QGridLayout" name="gridLayout_3">
83112
<item row="0" column="0">
84-
<widget class="QLabel" name="label_2">
113+
<widget class="QLabel" name="label_4">
85114
<property name="text">
86-
<string>Distance units</string>
115+
<string>Temporary folder</string>
87116
</property>
88117
</widget>
89118
</item>
90119
<item row="0" column="1">
91-
<widget class="QComboBox" name="mDistanceUnitsCombo"/>
92-
</item>
93-
<item row="1" column="0">
94-
<widget class="QLabel" name="label_3">
95-
<property name="text">
96-
<string>Area units</string>
97-
</property>
98-
</widget>
99-
</item>
100-
<item row="1" column="1">
101-
<widget class="QComboBox" name="mAreaUnitsCombo"/>
120+
<widget class="QgsFileWidget" name="mTemporaryFolderWidget" native="true"/>
102121
</item>
103122
</layout>
104123
</widget>
@@ -122,6 +141,12 @@
122141
<header>qgspanelwidget.h</header>
123142
<container>1</container>
124143
</customwidget>
144+
<customwidget>
145+
<class>QgsFileWidget</class>
146+
<extends>QWidget</extends>
147+
<header>qgsfilewidget.h</header>
148+
<container>1</container>
149+
</customwidget>
125150
</customwidgets>
126151
<resources/>
127152
<connections/>

0 commit comments

Comments
 (0)
Please sign in to comment.