@@ -209,6 +209,26 @@ def setupUi(self):
209209 self .verticalLayout .addWidget (self .datatypeCombo )
210210 elif (self .paramType == parameters .PARAMETER_NUMBER or self .paramType == parameters .PARAMETER_DISTANCE or
211211 isinstance (self .param , (QgsProcessingParameterNumber , QgsProcessingParameterDistance ))):
212+
213+ if (self .paramType == parameters .PARAMETER_DISTANCE or
214+ isinstance (self .param , QgsProcessingParameterDistance )):
215+ self .verticalLayout .addWidget (QLabel (self .tr ('Linked input' )))
216+ self .parentCombo = QComboBox ()
217+ self .parentCombo .addItem ('' , '' )
218+ idx = 1
219+ for param in list (self .alg .parameterComponents ().values ()):
220+ definition = self .alg .parameterDefinition (param .parameterName ())
221+ if isinstance (definition , (QgsProcessingParameterFeatureSource ,
222+ QgsProcessingParameterVectorLayer ,
223+ QgsProcessingParameterMapLayer ,
224+ QgsProcessingParameterCrs )):
225+ self .parentCombo .addItem (definition .description (), definition .name ())
226+ if self .param is not None :
227+ if self .param .parentParameterName () == definition .name ():
228+ self .parentCombo .setCurrentIndex (idx )
229+ idx += 1
230+ self .verticalLayout .addWidget (self .parentCombo )
231+
212232 self .verticalLayout .addWidget (QLabel (self .tr ('Min value' )))
213233 self .minTextBox = QLineEdit ()
214234 self .verticalLayout .addWidget (self .minTextBox )
@@ -399,11 +419,34 @@ def accept(self):
399419 self .param = QgsProcessingParameterMultipleLayers (
400420 name , description ,
401421 self .datatypeCombo .currentData ())
422+ elif (self .paramType == parameters .PARAMETER_DISTANCE or
423+ isinstance (self .param , QgsProcessingParameterDistance )):
424+ self .param = QgsProcessingParameterDistance (name , description ,
425+ self .defaultTextBox .text ())
426+ try :
427+ vmin = self .minTextBox .text ().strip ()
428+ if not vmin == '' :
429+ self .param .setMinimum (float (vmin ))
430+ vmax = self .maxTextBox .text ().strip ()
431+ if not vmax == '' :
432+ self .param .setMaximum (float (vmax ))
433+ except :
434+ QMessageBox .warning (self , self .tr ('Unable to define parameter' ),
435+ self .tr ('Wrong or missing parameter values' ))
436+ return
437+
438+ if self .parentCombo .currentIndex () < 0 :
439+ QMessageBox .warning (self , self .tr ('Unable to define parameter' ),
440+ self .tr ('Wrong or missing parameter values' ))
441+ return
442+ parent = self .parentCombo .currentData ()
443+ if parent :
444+ self .param .setParentParameterName (parent )
402445 elif (self .paramType == parameters .PARAMETER_NUMBER or
403- isinstance (self .param , (QgsProcessingParameterNumber , QgsProcessingParameterDistance ))):
446+ isinstance (self .param , QgsProcessingParameterNumber )):
447+ self .param = QgsProcessingParameterNumber (name , description , QgsProcessingParameterNumber .Double ,
448+ self .defaultTextBox .text ())
404449 try :
405- self .param = QgsProcessingParameterNumber (name , description , QgsProcessingParameterNumber .Double ,
406- self .defaultTextBox .text ())
407450 vmin = self .minTextBox .text ().strip ()
408451 if not vmin == '' :
409452 self .param .setMinimum (float (vmin ))
0 commit comments