Skip to content

Commit eb39d23

Browse files
committed
Move processing algorithm configuration code to gui lib
1 parent 31d7e4b commit eb39d23

24 files changed

+232
-187
lines changed

python/core/core_auto.sip

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,6 @@
367367
%Include locator/qgslocator.sip
368368
%Include locator/qgslocatorfilter.sip
369369
%Include locator/qgslocatormodel.sip
370-
%Include processing/qgsprocessingalgorithmconfigurationwidget.sip
371370
%Include processing/qgsprocessingalgrunnertask.sip
372371
%Include processing/qgsprocessingfeedback.sip
373372
%Include processing/qgsprocessingprovider.sip

python/core/processing/qgsprocessingparameters.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ their acceptable ranges, defaults, etc.
168168
FlagAdvanced,
169169
FlagHidden,
170170
FlagOptional,
171+
FlagIsModelOutput,
171172
};
172173
typedef QFlags<QgsProcessingParameterDefinition::Flag> Flags;
173174

python/core/processing/qgsprocessingregistry.sip.in

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -143,30 +143,6 @@ Return a list with all known parameter types.
143143
.. versionadded:: 3.2
144144
%End
145145

146-
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory /Transfer/ );
147-
%Docstring
148-
Add a new configuration widget factory for customized algorithm configuration
149-
widgets. Ownership is taken.
150-
151-
.. versionadded:: 3.2
152-
%End
153-
154-
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
155-
%Docstring
156-
Remove a configuration widget factory for customized algorithm configuration
157-
widgets.
158-
159-
.. versionadded:: 3.2
160-
%End
161-
162-
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
163-
%Docstring
164-
algorithmConfigurationWidget
165-
@param algorithm
166-
@return
167-
%End
168-
169-
170146
signals:
171147

172148
void providerAdded( const QString &id );

python/gui/gui_auto.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,8 @@
311311
%Include layout/qgslayoutviewtooltemporarymousepan.sip
312312
%Include layout/qgslayoutviewtoolzoom.sip
313313
%Include locator/qgslocatorwidget.sip
314+
%Include processing/qgsprocessingalgorithmconfigurationwidget.sip
314315
%Include processing/qgsprocessingalgorithmdialogbase.sip
315316
%Include processing/qgsprocessingconfigurationwidgets.sip
317+
%Include processing/qgsprocessingguiregistry.sip
316318
%Include qgsadvanceddigitizingcanvasitem.sip

python/gui/processing/qgsprocessingconfigurationwidgets.sip.in

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,44 +11,6 @@
1111

1212

1313

14-
class QgsProcessingConfigurationWidgets
15-
{
16-
%Docstring
17-
This class is responsible for the management of processing widgets which
18-
QGIS internally.
19-
20-
Standalone applications that require to show configuration widgets for processing
21-
algorithms will need to execute the following code to have the configuration
22-
interfaces available.
23-
24-
.. code-block:: python
25-
26-
# At startup time
27-
QgsApplicationProcessingConfigurationWidgets.initialize()
28-
29-
# At exit time
30-
QgsApplicationProcessingConfigurationWidgets.cleanup()
31-
%End
32-
33-
%TypeHeaderCode
34-
#include "qgsprocessingconfigurationwidgets.h"
35-
%End
36-
public:
37-
38-
static void initialize();
39-
%Docstring
40-
Initialize native configuration widgets.
41-
%End
42-
43-
static void cleanup();
44-
%Docstring
45-
Cleanup native configuration widgets.
46-
%End
47-
48-
private:
49-
QgsProcessingConfigurationWidgets();
50-
};
51-
5214

5315

5416

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/************************************************************************
2+
* This file has been generated automatically from *
3+
* *
4+
* src/gui/processing/qgsprocessingguiregistry.h *
5+
* *
6+
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
7+
************************************************************************/
8+
9+
10+
11+
12+
13+
14+
class QgsProcessingGuiRegistry
15+
{
16+
%Docstring
17+
The QgsProcessingGuiRegistry is a home for widgets for processing
18+
configuration widgets.
19+
20+
.. versionadded:: 3.2
21+
%End
22+
23+
%TypeHeaderCode
24+
#include "qgsprocessingguiregistry.h"
25+
%End
26+
public:
27+
QgsProcessingGuiRegistry();
28+
~QgsProcessingGuiRegistry();
29+
30+
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory /Transfer/ );
31+
%Docstring
32+
Add a new configuration widget factory for customized algorithm configuration
33+
widgets. Ownership is taken.
34+
35+
.. versionadded:: 3.2
36+
%End
37+
38+
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
39+
%Docstring
40+
Remove a configuration widget factory for customized algorithm configuration
41+
widgets.
42+
43+
.. versionadded:: 3.2
44+
%End
45+
46+
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
47+
%Docstring
48+
algorithmConfigurationWidget
49+
@param algorithm
50+
@return
51+
%End
52+
53+
};
54+
55+
/************************************************************************
56+
* This file has been generated automatically from *
57+
* *
58+
* src/gui/processing/qgsprocessingguiregistry.h *
59+
* *
60+
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
61+
************************************************************************/

python/gui/qgsgui.sip.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ Returns the global map layer action registry, used for registering map layer act
6262
Returns the global layout item GUI registry, used for registering the GUI behavior of layout items.
6363
%End
6464

65+
static QgsProcessingGuiRegistry *processingGuiRegistry();
66+
6567
static void enableAutoGeometryRestore( QWidget *widget, const QString &key = QString() );
6668
%Docstring
6769
Register the widget to allow its position to be automatically saved and restored when open and closed.

python/plugins/processing/modeler/ModelerParametersDialog.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@
5353
QgsProcessingOutputDefinition,
5454
QgsSettings)
5555

56-
from qgis.gui import (QgsMessageBar,
56+
from qgis.gui import (QgsGui,
57+
QgsMessageBar,
5758
QgsScrollArea,
5859
QgsFilterLineEdit,
5960
QgsHelp)
@@ -119,7 +120,7 @@ def setupUi(self):
119120
line.setFrameShape(QFrame.HLine)
120121
line.setFrameShadow(QFrame.Sunken)
121122
self.verticalLayout.addWidget(line)
122-
self.algorithmItem = QgsApplication.instance().processingRegistry().algorithmConfigurationWidget(self._alg)
123+
self.algorithmItem = QgsGui.instance().processingGuiRegistry().algorithmConfigurationWidget(self._alg)
123124
if self.configuration:
124125
self.algorithmItem.setConfiguration(self.configuration)
125126
self.verticalLayout.addWidget(self.algorithmItem)
@@ -332,6 +333,13 @@ def createAlgorithm(self):
332333
output.setChildOutputName(dest.name())
333334
outputs[name] = output
334335

336+
if dest.flags() & QgsProcessingParameterDefinition.FlagIsModelOutput:
337+
if not name in outputs:
338+
output = QgsProcessingModelOutput(dest.name(), dest.name())
339+
output.setChildId(alg.childId())
340+
output.setChildOutputName(dest.name())
341+
outputs[dest.name()] = output
342+
335343
alg.setModelOutputs(outputs)
336344

337345
selectedOptions = self.dependenciesPanel.selectedoptions

src/analysis/processing/qgsalgorithmfilter.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ void QgsFilterAlgorithm::initAlgorithm( const QVariantMap &configuration )
7575
const QVariantMap outputDef = output.toMap();
7676
const QString name = QStringLiteral( "OUTPUT_%1" ).arg( outputDef.value( QStringLiteral( "name" ) ).toString() );
7777
QgsProcessingParameterFeatureSink *outputParam = new QgsProcessingParameterFeatureSink( name, outputDef.value( QStringLiteral( "name" ) ).toString() );
78-
outputParam->setFlags( QgsProcessingParameterDefinition::FlagHidden );
78+
QgsProcessingParameterDefinition::Flags flags = QgsProcessingParameterDefinition::Flags();
79+
flags |= QgsProcessingParameterDefinition::FlagHidden;
80+
if ( outputDef.value( QStringLiteral( "isModelOutput" ) ).toBool() )
81+
flags |= QgsProcessingParameterDefinition::FlagIsModelOutput;
82+
outputParam->setFlags( flags );
7983
addParameter( outputParam );
8084
mOutputs.append( new Output( name, outputDef.value( QStringLiteral( "expression" ) ).toString() ) );
8185
}
@@ -92,6 +96,8 @@ QVariantMap QgsFilterAlgorithm::processAlgorithm( const QVariantMap &parameters,
9296
for ( Output *output : qgis::as_const( mOutputs ) )
9397
{
9498
output->sink.reset( parameterAsSink( parameters, output->name, context, output->destinationIdentifier, source->fields(), source->wkbType(), source->sourceCrs() ) );
99+
if ( !output->sink )
100+
return QVariantMap();
95101
output->expression.prepare( &expressionContext );
96102
}
97103

@@ -115,7 +121,9 @@ QVariantMap QgsFilterAlgorithm::processAlgorithm( const QVariantMap &parameters,
115121
for ( Output *output : qgis::as_const( mOutputs ) )
116122
{
117123
if ( output->expression.evaluate( &expressionContext ).toBool() )
124+
{
118125
output->sink->addFeature( f, QgsFeatureSink::FastInsert );
126+
}
119127
}
120128

121129
feedback->setProgress( current * step );

0 commit comments

Comments
 (0)