diff --git a/python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py b/python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py index e2ff6b32311..d144d6be4e5 100755 --- a/python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py +++ b/python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py @@ -39,7 +39,6 @@ from qgis.PyQt.QtWidgets import (QDialog, QTextEdit) from qgis.gui import (QgsExpressionLineEdit, - QgsProjectionSelectionWidget, QgsProcessingLayerOutputDestinationWidget ) from qgis.core import (QgsApplication, @@ -91,7 +90,6 @@ class ModelerParameterDefinitionDialog(QDialog): parameters.PARAMETER_SCALE, parameters.PARAMETER_EXPRESSION, parameters.PARAMETER_POINT, - parameters.PARAMETER_CRS, parameters.PARAMETER_ENUM, parameters.PARAMETER_MATRIX, parameters.PARAMETER_MAP_LAYER): @@ -106,7 +104,6 @@ class ModelerParameterDefinitionDialog(QDialog): QgsProcessingParameterScale, QgsProcessingParameterExpression, QgsProcessingParameterPoint, - QgsProcessingParameterCrs, QgsProcessingParameterEnum, QgsProcessingParameterMatrix, QgsProcessingParameterMapLayer, @@ -339,15 +336,6 @@ class ModelerParameterDefinitionDialog(QDialog): if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) - elif (self.paramType == parameters.PARAMETER_CRS - or isinstance(self.param, QgsProcessingParameterCrs)): - self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) - self.selector = QgsProjectionSelectionWidget() - if self.param is not None: - self.selector.setCrs(QgsCoordinateReferenceSystem(self.param.defaultValue())) - else: - self.selector.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) - self.verticalLayout.addWidget(self.selector) elif self.paramType == parameters.PARAMETER_ENUM or \ isinstance(self.param, QgsProcessingParameterEnum): self.widget = EnumModelerWidget(self) @@ -548,9 +536,6 @@ class ModelerParameterDefinitionDialog(QDialog): or isinstance(self.param, QgsProcessingParameterPoint)): self.param = QgsProcessingParameterPoint(name, description, str(self.defaultTextBox.text())) - elif (self.paramType == parameters.PARAMETER_CRS - or isinstance(self.param, QgsProcessingParameterCrs)): - self.param = QgsProcessingParameterCrs(name, description, self.selector.crs().authid()) elif (self.paramType == parameters.PARAMETER_ENUM or isinstance(self.param, QgsProcessingParameterEnum)): self.param = QgsProcessingParameterEnum(name, description, self.widget.options(), self.widget.allowMultiple(), self.widget.defaultOptions()) diff --git a/src/gui/processing/qgsprocessingwidgetwrapperimpl.cpp b/src/gui/processing/qgsprocessingwidgetwrapperimpl.cpp index f5ac21c872c..1276d3f47c9 100644 --- a/src/gui/processing/qgsprocessingwidgetwrapperimpl.cpp +++ b/src/gui/processing/qgsprocessingwidgetwrapperimpl.cpp @@ -238,6 +238,32 @@ QgsProcessingAbstractParameterDefinitionWidget *QgsProcessingBooleanWidgetWrappe // QgsProcessingCrsWidgetWrapper // +QgsProcessingCrsParameterDefinitionWidget::QgsProcessingCrsParameterDefinitionWidget( QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext, const QgsProcessingParameterDefinition *definition, const QgsProcessingAlgorithm *algorithm, QWidget *parent ) + : QgsProcessingAbstractParameterDefinitionWidget( context, widgetContext, definition, algorithm, parent ) +{ + QVBoxLayout *vlayout = new QVBoxLayout(); + vlayout->setMargin( 0 ); + vlayout->setContentsMargins( 0, 0, 0, 0 ); + + vlayout->addWidget( new QLabel( tr( "Default value" ) ) ); + + mCrsSelector = new QgsProjectionSelectionWidget(); + if ( const QgsProcessingParameterCrs *crsParam = dynamic_cast( definition ) ) + mCrsSelector->setCrs( QgsProcessingParameters::parameterAsCrs( crsParam, crsParam->defaultValue(), context ) ); + else + mCrsSelector->setCrs( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:4326" ) ) ); + + vlayout->addWidget( mCrsSelector ); + setLayout( vlayout ); +} + +QgsProcessingParameterDefinition *QgsProcessingCrsParameterDefinitionWidget::createParameter( const QString &name, const QString &description, QgsProcessingParameterDefinition::Flags flags ) const +{ + auto param = qgis::make_unique< QgsProcessingParameterCrs >( name, description, mCrsSelector->crs().authid() ); + param->setFlags( flags ); + return param.release(); +} + QgsProcessingCrsWidgetWrapper::QgsProcessingCrsWidgetWrapper( const QgsProcessingParameterDefinition *parameter, QgsProcessingGui::WidgetType type, QWidget *parent ) : QgsAbstractProcessingParameterWidgetWrapper( parameter, type, parent ) { @@ -364,6 +390,11 @@ QgsAbstractProcessingParameterWidgetWrapper *QgsProcessingCrsWidgetWrapper::crea return new QgsProcessingCrsWidgetWrapper( parameter, type ); } +QgsProcessingAbstractParameterDefinitionWidget *QgsProcessingCrsWidgetWrapper::createParameterDefinitionWidget( QgsProcessingContext &context, const QgsProcessingParameterWidgetContext &widgetContext, const QgsProcessingParameterDefinition *definition, const QgsProcessingAlgorithm *algorithm ) +{ + return new QgsProcessingCrsParameterDefinitionWidget( context, widgetContext, definition, algorithm ); +} + // diff --git a/src/gui/processing/qgsprocessingwidgetwrapperimpl.h b/src/gui/processing/qgsprocessingwidgetwrapperimpl.h index eec7e8586e4..7e506b368f8 100644 --- a/src/gui/processing/qgsprocessingwidgetwrapperimpl.h +++ b/src/gui/processing/qgsprocessingwidgetwrapperimpl.h @@ -118,6 +118,24 @@ class GUI_EXPORT QgsProcessingBooleanWidgetWrapper : public QgsAbstractProcessin friend class TestProcessingGui; }; + + +class GUI_EXPORT QgsProcessingCrsParameterDefinitionWidget : public QgsProcessingAbstractParameterDefinitionWidget +{ + Q_OBJECT + public: + + QgsProcessingCrsParameterDefinitionWidget( QgsProcessingContext &context, + const QgsProcessingParameterWidgetContext &widgetContext, + const QgsProcessingParameterDefinition *definition = nullptr, + const QgsProcessingAlgorithm *algorithm = nullptr, QWidget *parent SIP_TRANSFERTHIS = nullptr ); + QgsProcessingParameterDefinition *createParameter( const QString &name, const QString &description, QgsProcessingParameterDefinition::Flags flags ) const override; + + private: + + QgsProjectionSelectionWidget *mCrsSelector = nullptr; +}; + class GUI_EXPORT QgsProcessingCrsWidgetWrapper : public QgsAbstractProcessingParameterWidgetWrapper, public QgsProcessingParameterWidgetFactoryInterface { Q_OBJECT @@ -130,6 +148,11 @@ class GUI_EXPORT QgsProcessingCrsWidgetWrapper : public QgsAbstractProcessingPar // QgsProcessingParameterWidgetFactoryInterface QString parameterType() const override; QgsAbstractProcessingParameterWidgetWrapper *createWidgetWrapper( const QgsProcessingParameterDefinition *parameter, QgsProcessingGui::WidgetType type ) override; + QgsProcessingAbstractParameterDefinitionWidget *createParameterDefinitionWidget( + QgsProcessingContext &context, + const QgsProcessingParameterWidgetContext &widgetContext, + const QgsProcessingParameterDefinition *definition = nullptr, + const QgsProcessingAlgorithm *algorithm = nullptr ) override; // QgsProcessingParameterWidgetWrapper interface QWidget *createWidget() override SIP_FACTORY;