Skip to content

Commit eb39d23

Browse files
committedApr 9, 2018
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 );

‎src/app/qgisapp.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ Q_GUI_EXPORT extern int qt_defaultDpiX();
246246
#include "qgsruntimeprofiler.h"
247247
#include "qgshandlebadlayers.h"
248248
#include "qgsprintlayout.h"
249-
#include "qgsprocessingconfigurationwidgets.h"
250249
#include "qgsprocessingregistry.h"
251250
#include "qgsproject.h"
252251
#include "qgsprojectlayergroupdialog.h"
@@ -1458,7 +1457,6 @@ QgisApp::~QgisApp()
14581457

14591458
// cancel request for FileOpen events
14601459
QgsApplication::setFileOpenEventReceiver( nullptr );
1461-
QgsProcessingConfigurationWidgets::cleanup();
14621460

14631461
unregisterCustomLayoutDropHandler( mLayoutQptDropHandler );
14641462

@@ -10497,7 +10495,6 @@ void QgisApp::initNativeProcessing()
1049710495
#ifdef HAVE_3D
1049810496
QgsApplication::processingRegistry()->addProvider( new Qgs3DAlgorithms( QgsApplication::processingRegistry() ) );
1049910497
#endif
10500-
QgsProcessingConfigurationWidgets::initialize();
1050110498
}
1050210499

1050310500
void QgisApp::initLayouts()

‎src/core/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ SET(QGIS_CORE_SRCS
102102
locator/qgslocatormodel.cpp
103103

104104
processing/qgsprocessingalgorithm.cpp
105-
processing/qgsprocessingalgorithmconfigurationwidget.cpp
106105
processing/qgsprocessingalgrunnertask.cpp
107106
processing/qgsprocessingcontext.cpp
108107
processing/qgsprocessingfeedback.cpp
@@ -669,7 +668,6 @@ SET(QGIS_CORE_MOC_HDRS
669668
locator/qgslocatorfilter.h
670669
locator/qgslocatormodel.h
671670

672-
processing/qgsprocessingalgorithmconfigurationwidget.h
673671
processing/qgsprocessingalgrunnertask.h
674672
processing/qgsprocessingfeedback.h
675673
processing/qgsprocessingprovider.h

‎src/core/processing/qgsprocessingparameters.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ class CORE_EXPORT QgsProcessingParameterDefinition
247247
FlagAdvanced = 1 << 1, //!< Parameter is an advanced parameter which should be hidden from users by default
248248
FlagHidden = 1 << 2, //!< Parameter is hidden and should not be shown to users
249249
FlagOptional = 1 << 3, //!< Parameter is optional
250+
FlagIsModelOutput = 1 << 4, //!< Destination parameter is final output. The parameter name will be used.
250251
};
251252
Q_DECLARE_FLAGS( Flags, Flag )
252253

‎src/core/processing/qgsprocessingregistry.cpp

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "qgsprocessingregistry.h"
1919
#include "qgsvectorfilewriter.h"
2020
#include "qgsprocessingparametertypeimpl.h"
21-
#include "qgsprocessingalgorithmconfigurationwidget.h"
2221

2322
QgsProcessingRegistry::QgsProcessingRegistry( QObject *parent SIP_TRANSFERTHIS )
2423
: QObject( parent )
@@ -189,28 +188,3 @@ QList<QgsProcessingParameterType *> QgsProcessingRegistry::parameterTypes() cons
189188
{
190189
return mParameterTypes.values();
191190
}
192-
193-
void QgsProcessingRegistry::addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
194-
{
195-
mAlgorithmConfigurationWidgetFactories.append( factory );
196-
}
197-
198-
void QgsProcessingRegistry::removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
199-
{
200-
mAlgorithmConfigurationWidgetFactories.removeAll( factory );
201-
delete factory;
202-
}
203-
204-
QgsProcessingAlgorithmConfigurationWidget *QgsProcessingRegistry::algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const
205-
{
206-
for ( const auto *factory : mAlgorithmConfigurationWidgetFactories )
207-
{
208-
if ( factory->canCreateFor( algorithm ) )
209-
{
210-
return factory->create( algorithm );
211-
}
212-
}
213-
214-
return nullptr;
215-
}
216-

‎src/core/processing/qgsprocessingregistry.h

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -169,30 +169,6 @@ class CORE_EXPORT QgsProcessingRegistry : public QObject
169169
*/
170170
QList<QgsProcessingParameterType *> parameterTypes() const;
171171

172-
/**
173-
* Add a new configuration widget factory for customized algorithm configuration
174-
* widgets. Ownership is taken.
175-
*
176-
* \since QGIS 3.2
177-
*/
178-
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory SIP_TRANSFER );
179-
180-
/**
181-
* Remove a configuration widget factory for customized algorithm configuration
182-
* widgets.
183-
*
184-
* \since QGIS 3.2
185-
*/
186-
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
187-
188-
/**
189-
* @brief algorithmConfigurationWidget
190-
* @param algorithm
191-
* @return
192-
*/
193-
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
194-
195-
196172
signals:
197173

198174
//! Emitted when a provider has been added to the registry.
@@ -224,8 +200,6 @@ class CORE_EXPORT QgsProcessingRegistry : public QObject
224200
//! Hash of available parameter types by id. This object owns the pointers.
225201
QMap<QString, QgsProcessingParameterType *> mParameterTypes;
226202

227-
QList <QgsProcessingAlgorithmConfigurationWidgetFactory *> mAlgorithmConfigurationWidgetFactories;
228-
229203
#ifdef SIP_RUN
230204
QgsProcessingRegistry( const QgsProcessingRegistry &other );
231205
#endif

‎src/gui/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,10 @@ SET(QGIS_GUI_SRCS
192192
ogr/qgsnewogrconnection.cpp
193193
ogr/qgsvectorlayersaveasdialog.cpp
194194

195+
processing/qgsprocessingalgorithmconfigurationwidget.cpp
195196
processing/qgsprocessingalgorithmdialogbase.cpp
196197
processing/qgsprocessingconfigurationwidgets.cpp
198+
processing/qgsprocessingguiregistry.cpp
197199

198200
qgisinterface.cpp
199201
qgsactionmenu.cpp
@@ -710,8 +712,10 @@ SET(QGIS_GUI_MOC_HDRS
710712

711713
locator/qgslocatorwidget.h
712714

715+
processing/qgsprocessingalgorithmconfigurationwidget.h
713716
processing/qgsprocessingalgorithmdialogbase.h
714717
processing/qgsprocessingconfigurationwidgets.h
718+
processing/qgsprocessingguiregistry.h
715719
)
716720
SET_PROPERTY(GLOBAL PROPERTY QGIS_GUI_MOC_HDRS ${QGIS_GUI_MOC_HDRS})
717721

@@ -870,10 +874,11 @@ INCLUDE_DIRECTORIES(
870874
${CMAKE_SOURCE_DIR}/src/gui/auth
871875
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets
872876
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets/core
877+
${CMAKE_SOURCE_DIR}/src/gui/effects
873878
${CMAKE_SOURCE_DIR}/src/gui/layertree
874879
${CMAKE_SOURCE_DIR}/src/gui/layout
875-
${CMAKE_SOURCE_DIR}/src/gui/effects
876880
${CMAKE_SOURCE_DIR}/src/gui/ogr
881+
${CMAKE_SOURCE_DIR}/src/gui/processing
877882
${CMAKE_SOURCE_DIR}/src/core
878883
${CMAKE_SOURCE_DIR}/src/core/annotations
879884
${CMAKE_SOURCE_DIR}/src/core/auth

‎src/core/processing/qgsprocessingalgorithmconfigurationwidget.h renamed to ‎src/gui/processing/qgsprocessingalgorithmconfigurationwidget.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#ifndef QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H
2020
#define QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H
2121

22-
2322
#include <QWidget>
2423
#include <QVariantMap>
2524

‎src/gui/processing/qgsprocessingconfigurationwidgets.cpp

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
#include "qgsprocessingalgorithm.h"
2121
#include "qgsexpressionlineedit.h"
2222
#include "qgsapplication.h"
23-
#include "qgsprocessingregistry.h"
23+
#include "qgsgui.h"
24+
#include "qgsprocessingguiregistry.h"
2425

2526
#include <QTableWidget>
2627
#include <QGridLayout>
@@ -29,32 +30,6 @@
2930
#include <QCheckBox>
3031
#include <QHeaderView>
3132

32-
QList<QgsProcessingAlgorithmConfigurationWidgetFactory *> QgsProcessingConfigurationWidgets::sProcessingAlgorithmConfigurationWidgetFactories;
33-
34-
QgsProcessingConfigurationWidgets::QgsProcessingConfigurationWidgets()
35-
{
36-
37-
}
38-
39-
void QgsProcessingConfigurationWidgets::initialize()
40-
{
41-
if ( !sProcessingAlgorithmConfigurationWidgetFactories.isEmpty() )
42-
{
43-
QgsDebugMsg( "QgsProcessingConfigurationWidgets::initialize() called more than once. Exiting now." );
44-
return;
45-
}
46-
QgsProcessingAlgorithmConfigurationWidgetFactory *factory = new QgsFilterAlgorithmConfigurationWidgetFactory();
47-
sProcessingAlgorithmConfigurationWidgetFactories.append( factory );
48-
QgsApplication::instance()->processingRegistry()->addAlgorithmConfigurationWidgetFactory( factory );
49-
}
50-
51-
void QgsProcessingConfigurationWidgets::cleanup()
52-
{
53-
for ( QgsProcessingAlgorithmConfigurationWidgetFactory *factory : qgis::as_const( sProcessingAlgorithmConfigurationWidgetFactories ) )
54-
QgsApplication::instance()->processingRegistry()->removeAlgorithmConfigurationWidgetFactory( factory );
55-
sProcessingAlgorithmConfigurationWidgetFactories.clear();
56-
}
57-
5833
QgsFilterAlgorithmConfigurationWidget::QgsFilterAlgorithmConfigurationWidget( QWidget *parent )
5934
: QgsProcessingAlgorithmConfigurationWidget( parent )
6035
{

‎src/gui/processing/qgsprocessingconfigurationwidgets.h

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -25,41 +25,6 @@
2525

2626
class QTableWidget;
2727

28-
/**
29-
* This class is responsible for the management of processing widgets which
30-
* QGIS internally.
31-
*
32-
* Standalone applications that require to show configuration widgets for processing
33-
* algorithms will need to execute the following code to have the configuration
34-
* interfaces available.
35-
*
36-
* \code{.py}
37-
* # At startup time
38-
* QgsApplicationProcessingConfigurationWidgets.initialize()
39-
*
40-
* # At exit time
41-
* QgsApplicationProcessingConfigurationWidgets.cleanup()
42-
* \endcode
43-
*/
44-
class GUI_EXPORT QgsProcessingConfigurationWidgets
45-
{
46-
public:
47-
48-
/**
49-
* Initialize native configuration widgets.
50-
*/
51-
static void initialize();
52-
53-
/**
54-
* Cleanup native configuration widgets.
55-
*/
56-
static void cleanup();
57-
58-
private:
59-
QgsProcessingConfigurationWidgets() SIP_FORCE;
60-
static QList<QgsProcessingAlgorithmConfigurationWidgetFactory *> sProcessingAlgorithmConfigurationWidgetFactories;
61-
};
62-
6328
///@cond PRIVATE
6429

6530
#ifndef SIP_RUN
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/***************************************************************************
2+
qgsprocessingguiregistry.cpp
3+
---------------------
4+
begin : April 2018
5+
copyright : (C) 2018 by Matthias Kuhn
6+
email : matthias@opengis.ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#include "qgsprocessingguiregistry.h"
19+
#include "qgsprocessingalgorithmconfigurationwidget.h"
20+
#include "qgsprocessingconfigurationwidgets.h"
21+
#include "qgis.h"
22+
23+
QgsProcessingGuiRegistry::QgsProcessingGuiRegistry()
24+
{
25+
addAlgorithmConfigurationWidgetFactory( new QgsFilterAlgorithmConfigurationWidgetFactory() );
26+
}
27+
28+
QgsProcessingGuiRegistry::~QgsProcessingGuiRegistry()
29+
{
30+
for ( QgsProcessingAlgorithmConfigurationWidgetFactory *factory : qgis::as_const( mAlgorithmConfigurationWidgetFactories ) )
31+
removeAlgorithmConfigurationWidgetFactory( factory );
32+
}
33+
34+
void QgsProcessingGuiRegistry::addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
35+
{
36+
mAlgorithmConfigurationWidgetFactories.append( factory );
37+
}
38+
39+
void QgsProcessingGuiRegistry::removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
40+
{
41+
mAlgorithmConfigurationWidgetFactories.removeAll( factory );
42+
delete factory;
43+
}
44+
45+
QgsProcessingAlgorithmConfigurationWidget *QgsProcessingGuiRegistry::algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const
46+
{
47+
for ( const auto *factory : mAlgorithmConfigurationWidgetFactories )
48+
{
49+
if ( factory->canCreateFor( algorithm ) )
50+
{
51+
return factory->create( algorithm );
52+
}
53+
}
54+
55+
return nullptr;
56+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/***************************************************************************
2+
qgsprocessingguiregistry.h
3+
---------------------
4+
begin : April 2018
5+
copyright : (C) 2018 by Matthias Kuhn
6+
email : matthias@opengis.ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#ifndef QGSPROCESSINGGUIREGISTRY_H
19+
#define QGSPROCESSINGGUIREGISTRY_H
20+
21+
#include "qgis_gui.h"
22+
#include "qgis_sip.h"
23+
24+
#include <QList>
25+
26+
class QgsProcessingAlgorithm;
27+
class QgsProcessingAlgorithmConfigurationWidget;
28+
class QgsProcessingAlgorithmConfigurationWidgetFactory;
29+
30+
/**
31+
* The QgsProcessingGuiRegistry is a home for widgets for processing
32+
* configuration widgets.
33+
*
34+
* \ingroup gui
35+
* \since QGIS 3.2
36+
*/
37+
class GUI_EXPORT QgsProcessingGuiRegistry
38+
{
39+
public:
40+
QgsProcessingGuiRegistry();
41+
~QgsProcessingGuiRegistry();
42+
43+
/**
44+
* Add a new configuration widget factory for customized algorithm configuration
45+
* widgets. Ownership is taken.
46+
*
47+
* \since QGIS 3.2
48+
*/
49+
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory SIP_TRANSFER );
50+
51+
/**
52+
* Remove a configuration widget factory for customized algorithm configuration
53+
* widgets.
54+
*
55+
* \since QGIS 3.2
56+
*/
57+
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
58+
59+
/**
60+
* @brief algorithmConfigurationWidget
61+
* @param algorithm
62+
* @return
63+
*/
64+
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
65+
66+
private:
67+
68+
QList <QgsProcessingAlgorithmConfigurationWidgetFactory *> mAlgorithmConfigurationWidgetFactories;
69+
};
70+
71+
#endif // QGSPROCESSINGGUIREGISTRY_H

‎src/gui/qgsgui.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#else
2929
#include "qgsnative.h"
3030
#endif
31+
#include "qgsprocessingguiregistry.h"
3132
#include "qgsshortcutsmanager.h"
3233
#include "qgswidgetstatehelper_p.h"
3334
#include "qgslogger.h"
@@ -73,6 +74,11 @@ QgsLayoutItemGuiRegistry *QgsGui::layoutItemGuiRegistry()
7374
return instance()->mLayoutItemGuiRegistry;
7475
}
7576

77+
QgsProcessingGuiRegistry *QgsGui::processingGuiRegistry()
78+
{
79+
return instance()->mProcessingGuiRegistry;
80+
}
81+
7682
void QgsGui::enableAutoGeometryRestore( QWidget *widget, const QString &key )
7783
{
7884
if ( widget->objectName().isEmpty() )
@@ -109,4 +115,5 @@ QgsGui::QgsGui()
109115
mSourceSelectProviderRegistry = new QgsSourceSelectProviderRegistry();
110116
mLayoutItemGuiRegistry = new QgsLayoutItemGuiRegistry();
111117
mWidgetStateHelper = new QgsWidgetStateHelper();
118+
mProcessingGuiRegistry = new QgsProcessingGuiRegistry();
112119
}

‎src/gui/qgsgui.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class QgsSourceSelectProviderRegistry;
3030
class QgsNative;
3131
class QgsLayoutItemGuiRegistry;
3232
class QgsWidgetStateHelper;
33+
class QgsProcessingGuiRegistry;
3334

3435
/**
3536
* \ingroup gui
@@ -89,6 +90,8 @@ class GUI_EXPORT QgsGui
8990
*/
9091
static QgsLayoutItemGuiRegistry *layoutItemGuiRegistry();
9192

93+
static QgsProcessingGuiRegistry *processingGuiRegistry();
94+
9295
/**
9396
* Register the widget to allow its position to be automatically saved and restored when open and closed.
9497
* Use this to avoid needing to call saveGeometry() and restoreGeometry() on your widget.
@@ -109,6 +112,7 @@ class GUI_EXPORT QgsGui
109112
QgsLayerTreeEmbeddedWidgetRegistry *mLayerTreeEmbeddedWidgetRegistry = nullptr;
110113
QgsMapLayerActionRegistry *mMapLayerActionRegistry = nullptr;
111114
QgsLayoutItemGuiRegistry *mLayoutItemGuiRegistry = nullptr;
115+
QgsProcessingGuiRegistry *mProcessingGuiRegistry = nullptr;
112116

113117
#ifdef SIP_RUN
114118
QgsGui( const QgsGui &other );

0 commit comments

Comments
 (0)
Please sign in to comment.