3939 QgsProcessingOutputVectorLayer ,
4040 QgsProcessingOutputRasterLayer ,
4141 QgsProcessingParameterFeatureSource ,
42+ QgsProcessingModelAlgorithm ,
4243 QgsProcessingParameterRasterLayer )
4344from qgis .gui import QgsExpressionBuilderDialog
4445from processing .modeler .ModelerAlgorithm import ValueFromInput , ValueFromOutput , CompoundValue
@@ -82,28 +83,30 @@ def showExpressionsBuilder(self):
8283 values = self .modelParametersDialog .getAvailableValuesOfType (QgsProcessingParameterNumber , QgsProcessingOutputNumber )
8384 variables = {}
8485 for value in values :
85- if isinstance (value , ValueFromInput ):
86- name = value .name
87- element = self .modelParametersDialog .model .inputs [name ].param
88- desc = element .description
89- else :
90- name = "%s_%s" % (value .alg , value .output )
91- alg = self .modelParametersDialog .model .algs [value .alg ]
92- out = alg .algorithm .outputDefinition (value .output )
93- desc = self .tr ("Output '{0}' from algorithm '{1}'" ).format (out .description (), alg .description )
86+ if isinstance (value , QgsProcessingModelAlgorithm .ChildParameterSource ):
87+ if value .source () == QgsProcessingModelAlgorithm .ChildParameterSource .ModelParameter :
88+ name = value .parameterName ()
89+ element = self .modelParametersDialog .model .parameterDefinition (name )
90+ desc = element .description ()
91+ elif value .source () == QgsProcessingModelAlgorithm .ChildParameterSource .ChildOutput :
92+ name = "%s_%s" % (value .outputChildId (), value .outputName ())
93+ alg = self .modelParametersDialog .model .childAlgorithm (value .outputChildId ())
94+ out = alg .algorithm ().outputDefinition (value .outputName ())
95+ desc = self .tr ("Output '{0}' from algorithm '{1}'" ).format (out .description (), alg .description ())
9496 variables [name ] = desc
9597 values = self .modelParametersDialog .getAvailableValuesOfType ([QgsProcessingParameterFeatureSource , QgsProcessingParameterRasterLayer ],
9698 [QgsProcessingOutputVectorLayer , QgsProcessingOutputRasterLayer ])
9799 for value in values :
98- if isinstance (value , ValueFromInput ):
99- name = value .name
100- element = self .modelParametersDialog .model .inputs [name ].param
101- desc = element .description
102- else :
103- name = "%s_%s" % (value .alg , value .output )
104- alg = self .modelParametersDialog .model .algs [value .alg ]
105- element = alg .algorithm .outputDefinition (value .output )
106- desc = self .tr ("Output '{0}' from algorithm '{1}'" ).format (element .description (), alg .description )
100+ if isinstance (value , QgsProcessingModelAlgorithm .ChildParameterSource ):
101+ if value .source () == QgsProcessingModelAlgorithm .ChildParameterSource .ModelParameter :
102+ name = value .parameterName ()
103+ element = self .modelParametersDialog .model .parameterDefinition (name )
104+ desc = element .description ()
105+ elif value .source () == QgsProcessingModelAlgorithm .ChildParameterSource .ChildOutput :
106+ name = "%s_%s" % (value .outputChildId (), value .outputName ())
107+ alg = self .modelParametersDialog .model .childAlgorithm (value .outputChildId ())
108+ out = alg .algorithm ().outputDefinition (value .outputName ())
109+ desc = self .tr ("Output '{0}' from algorithm '{1}'" ).format (out .description (), alg .description ())
107110 variables ['%s_minx' % name ] = self .tr ("Minimum X of {0}" ).format (desc )
108111 variables ['%s_miny' % name ] = self .tr ("Minimum Y of {0}" ).format (desc )
109112 variables ['%s_maxx' % name ] = self .tr ("Maximum X of {0}" ).format (desc )
@@ -125,21 +128,41 @@ def showExpressionsBuilder(self):
125128 def getValue (self ):
126129 value = self .leText .text ()
127130 values = []
131+ #for param in self.modelParametersDialog.model.parameterDefinitions():
132+ # if isinstance(param, QgsProcessingParameterNumber):
133+ # if "@" + param.name() in value:
134+ # values.append(ValueFromInput(param.name()))
135+ #for alg in list(self.modelParametersDialog.model.algs.values()):
136+ # for out in alg.algorithm.outputDefinitions():
137+ # if isinstance(out, QgsProcessingOutputNumber) and "@%s_%s" % (alg.modeler_name, out.name) in value:
138+ # values.append(ValueFromOutput(alg.modeler_name, out.name()))
139+
128140 for param in self .modelParametersDialog .model .parameterDefinitions ():
129141 if isinstance (param , QgsProcessingParameterNumber ):
130- if "@" + param .name () in value :
131- values .append (ValueFromInput (param .name ()))
132- for alg in list (self .modelParametersDialog .model .algs .values ()):
133- for out in alg .algorithm .outputDefinitions ():
134- if isinstance (out , QgsProcessingOutputNumber ) and "@%s_%s" % (alg .modeler_name , out .name ) in value :
135- values .append (ValueFromOutput (alg .modeler_name , out .name ()))
142+ if "@" + param .name () == value :
143+ return QgsProcessingModelAlgorithm .ChildParameterSource .fromModelParameter (param .name ())
144+
145+ for alg in list (self .modelParametersDialog .model .childAlgorithms ().values ()):
146+ for out in alg .algorithm ().outputDefinitions ():
147+ if isinstance (out , QgsProcessingOutputNumber ) and "@%s_%s" % (alg .childId (), out .name ()) == value :
148+ return QgsProcessingModelAlgorithm .ChildParameterSource .fromChildOutput (alg .childId (), out .outputName ())
149+
136150 if values :
137151 return CompoundValue (values , value )
138152 else :
139153 return value
140154
141155 def setValue (self , value ):
142- self .leText .setText (str (value ))
156+ if isinstance (value , QgsProcessingModelAlgorithm .ChildParameterSource ):
157+ if value .source () == QgsProcessingModelAlgorithm .ChildParameterSource .ModelParameter :
158+ self .leText .setText ('@' + value .parameterName ())
159+ elif value .source () == QgsProcessingModelAlgorithm .ChildParameterSource .ChildOutput :
160+ name = "%s_%s" % (value .outputChildId (), value .outputName ())
161+ self .leText .setText (name )
162+ else :
163+ self .leText .setText (str (value .staticValue ()))
164+ else :
165+ self .leText .setText (str (value ))
143166
144167
145168class NumberInputPanel (NUMBER_BASE , NUMBER_WIDGET ):
0 commit comments