Skip to content

Commit 400cf13

Browse files
authored
Merge pull request qgis#59090 from nirvn/processing_geometry_parameter_fix
[processing] Fix clipping of long WKT strings for geometry parameters by using our geometry widget
2 parents 70f43ee + ea78053 commit 400cf13

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

src/gui/processing/qgsprocessingwidgetwrapperimpl.cpp

+27-15
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@
6868
#include "qgsprocessingpointcloudexpressionlineedit.h"
6969
#include "qgsprocessingrastercalculatorexpressionlineedit.h"
7070
#include "qgsunittypes.h"
71+
#include "qgsgeometrywidget.h"
72+
7173
#include <QToolButton>
7274
#include <QLabel>
7375
#include <QHBoxLayout>
@@ -4427,23 +4429,24 @@ QgsProcessingGeometryParameterDefinitionWidget::QgsProcessingGeometryParameterDe
44274429

44284430
vlayout->addWidget( new QLabel( tr( "Default value" ) ) );
44294431

4430-
mDefaultLineEdit = new QLineEdit();
4431-
mDefaultLineEdit->setToolTip( tr( "Geometry as WKT" ) );
4432-
mDefaultLineEdit->setPlaceholderText( tr( "Geometry as WKT" ) );
4432+
mGeometryWidget = new QgsGeometryWidget();
44334433
if ( const QgsProcessingParameterGeometry *geometryParam = dynamic_cast<const QgsProcessingParameterGeometry *>( definition ) )
44344434
{
44354435
QgsGeometry g = QgsProcessingParameters::parameterAsGeometry( geometryParam, geometryParam->defaultValueForGui(), context );
44364436
if ( !g.isNull() )
4437-
mDefaultLineEdit->setText( g.asWkt() );
4437+
{
4438+
mGeometryWidget->setGeometryValue( QgsReferencedGeometry( g, QgsCoordinateReferenceSystem() ) );
4439+
}
44384440
}
44394441

4440-
vlayout->addWidget( mDefaultLineEdit );
4442+
vlayout->addWidget( mGeometryWidget );
44414443
setLayout( vlayout );
44424444
}
44434445

44444446
QgsProcessingParameterDefinition *QgsProcessingGeometryParameterDefinitionWidget::createParameter( const QString &name, const QString &description, Qgis::ProcessingParameterFlags flags ) const
44454447
{
4446-
auto param = std::make_unique< QgsProcessingParameterGeometry >( name, description, mDefaultLineEdit->text() );
4448+
const QgsReferencedGeometry geometry = mGeometryWidget->geometryValue();
4449+
auto param = std::make_unique< QgsProcessingParameterGeometry >( name, description, geometry.isEmpty() ? QVariant() : geometry.asWkt() );
44474450
param->setFlags( flags );
44484451
return param.release();
44494452
}
@@ -4462,36 +4465,45 @@ QWidget *QgsProcessingGeometryWidgetWrapper::createWidget()
44624465
case QgsProcessingGui::Modeler:
44634466
case QgsProcessingGui::Batch:
44644467
{
4465-
mLineEdit = new QLineEdit();
4466-
mLineEdit->setToolTip( parameterDefinition()->toolTip() );
4467-
connect( mLineEdit, &QLineEdit::textChanged, this, [ = ]
4468+
mGeometryWidget = new QgsGeometryWidget();
4469+
mGeometryWidget->setToolTip( parameterDefinition()->toolTip() );
4470+
connect( mGeometryWidget, &QgsGeometryWidget::geometryValueChanged, this, [ = ]( const QgsReferencedGeometry & )
44684471
{
44694472
emit widgetValueHasChanged( this );
44704473
} );
4471-
return mLineEdit;
4474+
return mGeometryWidget;
44724475
}
44734476
}
44744477
return nullptr;
44754478
}
44764479

44774480
void QgsProcessingGeometryWidgetWrapper::setWidgetValue( const QVariant &value, QgsProcessingContext &context )
44784481
{
4479-
if ( mLineEdit )
4482+
if ( mGeometryWidget )
44804483
{
44814484
QgsGeometry g = QgsProcessingParameters::parameterAsGeometry( parameterDefinition(), value, context );
44824485
if ( !g.isNull() )
4483-
mLineEdit->setText( g.asWkt() );
4486+
{
4487+
mGeometryWidget->setGeometryValue( QgsReferencedGeometry( g, QgsCoordinateReferenceSystem() ) );
4488+
}
44844489
else
4485-
mLineEdit->clear();
4490+
{
4491+
mGeometryWidget->clearGeometry();
4492+
}
44864493
}
44874494
}
44884495

44894496
QVariant QgsProcessingGeometryWidgetWrapper::widgetValue() const
44904497
{
4491-
if ( mLineEdit )
4492-
return mLineEdit->text().isEmpty() ? QVariant() : mLineEdit->text();
4498+
if ( mGeometryWidget )
4499+
{
4500+
const QgsReferencedGeometry geometry = mGeometryWidget->geometryValue();
4501+
return geometry.isEmpty() ? QVariant() : geometry.asWkt();
4502+
}
44934503
else
4504+
{
44944505
return QVariant();
4506+
}
44954507
}
44964508

44974509
QStringList QgsProcessingGeometryWidgetWrapper::compatibleParameterTypes() const

src/gui/processing/qgsprocessingwidgetwrapperimpl.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class QgsProcessingPointCloudExpressionLineEdit;
7575
class QgsProcessingRasterCalculatorExpressionLineEdit;
7676
class QgsRubberBand;
7777
class QgsHighlightableLineEdit;
78+
class QgsGeometryWidget;
7879

7980
///@cond PRIVATE
8081

@@ -1238,7 +1239,7 @@ class GUI_EXPORT QgsProcessingGeometryParameterDefinitionWidget : public QgsProc
12381239

12391240
private:
12401241

1241-
QLineEdit *mDefaultLineEdit = nullptr;
1242+
QgsGeometryWidget *mGeometryWidget = nullptr;
12421243

12431244
};
12441245

@@ -1274,7 +1275,7 @@ class GUI_EXPORT QgsProcessingGeometryWidgetWrapper : public QgsAbstractProcessi
12741275
QString modelerExpressionFormatString() const override;
12751276
private:
12761277

1277-
QLineEdit *mLineEdit = nullptr;
1278+
QgsGeometryWidget *mGeometryWidget = nullptr;
12781279

12791280
friend class TestProcessingGui;
12801281
};

0 commit comments

Comments
 (0)