19#ifndef QGSPROCESSINGWIDGETWRAPPERIMPL_H
20#define QGSPROCESSINGWIDGETWRAPPERIMPL_H
32#include <QAbstractButton>
44class QgsProcessingMatrixParameterPanel;
66class QgsProcessingEnumModelerWidget;
67class QgsProcessingMatrixModelerWidget;
68class QgsProcessingMapLayerComboBox;
71class QgsProcessingLayerOutputDestinationWidget;
74class QgsProcessingPointCloudExpressionLineEdit;
75class QgsProcessingRasterCalculatorExpressionLineEdit;
90 QCheckBox *mDefaultCheckBox =
nullptr;
101 QString parameterType()
const override;
116 QVariant widgetValue() const override;
119 QCheckBox *mCheckBox =
nullptr;
120 QComboBox *mComboBox =
nullptr;
122 friend class TestProcessingGui;
145 QString parameterType()
const override;
159 QVariant widgetValue() const override;
161 QString modelerExpressionFormatString() const override;
165 QCheckBox *mUseProjectCrsCheckBox =
nullptr;
167 friend class TestProcessingGui;
179 QLineEdit *mDefaultLineEdit =
nullptr;
180 QCheckBox *mMultiLineCheckBox =
nullptr;
191 QString parameterType()
const override;
205 QVariant widgetValue() const override;
208 QLineEdit *mLineEdit =
nullptr;
209 QComboBox *mComboBox =
nullptr;
210 QPlainTextEdit *mPlainTextEdit =
nullptr;
212 friend class TestProcessingGui;
224 QString parameterType()
const override;
232 QVariant widgetValue() const override;
237 friend class TestProcessingGui;
249 QComboBox *mTypeComboBox =
nullptr;
250 QLineEdit *mMinLineEdit =
nullptr;
251 QLineEdit *mMaxLineEdit =
nullptr;
252 QLineEdit *mDefaultLineEdit =
nullptr;
264 QString parameterType()
const override;
278 QVariant widgetValue() const override;
285 static
double calculateStep(
double minimum,
double maximum );
287 bool mAllowingNull = false;
289 friend class TestProcessingGui;
301 QComboBox *mParentLayerComboBox =
nullptr;
302 QLineEdit *mMinLineEdit =
nullptr;
303 QLineEdit *mMaxLineEdit =
nullptr;
304 QLineEdit *mDefaultLineEdit =
nullptr;
307class GUI_EXPORT QgsProcessingDistanceWidgetWrapper :
public QgsProcessingNumericWidgetWrapper
315 QString parameterType()
const override;
330 void setUnits(
Qgis::DistanceUnit unit );
333 QVariant widgetValue() const override;
336 Qgis::DistanceUnit mBaseUnit =
Qgis::DistanceUnit::Unknown;
337 QLabel *mLabel =
nullptr;
338 QWidget *mWarningLabel =
nullptr;
339 QComboBox *mUnitsCombo =
nullptr;
341 friend class TestProcessingGui;
352 QComboBox *mParentLayerComboBox =
nullptr;
353 QLineEdit *mMinLineEdit =
nullptr;
354 QLineEdit *mMaxLineEdit =
nullptr;
355 QLineEdit *mDefaultLineEdit =
nullptr;
358class GUI_EXPORT QgsProcessingAreaWidgetWrapper :
public QgsProcessingNumericWidgetWrapper
366 QString parameterType()
const override;
381 void setUnits(
Qgis::AreaUnit unit );
384 QVariant widgetValue() const override;
387 Qgis::AreaUnit mBaseUnit =
Qgis::AreaUnit::Unknown;
388 QLabel *mLabel =
nullptr;
389 QWidget *mWarningLabel =
nullptr;
390 QComboBox *mUnitsCombo =
nullptr;
392 friend class TestProcessingGui;
404 QComboBox *mParentLayerComboBox =
nullptr;
405 QLineEdit *mMinLineEdit =
nullptr;
406 QLineEdit *mMaxLineEdit =
nullptr;
407 QLineEdit *mDefaultLineEdit =
nullptr;
410class GUI_EXPORT QgsProcessingVolumeWidgetWrapper :
public QgsProcessingNumericWidgetWrapper
418 QString parameterType()
const override;
433 void setUnits(
Qgis::VolumeUnit unit );
436 QVariant widgetValue() const override;
439 Qgis::VolumeUnit mBaseUnit =
Qgis::VolumeUnit::Unknown;
440 QLabel *mLabel =
nullptr;
441 QWidget *mWarningLabel =
nullptr;
442 QComboBox *mUnitsCombo =
nullptr;
444 friend class TestProcessingGui;
456 QLineEdit *mMinLineEdit =
nullptr;
457 QLineEdit *mMaxLineEdit =
nullptr;
458 QLineEdit *mDefaultLineEdit =
nullptr;
459 QComboBox *mUnitsCombo =
nullptr;
462class GUI_EXPORT QgsProcessingDurationWidgetWrapper :
public QgsProcessingNumericWidgetWrapper
470 QString parameterType()
const override;
484 QVariant widgetValue() const override;
488 Qgis::TemporalUnit mBaseUnit =
Qgis::TemporalUnit::Milliseconds;
489 QComboBox *mUnitsCombo =
nullptr;
491 friend class TestProcessingGui;
502 QLineEdit *mDefaultLineEdit =
nullptr;
505class GUI_EXPORT QgsProcessingScaleWidgetWrapper :
public QgsProcessingNumericWidgetWrapper
513 QString parameterType()
const override;
527 QVariant widgetValue() const override;
533 friend class TestProcessingGui;
545 QComboBox *mTypeComboBox =
nullptr;
546 QLineEdit *mMinLineEdit =
nullptr;
547 QLineEdit *mMaxLineEdit =
nullptr;
558 QString parameterType()
const override;
572 QVariant widgetValue() const override;
573 QString modelerExpressionFormatString() const override;
580 int mBlockChangedSignal = 0;
581 bool mAllowingNull = false;
583 friend class TestProcessingGui;
594 QgsProcessingMatrixModelerWidget *mMatrixWidget =
nullptr;
605 QString parameterType()
const override;
619 QVariant widgetValue() const override;
621 QString modelerExpressionFormatString() const override;
624 QgsProcessingMatrixParameterPanel *mMatrixWidget =
nullptr;
626 friend class TestProcessingGui;
637 QComboBox *mTypeComboBox =
nullptr;
638 QComboBox *mFilterComboBox =
nullptr;
650 QString parameterType()
const override;
664 QVariant widgetValue() const override;
666 QString modelerExpressionFormatString() const override;
671 friend class TestProcessingGui;
683 QComboBox *mParentLayerComboBox =
nullptr;
685 QgsProcessingPointCloudExpressionLineEdit *mDefaultPointCloudLineEdit =
nullptr;
686 QgsProcessingRasterCalculatorExpressionLineEdit *mDefaultRasterCalculatorLineEdit =
nullptr;
687 QComboBox *mExpressionTypeComboBox =
nullptr;
698 QString parameterType()
const override;
717 QVariant widgetValue() const override;
719 QString modelerExpressionFormatString() const override;
726 QgsProcessingPointCloudExpressionLineEdit *mPointCloudExpLineEdit =
nullptr;
727 QgsProcessingRasterCalculatorExpressionLineEdit *mRasterCalculatorExpLineEdit =
nullptr;
730 friend class TestProcessingGui;
734class GUI_EXPORT QgsProcessingEnumCheckboxPanelWidget : public QWidget
739 QgsProcessingEnumCheckboxPanelWidget( QWidget *parent =
nullptr,
const QgsProcessingParameterEnum *param =
nullptr,
int columns = 2 );
740 QVariant value()
const;
741 void setValue(
const QVariant &value );
749 void showPopupMenu();
755 QMap<QVariant, QAbstractButton *> mButtons;
756 QButtonGroup *mButtonGroup =
nullptr;
758 bool mBlockChangedSignal =
false;
760 friend class TestProcessingGui;
763class GUI_EXPORT QgsProcessingEnumPanelWidget :
public QWidget
769 QVariant value()
const {
return mValue; }
770 void setValue(
const QVariant &value );
781 void updateSummaryText();
784 QLineEdit *mLineEdit =
nullptr;
785 QToolButton *mToolButton =
nullptr;
789 friend class TestProcessingGui;
800 QgsProcessingEnumModelerWidget *mEnumWidget =
nullptr;
811 QString parameterType()
const override;
825 QVariant widgetValue() const override;
827 QString modelerExpressionFormatString() const override;
830 QComboBox *mComboBox =
nullptr;
831 QgsProcessingEnumPanelWidget *mPanel =
nullptr;
832 QgsProcessingEnumCheckboxPanelWidget *mCheckboxPanel =
nullptr;
834 friend class TestProcessingGui;
846 QString parameterType()
const override;
854 QVariant widgetValue() const override;
857 QString modelerExpressionFormatString() const override;
861 QComboBox *mPlainComboBox =
nullptr;
863 friend class TestProcessingGui;
875 QComboBox *mParentLayoutComboBox =
nullptr;
886 QString parameterType()
const override;
901 void setLayoutParameterValue( const QVariant &value );
906 QVariant widgetValue() const override;
908 QString modelerExpressionFormatString() const override;
912 QLineEdit *mLineEdit =
nullptr;
914 friend class TestProcessingGui;
917class GUI_EXPORT QgsProcessingPointMapTool : public
QgsMapTool
922 ~QgsProcessingPointMapTool()
override;
923 void deactivate()
override;
926 void keyPressEvent( QKeyEvent *e )
override;
934 std::unique_ptr<QgsSnapIndicator> mSnapIndicator;
935 friend class TestProcessingGui;
938class GUI_EXPORT QgsProcessingPointPanel :
public QWidget
943 QgsProcessingPointPanel( QWidget *parent );
945 void setAllowNull(
bool allowNull );
946 void setShowPointOnCanvas(
bool show );
947 void setAllowSelectOnCanvas(
bool allow );
949 QVariant value()
const;
952 void showEvent( QShowEvent *event )
override;
956 void toggleDialogVisibility(
bool visible );
961 void selectOnCanvas();
964 void textChanged(
const QString &text );
967 void updateRubberBand();
970 bool mShowPointOnCanvas =
false;
971 bool mFirstShow =
true;
972 bool mAllowSelectOnCanvas =
true;
973 QToolButton *mButton =
nullptr;
976 QPointer<QgsMapTool> mPrevTool;
977 std::unique_ptr<QgsProcessingPointMapTool> mTool;
980 friend class TestProcessingGui;
992 QLineEdit *mDefaultLineEdit =
nullptr;
1003 QString parameterType()
const override;
1015 void setDialog( QDialog *dialog ) override;
1019 QVariant widgetValue() const override;
1021 QString modelerExpressionFormatString() const override;
1024 QgsProcessingPointPanel *mPanel =
nullptr;
1025 QLineEdit *mLineEdit =
nullptr;
1026 QDialog *mDialog =
nullptr;
1028 friend class TestProcessingGui;
1050 QString parameterType()
const override;
1064 QVariant widgetValue() const override;
1066 QString modelerExpressionFormatString() const override;
1071 friend class TestProcessingGui;
1093 QString parameterType()
const override;
1105 void setDialog( QDialog *dialog ) override;
1109 QVariant widgetValue() const override;
1111 QString modelerExpressionFormatString() const override;
1115 QDialog *mDialog =
nullptr;
1117 friend class TestProcessingGui;
1129 QCheckBox *mAllowOpacity =
nullptr;
1140 QString parameterType()
const override;
1154 QVariant widgetValue() const override;
1156 QString modelerExpressionFormatString() const override;
1160 friend class TestProcessingGui;
1172 QLineEdit *mDefaultLineEdit =
nullptr;
1174 QComboBox *mSourceParamComboBox =
nullptr;
1175 QComboBox *mDestParamComboBox =
nullptr;
1189 QString parameterType()
const override;
1205 QVariant widgetValue() const override;
1207 QString modelerExpressionFormatString() const override;
1210 void setSourceCrsParameterValue( const QVariant &value );
1211 void setDestinationCrsParameterValue( const QVariant &value );
1215 QLineEdit *mLineEdit =
nullptr;
1218 friend class TestProcessingGui;
1221class GUI_EXPORT QgsProcessingFieldPanelWidget : public QWidget
1228 void setFields(
const QgsFields &fields );
1230 QgsFields fields()
const {
return mFields; }
1232 QVariant value()
const {
return mValue; }
1233 void setValue(
const QVariant &value );
1244 void updateSummaryText();
1249 QLineEdit *mLineEdit =
nullptr;
1250 QToolButton *mToolButton =
nullptr;
1252 QVariantList mValue;
1254 friend class TestProcessingGui;
1265 QComboBox *mParentLayerComboBox =
nullptr;
1266 QComboBox *mDataTypeComboBox =
nullptr;
1267 QLineEdit *mDefaultLineEdit =
nullptr;
1268 QCheckBox *mAllowMultipleCheckBox =
nullptr;
1269 QCheckBox *mDefaultToAllCheckBox =
nullptr;
1280 QString parameterType()
const override;
1298 QVariant widgetValue() const override;
1300 QString modelerExpressionFormatString() const override;
1305 QgsProcessingFieldPanelWidget *mPanel =
nullptr;
1306 QLineEdit *mLineEdit =
nullptr;
1312 friend class TestProcessingGui;
1324 QComboBox *mDefaultComboBox =
nullptr;
1335 QString parameterType()
const override;
1349 QVariant widgetValue() const override;
1351 QString modelerExpressionFormatString() const override;
1354 QComboBox *mComboBox =
nullptr;
1356 friend class TestProcessingGui;
1368 QComboBox *mTypeComboBox =
nullptr;
1379 QString parameterType()
const override;
1393 QVariant widgetValue() const override;
1395 QString modelerExpressionFormatString() const override;
1402 friend class TestProcessingGui;
1418 QComboBox *mProviderComboBox =
nullptr;
1419 QLineEdit *mDefaultEdit =
nullptr;
1430 QString parameterType()
const override;
1445 QVariant widgetValue() const override;
1447 QString modelerExpressionFormatString() const override;
1451 int mBlockSignals = 0;
1453 friend class TestProcessingGui;
1465 QComboBox *mConnectionParamComboBox =
nullptr;
1466 QLineEdit *mDefaultEdit =
nullptr;
1477 QString parameterType()
const override;
1479 void postInitialize(
const QList<QgsAbstractProcessingParameterWidgetWrapper *> &wrappers )
override;
1496 QVariant widgetValue() const override;
1498 QString modelerExpressionFormatString() const override;
1502 int mBlockSignals = 0;
1504 friend class TestProcessingGui;
1516 QComboBox *mConnectionParamComboBox =
nullptr;
1517 QComboBox *mSchemaParamComboBox =
nullptr;
1518 QLineEdit *mDefaultEdit =
nullptr;
1529 QString parameterType()
const override;
1531 void postInitialize(
const QList<QgsAbstractProcessingParameterWidgetWrapper *> &wrappers )
override;
1549 QVariant widgetValue() const override;
1551 QString modelerExpressionFormatString() const override;
1555 int mBlockSignals = 0;
1556 QString mConnection;
1560 friend class TestProcessingGui;
1582 QString parameterType()
const override;
1597 QVariant widgetValue() const override;
1599 QString modelerExpressionFormatString() const override;
1603 QPointer<QgsProcessingMapLayerComboBox> mComboBox;
1604 int mBlockSignals = 0;
1606 friend class TestProcessingGui;
1610class GUI_EXPORT QgsProcessingRasterLayerWidgetWrapper : public QgsProcessingMapLayerWidgetWrapper
1618 QString parameterType()
const override;
1628 QString modelerExpressionFormatString()
const override;
1643class GUI_EXPORT QgsProcessingVectorLayerWidgetWrapper :
public QgsProcessingMapLayerWidgetWrapper
1651 QString parameterType()
const override;
1661 QString modelerExpressionFormatString()
const override;
1676class GUI_EXPORT QgsProcessingFeatureSourceWidgetWrapper :
public QgsProcessingMapLayerWidgetWrapper
1684 QString parameterType()
const override;
1694 QString modelerExpressionFormatString()
const override;
1698class GUI_EXPORT QgsProcessingMeshLayerWidgetWrapper :
public QgsProcessingMapLayerWidgetWrapper
1706 QString parameterType()
const override;
1716 QString modelerExpressionFormatString()
const override;
1720class GUI_EXPORT QgsProcessingRasterBandPanelWidget :
public QWidget
1727 void setBands(
const QList<int> &bands );
1728 void setBandNames(
const QHash<int, QString> &names );
1729 QList<int> bands()
const {
return mBands; }
1731 QVariant value()
const {
return mValue; }
1732 void setValue(
const QVariant &value );
1743 void updateSummaryText();
1746 QHash<int, QString> mBandNames;
1749 QLineEdit *mLineEdit =
nullptr;
1750 QToolButton *mToolButton =
nullptr;
1752 QVariantList mValue;
1754 friend class TestProcessingGui;
1765 QComboBox *mParentLayerComboBox =
nullptr;
1766 QLineEdit *mDefaultLineEdit =
nullptr;
1767 QCheckBox *mAllowMultipleCheckBox =
nullptr;
1778 QString parameterType()
const override;
1796 QVariant widgetValue() const override;
1798 QString modelerExpressionFormatString() const override;
1802 QgsProcessingRasterBandPanelWidget *mPanel =
nullptr;
1803 QLineEdit *mLineEdit =
nullptr;
1807 friend class TestProcessingGui;
1817 void dragEnterEvent( QDragEnterEvent *event )
override;
1818 void dragLeaveEvent( QDragLeaveEvent *event )
override;
1819 void dropEvent( QDropEvent *event )
override;
1823 void layersDropped(
const QVariantList &value );
1829class GUI_EXPORT QgsProcessingMultipleLayerPanelWidget :
public QWidget
1836 QVariant value()
const {
return mValue; }
1837 void setValue(
const QVariant &value );
1840 void setModel( QgsProcessingModelAlgorithm *model,
const QString &modelChildAlgorithmID );
1851 void updateSummaryText();
1854 QgsProcessingMultipleLayerLineEdit *mLineEdit =
nullptr;
1855 QToolButton *mToolButton =
nullptr;
1857 QVariantList mValue;
1858 QList<QgsProcessingModelChildParameterSource> mModelSources;
1859 QgsProcessingModelAlgorithm *mModel =
nullptr;
1863 friend class TestProcessingGui;
1874 QComboBox *mLayerTypeComboBox =
nullptr;
1885 QString parameterType()
const override;
1900 QVariant widgetValue() const override;
1902 QString modelerExpressionFormatString() const override;
1905 QgsProcessingMultipleLayerPanelWidget *mPanel =
nullptr;
1907 friend class TestProcessingGui;
1923 QVariant widgetValue() const override;
1924 QVariantMap customProperties() const override;
1927 QgsProcessingLayerOutputDestinationWidget *mOutputWidget =
nullptr;
1928 int mBlockSignals = 0;
1930 friend class TestProcessingGui;
1934class GUI_EXPORT QgsProcessingFeatureSinkWidgetWrapper : public QgsProcessingOutputWidgetWrapper
1942 QString parameterType()
const override;
1946 QString modelerExpressionFormatString()
const override;
1952class GUI_EXPORT QgsProcessingVectorDestinationWidgetWrapper :
public QgsProcessingOutputWidgetWrapper
1960 QString parameterType()
const override;
1964 QString modelerExpressionFormatString()
const override;
1967class GUI_EXPORT QgsProcessingRasterDestinationWidgetWrapper :
public QgsProcessingOutputWidgetWrapper
1975 QString parameterType()
const override;
1979 QString modelerExpressionFormatString()
const override;
1982class GUI_EXPORT QgsProcessingPointCloudDestinationWidgetWrapper :
public QgsProcessingOutputWidgetWrapper
1990 QString parameterType()
const override;
1994 QString modelerExpressionFormatString()
const override;
1997class GUI_EXPORT QgsProcessingFileDestinationWidgetWrapper :
public QgsProcessingOutputWidgetWrapper
2005 QString parameterType()
const override;
2009 QString modelerExpressionFormatString()
const override;
2012class GUI_EXPORT QgsProcessingFolderDestinationWidgetWrapper :
public QgsProcessingOutputWidgetWrapper
2020 QString parameterType()
const override;
2024 QString modelerExpressionFormatString()
const override;
2027class GUI_EXPORT QgsProcessingPointCloudLayerWidgetWrapper :
public QgsProcessingMapLayerWidgetWrapper
2035 QString parameterType()
const override;
2045 QString modelerExpressionFormatString()
const override;
2057 QString parameterType()
const override;
2071 QVariant widgetValue() const override;
2073 QString modelerExpressionFormatString() const override;
2077 int mBlockSignals = 0;
2079 friend class TestProcessingGui;
2083class GUI_EXPORT QgsProcessingPointCloudAttributePanelWidget : public QWidget
2094 QVariant value()
const {
return mValue; }
2095 void setValue(
const QVariant &value );
2106 void updateSummaryText();
2111 QLineEdit *mLineEdit =
nullptr;
2112 QToolButton *mToolButton =
nullptr;
2114 QVariantList mValue;
2116 friend class TestProcessingGui;
2127 QComboBox *mParentLayerComboBox =
nullptr;
2128 QLineEdit *mDefaultLineEdit =
nullptr;
2129 QCheckBox *mAllowMultipleCheckBox =
nullptr;
2130 QCheckBox *mDefaultToAllCheckBox =
nullptr;
2141 QString parameterType()
const override;
2159 QVariant widgetValue() const override;
2161 QString modelerExpressionFormatString() const override;
2165 QgsProcessingPointCloudAttributePanelWidget *mPanel =
nullptr;
2166 QLineEdit *mLineEdit =
nullptr;
2170 friend class TestProcessingGui;
2173class GUI_EXPORT QgsProcessingVectorTileDestinationWidgetWrapper : public QgsProcessingOutputWidgetWrapper
2181 QString parameterType()
const override;
2185 QString modelerExpressionFormatString()
const override;
Keeps a pointer to a QObject and deletes it whenever this object is deleted.
Provides global constants and enumerations for use throughout the application.
ProcessingMode
Types of modes which Processing widgets can be created for.
@ Standard
Standard (single-run) algorithm mode.
QFlags< ProcessingParameterFlag > ProcessingParameterFlags
Flags which dictate the behavior of Processing parameters.
Selector widget for authentication configs.
QComboBox subclass which allows selecting multiple items.
Represents a coordinate reference system (CRS).
A combo box which displays the list of schemas for a specific database connection.
A combobox which displays the list of tables for a specific database connection.
A QDateEdit widget with the capability of setting/reading null dates.
A QDateTimeEdit with the capability of setting/reading null date/times.
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value.
A widget which includes a line edit for entering expressions together with a button to open the expre...
A combobox which displays the list of fields of a given layer.
Container of fields for a vector layer.
QLineEdit subclass with built in support for clearing the widget's value and handling custom null val...
A QgsFilterLineEdit subclass with the ability to "highlight" the edges of the widget.
A combobox which displays available layouts from a QgsLayoutManager.
A combo box which displays items of a matching type from a layout.
Map canvas is a class for displaying all GIS data types on a canvas.
A combobox which displays a dynamic list of layers from a QGIS project.
Base class for all map layer types.
A mouse event which is the result of a user interaction with a QgsMapCanvas.
A collection of point cloud attributes.
A combobox which displays the list of attributes of a given point cloud layer.
Represents a map layer supporting display of point clouds.
Print layout, a QgsLayout subclass for static or atlas-based layouts.
Abstract base class for processing algorithms.
An interface for objects which can create Processing contexts.
Contains information about the context in which a processing algorithm is executed.
A raster band parameter for Processing algorithms.
Base class for the definition of processing parameters.
An enum based parameter for processing algorithms, allowing for selection from predefined values.
A vector layer or feature source field parameter for processing algorithms.
A parameter for processing algorithms which accepts multiple map layers.
A point cloud layer attribute parameter for Processing algorithms.
Contains settings which reflect the context in which a Processing parameter widget is shown.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
A combo box which displays the list of connections registered for a given provider.
A combobox widget which displays the bands present in a raster layer.
Represents a raster layer.
Responsible for drawing transient features (e.g.
Shows a snapping marker on map canvas for the current snapping match.
A spin box with a clear button that will set the value to the defined clear value.
A QTimeEdit widget with the capability of setting/reading null date/times.
Represents a vector layer which manages a vector based dataset.
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
const QgsCoordinateReferenceSystem & crs