QGIS API Documentation 4.3.0-Master (0cfde48c85b)
Loading...
Searching...
No Matches
qgsprocessingguiregistry.cpp
Go to the documentation of this file.
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
19
20#include "qgis.h"
21#include "qgslogger.h"
46
47#include <QString>
48
49#include "moc_qgsprocessingguiregistry.cpp"
50
51using namespace Qt::StringLiterals;
52
53//
54// QgsProcessingDialogFactory
55//
56
58
59//
60// QgsProcessingContextFactory
61//
62
64
65//
66// QgsProcessingGuiRegistry
67//
68
70{
71 addAlgorithmConfigurationWidgetFactory( new QgsFilterAlgorithmConfigurationWidgetFactory() );
72 addAlgorithmConfigurationWidgetFactory( new QgsConditionalBranchAlgorithmConfigurationWidgetFactory() );
73
74 addParameterWidgetFactory( new QgsProcessingAlignRasterLayersWidgetWrapper() );
75 addParameterWidgetFactory( new QgsProcessingBooleanWidgetWrapper() );
76 addParameterWidgetFactory( new QgsProcessingCrsWidgetWrapper() );
77 addParameterWidgetFactory( new QgsProcessingStringWidgetWrapper() );
78 addParameterWidgetFactory( new QgsProcessingNumericWidgetWrapper() );
79 addParameterWidgetFactory( new QgsProcessingDistanceWidgetWrapper() );
80 addParameterWidgetFactory( new QgsProcessingAreaWidgetWrapper() );
81 addParameterWidgetFactory( new QgsProcessingVolumeWidgetWrapper() );
82 addParameterWidgetFactory( new QgsProcessingDurationWidgetWrapper() );
83 addParameterWidgetFactory( new QgsProcessingScaleWidgetWrapper() );
84 addParameterWidgetFactory( new QgsProcessingRangeWidgetWrapper() );
85 addParameterWidgetFactory( new QgsProcessingAuthConfigWidgetWrapper() );
86 addParameterWidgetFactory( new QgsProcessingMatrixWidgetWrapper() );
87 addParameterWidgetFactory( new QgsProcessingFileWidgetWrapper() );
88 addParameterWidgetFactory( new QgsProcessingExpressionWidgetWrapper() );
89 addParameterWidgetFactory( new QgsProcessingEnumWidgetWrapper() );
90 addParameterWidgetFactory( new QgsProcessingLayoutWidgetWrapper() );
91 addParameterWidgetFactory( new QgsProcessingLayoutItemWidgetWrapper() );
92 addParameterWidgetFactory( new QgsProcessingPointWidgetWrapper() );
93 addParameterWidgetFactory( new QgsProcessingGeometryWidgetWrapper() );
94 addParameterWidgetFactory( new QgsProcessingColorWidgetWrapper() );
95 addParameterWidgetFactory( new QgsProcessingCoordinateOperationWidgetWrapper() );
96 addParameterWidgetFactory( new QgsProcessingFieldWidgetWrapper() );
97 addParameterWidgetFactory( new QgsProcessingMapThemeWidgetWrapper() );
98 addParameterWidgetFactory( new QgsProcessingDateTimeWidgetWrapper() );
99 addParameterWidgetFactory( new QgsProcessingProviderConnectionWidgetWrapper() );
100 addParameterWidgetFactory( new QgsProcessingDatabaseSchemaWidgetWrapper() );
101 addParameterWidgetFactory( new QgsProcessingDatabaseTableWidgetWrapper() );
102 addParameterWidgetFactory( new QgsProcessingExtentWidgetWrapper() );
103 addParameterWidgetFactory( new QgsProcessingMapLayerWidgetWrapper() );
104 addParameterWidgetFactory( new QgsProcessingVectorLayerWidgetWrapper() );
105 addParameterWidgetFactory( new QgsProcessingFeatureSourceWidgetWrapper() );
106 addParameterWidgetFactory( new QgsProcessingRasterLayerWidgetWrapper() );
107 addParameterWidgetFactory( new QgsProcessingMeshLayerWidgetWrapper() );
108 addParameterWidgetFactory( new QgsProcessingBandWidgetWrapper() );
109 addParameterWidgetFactory( new QgsProcessingMultipleLayerWidgetWrapper() );
110 addParameterWidgetFactory( new QgsProcessingVectorTileWriterLayersWidgetWrapper() );
111 addParameterWidgetFactory( new QgsProcessingFeatureSinkWidgetWrapper() );
112 addParameterWidgetFactory( new QgsProcessingVectorDestinationWidgetWrapper() );
113 addParameterWidgetFactory( new QgsProcessingRasterDestinationWidgetWrapper() );
114 addParameterWidgetFactory( new QgsProcessingFileDestinationWidgetWrapper() );
115 addParameterWidgetFactory( new QgsProcessingFolderDestinationWidgetWrapper() );
116 addParameterWidgetFactory( new QgsProcessingFieldMapWidgetWrapper() );
117 addParameterWidgetFactory( new QgsProcessingAggregateWidgetWrapper() );
118 addParameterWidgetFactory( new QgsProcessingTinInputLayersWidgetWrapper() );
119 addParameterWidgetFactory( new QgsProcessingDxfLayersWidgetWrapper() );
120 addParameterWidgetFactory( new QgsProcessingMeshDatasetGroupsWidgetWrapper() );
121 addParameterWidgetFactory( new QgsProcessingMeshDatasetTimeWidgetWrapper() );
122 addParameterWidgetFactory( new QgsProcessingPointCloudLayerWidgetWrapper() );
123 addParameterWidgetFactory( new QgsProcessingAnnotationLayerWidgetWrapper() );
124 addParameterWidgetFactory( new QgsProcessingPointCloudDestinationWidgetWrapper() );
125 addParameterWidgetFactory( new QgsProcessingPointCloudAttributeWidgetWrapper() );
126 addParameterWidgetFactory( new QgsProcessingVectorTileDestinationWidgetWrapper() );
127 addParameterWidgetFactory( new QgsProcessingRasterOptionsWidgetWrapper() );
128 addParameterWidgetFactory( new QgsProcessingHeatmapPixelSizeWidgetWrapper() );
129 addParameterWidgetFactory( new QgsProcessingReliefColorsWidgetWrapper() );
130 addParameterWidgetFactory( new QgsProcessingExecuteSqlWidgetWrapper() );
131 addParameterWidgetFactory( new QgsProcessingInterpolationPixelSizeWidgetWrapper() );
132 addParameterWidgetFactory( new QgsProcessingInterpolationSourceWidgetWrapper() );
133 addParameterWidgetFactory( new QgsProcessingTileExtentMaxZoomWidgetWrapper() );
134
135 mModelConfigWidgetFactory = std::make_unique< QgsProcessingGuiInternalModelConfigWidgetFactory >();
136 registerModelConfigWidgetFactory( mModelConfigWidgetFactory.get() );
137}
138
140{
141 for ( auto it = mProviderToolboxActions.constBegin(); it != mProviderToolboxActions.constEnd(); ++it )
142 {
143 qDeleteAll( it.value() );
144 }
145 mProviderToolboxActions.clear();
146
147 for ( auto it = mProviderToolboxContextActions.constBegin(); it != mProviderToolboxContextActions.constEnd(); ++it )
148 {
149 qDeleteAll( it.value() );
150 }
151 mProviderToolboxContextActions.clear();
152
153 const QList<QgsProcessingAlgorithmConfigurationWidgetFactory *> factories = mAlgorithmConfigurationWidgetFactories;
154 for ( QgsProcessingAlgorithmConfigurationWidgetFactory *factory : factories )
156 const QMap<QString, QgsProcessingParameterWidgetFactoryInterface *> paramFactories = mParameterWidgetFactories;
157 for ( auto it = paramFactories.constBegin(); it != paramFactories.constEnd(); ++it )
158 removeParameterWidgetFactory( it.value() );
159
160 unregisterModelConfigWidgetFactory( mModelConfigWidgetFactory.get() );
161 mModelConfigWidgetFactory.reset();
162}
163
165{
166 mAlgorithmConfigurationWidgetFactories.append( factory );
167}
168
170{
171 mAlgorithmConfigurationWidgetFactories.removeAll( factory );
172 delete factory;
173}
174
176{
177 for ( const auto *factory : mAlgorithmConfigurationWidgetFactories )
178 {
179 if ( factory->canCreateFor( algorithm ) )
180 {
181 std::unique_ptr<QgsProcessingAlgorithmConfigurationWidget> widget( factory->create( algorithm ) );
182 if ( widget )
183 widget->setAlgorithm( algorithm );
184 return widget.release();
185 }
186 }
187
188 return nullptr;
189}
190
192{
193 if ( !factory )
194 return false;
195
196 if ( mParameterWidgetFactories.contains( factory->parameterType() ) )
197 {
198 QgsLogger::warning( u"Duplicate parameter factory for %1 registered"_s.arg( factory->parameterType() ) );
199 return false;
200 }
201
202 mParameterWidgetFactories.insert( factory->parameterType(), factory );
203 return true;
204}
205
207{
208 if ( !factory )
209 return;
210
211 mParameterWidgetFactories.remove( factory->parameterType() );
212 delete factory;
213}
214
216{
217 mModelConfigWidgetFactories << factory;
218}
219
221{
222 mModelConfigWidgetFactories.removeAll( factory );
223}
224
226{
227 if ( !parameter )
228 return nullptr;
229
230 const QVariantMap metadata = parameter->metadata();
231 const QString widgetType = metadata.value( u"widget_wrapper"_s ).toMap().value( u"widget_type"_s ).toString();
232 const QString parameterType = !widgetType.isEmpty() ? widgetType : parameter->type();
233 if ( !mParameterWidgetFactories.contains( parameterType ) )
234 return nullptr;
235
236 if ( QgsProcessingParameterWidgetFactoryInterface *factory = mParameterWidgetFactories.value( parameterType ) )
237 {
238 return factory->createWidgetWrapper( parameter, type );
239 }
240 return nullptr;
241}
242
244 QgsProcessingModelAlgorithm *model, const QString &childId, const QgsProcessingParameterDefinition *parameter, QgsProcessingContext &context
245)
246{
247 if ( !parameter )
248 return nullptr;
249
250 const QString parameterType = parameter->type();
251 auto it = mParameterWidgetFactories.constFind( parameterType );
252 if ( it == mParameterWidgetFactories.constEnd() )
253 return nullptr;
254
255 return it.value()->createModelerWidgetWrapper( model, childId, parameter, context );
256}
257
259 const QString &type, QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext, const QgsProcessingParameterDefinition *definition, const QgsProcessingAlgorithm *algorithm
260)
261{
262 auto it = mParameterWidgetFactories.constFind( type );
263 if ( it == mParameterWidgetFactories.constEnd() )
264 return nullptr;
265
266 return it.value()->createParameterDefinitionWidget( context, widgetContext, definition, algorithm );
267}
268
270 QgsProcessingModelComponent *component, QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext
271) const
272{
273 for ( auto it = mModelConfigWidgetFactories.constBegin(); it != mModelConfigWidgetFactories.constEnd(); ++it )
274 {
275 // factory may have been deleted without deregistering, don't crash!
276 if ( !it->data() )
277 continue;
278
279 if ( it->data()->supportsComponent( component ) )
280 {
281 if ( QgsProcessingModelConfigWidget *widget = it->data()->createWidget( component, context, widgetContext ) )
282 return widget;
283 }
284 }
285 return nullptr;
286}
287
289{
290 mWidgetContextGenerator = generator;
291}
292
294{
295 if ( mWidgetContextGenerator )
296 {
297 return mWidgetContextGenerator->createWidgetContext();
298 }
300}
301
303{
304 mProviderToolboxActions[providerId].append( action );
305}
306
308{
309 QList< QgsProcessingToolboxAction * > actions = mProviderToolboxActions.take( providerId );
310 qDeleteAll( actions );
311}
312
313QList<QgsProcessingToolboxAction *> QgsProcessingGuiRegistry::toolboxActionsForProvider( const QString &providerId ) const
314{
315 return mProviderToolboxActions.value( providerId );
316}
317
319{
320 mProviderToolboxContextActions[providerId].append( action );
321}
322
324{
325 QList< QgsProcessingToolboxContextAction * > actions = mProviderToolboxContextActions.take( providerId );
326 qDeleteAll( actions );
327}
328
330{
331 for ( auto it = mProviderToolboxContextActions.begin(); it != mProviderToolboxContextActions.end(); ++it )
332 {
333 if ( it.value().contains( action ) )
334 {
335 QList< QgsProcessingToolboxContextAction * > actions = it.value();
336 actions.removeAll( action );
337 mProviderToolboxContextActions.insert( it.key(), actions );
338 break;
339 }
340 }
341}
342
343QList<QgsProcessingToolboxContextAction *> QgsProcessingGuiRegistry::toolboxContextActions() const
344{
345 QList<QgsProcessingToolboxContextAction *> res;
346 for ( auto it = mProviderToolboxContextActions.constBegin(); it != mProviderToolboxContextActions.constEnd(); ++it )
347 {
348 res.append( it.value() );
349 }
350 return res;
351}
352
354{
355 mProcessingDialogFactory.reset( factory );
356}
357
359{
360 return mProcessingDialogFactory.get();
361}
362
364{
365 mContextFactory.reset( factory );
366}
367
369{
370 return mContextFactory.get();
371}
372
373QList<QgsProcessingToolboxContextAction *> QgsProcessingGuiRegistry::toolboxContextActionsForProvider( const QString &providerId ) const
374{
375 return mProviderToolboxContextActions.value( providerId );
376}
377
379bool QgsProcessingGuiInternalModelConfigWidgetFactory::supportsComponent( QgsProcessingModelComponent *component ) const
380{
381 if ( dynamic_cast< QgsProcessingModelGroupBox * >( component ) )
382 return true;
383
384 if ( dynamic_cast< QgsProcessingModelChildAlgorithm * >( component ) )
385 return true;
386
387 if ( dynamic_cast< QgsProcessingModelParameter * >( component ) )
388 return true;
389
390 if ( dynamic_cast< QgsProcessingModelOutput * >( component ) )
391 return true;
392
393 return false;
394}
395
396QgsProcessingModelConfigWidget *QgsProcessingGuiInternalModelConfigWidgetFactory::createWidget(
397 QgsProcessingModelComponent *component, QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext
398) const
399{
400 if ( QgsProcessingModelGroupBox *groupBox = dynamic_cast< QgsProcessingModelGroupBox * >( component ) )
401 {
402 QgsModelDesignerDialog *dialog = widgetContext.modelDesignerDialog();
403 const QString boxUuid = groupBox->uuid();
404
405 auto widget = new QgsModelGroupBoxDefinitionPanelWidget( *groupBox );
406 connect( widget, &QgsModelGroupBoxDefinitionPanelWidget::changed, this, [dialog, boxUuid, widget] {
407 QgsModelGraphicsScene *modelScene = dialog->modelScene();
408 QgsModelGroupBoxGraphicItem *graphicItem = dynamic_cast< QgsModelGroupBoxGraphicItem * >( modelScene->groupBoxItem( boxUuid ) );
409 if ( !graphicItem )
410 return; // should not happen
411
412 graphicItem->applyEdit( widget->groupBox() );
413 } );
414
415 return widget;
416 }
417 else if ( QgsProcessingModelChildAlgorithm *childAlg = dynamic_cast< QgsProcessingModelChildAlgorithm * >( component ) )
418 {
419 QgsModelDesignerDialog *dialog = widgetContext.modelDesignerDialog();
420 const QString childId = childAlg->childId();
421
422 std::unique_ptr< QgsProcessingAlgorithm > algorithm( childAlg->algorithm()->create() );
423 auto widget = new QgsProcessingModelerParametersWidget( algorithm.get(), widgetContext.model(), context, childId, childAlg->configuration(), nullptr );
424 widget->setComments( childAlg->comment()->description() );
425 widget->setCommentColor( childAlg->comment()->color() );
426
427 QgsProcessingParameterWidgetContext widgetContextCopy = widgetContext;
428 widgetContextCopy.setModelChildAlgorithmId( childId );
429 widget->setWidgetContext( widgetContextCopy );
430
431 connect( widget, &QgsProcessingModelConfigWidget::changed, this, [dialog, childId, widget] {
432 QgsModelGraphicsScene *modelScene = dialog->modelScene();
433 QgsModelChildAlgorithmGraphicItem *graphicItem = modelScene->childAlgorithmItem( childId );
434 if ( !graphicItem )
435 return; // should not happen
436
437 std::unique_ptr< QgsProcessingModelChildAlgorithm > updatedAlgorithm = widget->createAlgorithm();
438 if ( updatedAlgorithm )
439 {
440 graphicItem->applyEdit( *updatedAlgorithm );
441 }
442 } );
443
444 return widget;
445 }
446 else if ( QgsProcessingModelParameter *modelParam = dynamic_cast< QgsProcessingModelParameter * >( component ) )
447 {
448 QgsModelDesignerDialog *dialog = widgetContext.modelDesignerDialog();
449 QgsProcessingModelAlgorithm *model = widgetContext.model();
450
451 const QString componentName = modelParam->parameterName();
452 const QgsProcessingParameterDefinition *existingParam = model->parameterDefinition( componentName );
453 if ( !existingParam )
454 return nullptr;
455
456 const QString comment = modelParam->comment()->description();
457 const QColor commentColor = modelParam->comment()->color();
458 const QString oldName = existingParam->name();
459 const QString oldDescription = existingParam->description();
460
461 auto widget = new QgsProcessingParameterDefinitionPanelWidget( existingParam->type(), context, widgetContext, existingParam, model );
462 widget->setComments( comment );
463 widget->setCommentColor( commentColor );
464 if ( widgetContext.processingContextGenerator() )
465 {
466 widget->registerProcessingContextGenerator( widgetContext.processingContextGenerator() );
467 }
468
469 auto existingParamName = std::make_shared< QString >( existingParam->name() );
470
471 connect( widget, &QgsProcessingParameterDefinitionPanelWidget::changed, this, [dialog, componentName, oldDescription, oldName, existingParamName, widget] {
472 QgsModelGraphicsScene *modelScene = dialog->modelScene();
473 if ( !modelScene )
474 return;
475
476 QgsModelParameterGraphicItem *graphicItem = dynamic_cast< QgsModelParameterGraphicItem * >( modelScene->parameterItem( componentName ) );
477 if ( !graphicItem )
478 return; // should not happen
479
480 std::unique_ptr< QgsProcessingParameterDefinition > newParam( widget->createParameter( *existingParamName ) );
481 if ( !newParam )
482 return;
483
484 const QString comment = widget->comments();
485 const QColor commentColor = widget->commentColor();
486 *existingParamName = graphicItem->applyEdit( std::move( newParam ), oldDescription, oldName, comment, commentColor );
487 } );
488
489 return widget;
490 }
491 else if ( QgsProcessingModelOutput *modelOutput = dynamic_cast< QgsProcessingModelOutput * >( component ) )
492 {
493 QgsModelDesignerDialog *dialog = widgetContext.modelDesignerDialog();
494 QgsProcessingModelAlgorithm *model = widgetContext.model();
495
496 const QString childId = modelOutput->childId();
497 const QString childOutputName = modelOutput->childOutputName();
498
499 const QgsProcessingParameterDefinition *existingParam = model->modelParameterFromChildIdAndOutputName( childId, modelOutput->name() );
500 if ( !existingParam )
501 return nullptr;
502
503 const QString comment = modelOutput->comment()->description();
504 const QColor commentColor = modelOutput->comment()->color();
505
506 auto widget = new QgsProcessingParameterDefinitionPanelWidget( existingParam->type(), context, widgetContext, existingParam, model );
507 widget->setComments( comment );
508 widget->setCommentColor( commentColor );
509 if ( widgetContext.processingContextGenerator() )
510 {
511 widget->registerProcessingContextGenerator( widgetContext.processingContextGenerator() );
512 }
513
514 connect( widget, &QgsProcessingParameterDefinitionPanelWidget::changed, this, [dialog, childId, childOutputName, widget] {
515 QgsModelGraphicsScene *modelScene = dialog->modelScene();
516 if ( !modelScene )
517 return;
518
519 QgsModelOutputGraphicItem *graphicItem = dynamic_cast< QgsModelOutputGraphicItem * >( modelScene->outputItem( childId, childOutputName ) );
520 if ( !graphicItem )
521 return; // should not happen
522
523 std::unique_ptr< QgsProcessingParameterDefinition > newParam( widget->createParameter() );
524 if ( !newParam )
525 return;
526
527 graphicItem
528 ->applyEdit( newParam->description(), newParam->description(), newParam->defaultValue(), !newParam->flags().testFlag( Qgis::ProcessingParameterFlag::Optional ), widget->comments(), widget->commentColor() );
529 } );
530
531 return widget;
532 }
533
534 return nullptr;
535}
536
537
ProcessingMode
Types of modes which Processing widgets can be created for.
Definition qgis.h:3910
@ Optional
Parameter is optional.
Definition qgis.h:4028
A widget wrapper for Processing parameter value widgets.
static void warning(const QString &msg)
Goes to qWarning.
A widget which allows users to specify the properties of a model group box.
void changed()
Emitted when the widget state changes.
Abstract base class for widgets which allow users to specify the properties of a Processing parameter...
Interface base class for factories for algorithm configuration widgets.
A configuration widget for processing algorithms allows providing additional configuration options di...
Abstract base class for processing algorithms.
A factory for creating Processing contexts, aware of the GUI components which may influence this.
virtual ~QgsProcessingContextFactory()
Contains information about the context in which a processing algorithm is executed.
A factory for creating widgets and dialogs for Processing components.
virtual ~QgsProcessingDialogFactory()
QgsProcessingDialogFactory * dialogFactory()
Returns the application's processing dialog factory, if set.
void addAlgorithmConfigurationWidgetFactory(QgsProcessingAlgorithmConfigurationWidgetFactory *factory)
Add a new configuration widget factory for customized algorithm configuration widgets.
bool addParameterWidgetFactory(QgsProcessingParameterWidgetFactoryInterface *factory)
Adds a parameter widget factory to the registry, allowing widget creation for parameters of the match...
void deregisterProviderToolboxContextActions(const QString &providerId)
Deregisters all toolbox context menu actions for a provider.
QList< QgsProcessingToolboxContextAction * > toolboxContextActions() const
Returns a list of all toolbox context menu actions registered.
void removeAlgorithmConfigurationWidgetFactory(QgsProcessingAlgorithmConfigurationWidgetFactory *factory)
Remove a configuration widget factory for customized algorithm configuration widgets.
void registerProviderToolboxAction(const QString &providerId, QgsProcessingToolboxAction *action)
Registers a toolbox action for a provider.
void registerModelConfigWidgetFactory(QgsProcessingModelConfigWidgetFactory *factory)
Register a new factory class for creating panel widgets that can be shown in the Processing model des...
void unregisterModelConfigWidgetFactory(QgsProcessingModelConfigWidgetFactory *factory)
Unregister a previously registered factory for creating panel widgets that can be shown in the Proces...
QgsProcessingAlgorithmConfigurationWidget * algorithmConfigurationWidget(const QgsProcessingAlgorithm *algorithm) const
Gets the configuration widget for an algorithm.
QList< QgsProcessingToolboxContextAction * > toolboxContextActionsForProvider(const QString &providerId) const
Returns a list of all toolbox context menu actions registered for a provider.
void deregisterProviderToolboxActions(const QString &providerId)
Deregisters all toolbox actions for a provider.
QgsAbstractProcessingParameterWidgetWrapper * createParameterWidgetWrapper(const QgsProcessingParameterDefinition *parameter, Qgis::ProcessingMode type)
Creates a new parameter widget wrapper for the given parameter.
Q_DECL_DEPRECATED void deregisterProviderToolboxContextAction(QgsProcessingToolboxContextAction *action)
Deregisters a context menu action.
void registerWidgetContextGenerator(QgsProcessingWidgetContextGenerator *generator)
Register a Processing widget context generator class that will be used to retrieve a widget context w...
void setDialogFactory(QgsProcessingDialogFactory *factory)
Sets the application's processing dialog factory.
QgsProcessingAbstractParameterDefinitionWidget * createParameterDefinitionWidget(const QString &type, QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext, const QgsProcessingParameterDefinition *definition=nullptr, const QgsProcessingAlgorithm *algorithm=nullptr)
Creates a new parameter definition widget allowing for configuration of an instance of a specific par...
QgsProcessingModelerParameterWidget * createModelerParameterWidget(QgsProcessingModelAlgorithm *model, const QString &childId, const QgsProcessingParameterDefinition *parameter, QgsProcessingContext &context)
Creates a new modeler parameter widget for the given parameter.
void setContextFactory(QgsProcessingContextFactory *factory)
Sets the application's Processing context factory.
void removeParameterWidgetFactory(QgsProcessingParameterWidgetFactoryInterface *factory)
Removes a parameter widget factory from the registry.
void registerProviderToolboxContextAction(const QString &providerId, QgsProcessingToolboxContextAction *action)
Registers a toolbox context menu action for a provider.
QgsProcessingContextFactory * contextFactory()
Returns the application's Processing context factory, if set.
QgsProcessingModelConfigWidget * createModelConfigWidgetForComponent(QgsProcessingModelComponent *component, QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext) const
Creates a new widget for configuring a Processing model component.
QgsProcessingParameterWidgetContext createWidgetContext() override
Register a Processing widget context.
QList< QgsProcessingToolboxAction * > toolboxActionsForProvider(const QString &providerId) const
Returns a list of all toolbox actions registered for a provider.
Factory class for creating panel widgets that can be shown in the Processing model designer dialog.
A panel widget that can be shown in the Processing model designer dialog for configuring part of the ...
A widget for customising the value of Processing algorithm parameters inside a Processing model.
A panel config widget combining parameter settings and comments for a child algorithm in a Processing...
A panel widget which allows users to specify the properties of a Processing parameter.
Base class for the definition of processing parameters.
QVariantMap metadata() const
Returns the parameter's freeform metadata.
QString description() const
Returns the description for the parameter.
virtual QString type() const =0
Unique parameter type name.
QString name() const
Returns the name of the parameter.
Contains settings which reflect the context in which a Processing parameter widget is shown.
QgsModelDesignerDialog * modelDesignerDialog() const
Returns the associated model designer dialog, if applicable.
void setModelChildAlgorithmId(const QString &id)
Sets the child algorithm id within the model which the parameter widget is associated with.
QgsProcessingModelAlgorithm * model() const
Returns the model which the parameter widget is associated with.
QgsProcessingContextGenerator * processingContextGenerator() const
Returns the Processing context generator class that will be used to retrieve a Processing context for...
An interface for Processing widget wrapper factories.
virtual QString parameterType() const =0
Returns the type string for the parameter type the factory is associated with.
A custom action to show in the Processing toolbox.
A custom action to show in the context menu for the Processing toolbox.
An interface for objects which can create Processing widget contexts.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call