39
39
QgsProcessingOutputVectorLayer ,
40
40
QgsProcessingOutputRasterLayer ,
41
41
QgsProcessingParameterFeatureSource ,
42
+ QgsProcessingModelAlgorithm ,
42
43
QgsProcessingParameterRasterLayer )
43
44
from qgis .gui import QgsExpressionBuilderDialog
44
45
from processing .modeler .ModelerAlgorithm import ValueFromInput , ValueFromOutput , CompoundValue
@@ -82,28 +83,30 @@ def showExpressionsBuilder(self):
82
83
values = self .modelParametersDialog .getAvailableValuesOfType (QgsProcessingParameterNumber , QgsProcessingOutputNumber )
83
84
variables = {}
84
85
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 ())
94
96
variables [name ] = desc
95
97
values = self .modelParametersDialog .getAvailableValuesOfType ([QgsProcessingParameterFeatureSource , QgsProcessingParameterRasterLayer ],
96
98
[QgsProcessingOutputVectorLayer , QgsProcessingOutputRasterLayer ])
97
99
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 ())
107
110
variables ['%s_minx' % name ] = self .tr ("Minimum X of {0}" ).format (desc )
108
111
variables ['%s_miny' % name ] = self .tr ("Minimum Y of {0}" ).format (desc )
109
112
variables ['%s_maxx' % name ] = self .tr ("Maximum X of {0}" ).format (desc )
@@ -125,21 +128,41 @@ def showExpressionsBuilder(self):
125
128
def getValue (self ):
126
129
value = self .leText .text ()
127
130
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
+
128
140
for param in self .modelParametersDialog .model .parameterDefinitions ():
129
141
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
+
136
150
if values :
137
151
return CompoundValue (values , value )
138
152
else :
139
153
return value
140
154
141
155
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 ))
143
166
144
167
145
168
class NumberInputPanel (NUMBER_BASE , NUMBER_WIDGET ):
0 commit comments