Skip to content

Commit 11d3582

Browse files
committedJun 26, 2017
Fix setting number inputs to algorithms in modeler
1 parent 53e9538 commit 11d3582

File tree

2 files changed

+48
-28
lines changed

2 files changed

+48
-28
lines changed
 

‎python/plugins/processing/gui/NumberInputPanel.py

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
QgsProcessingOutputVectorLayer,
4040
QgsProcessingOutputRasterLayer,
4141
QgsProcessingParameterFeatureSource,
42+
QgsProcessingModelAlgorithm,
4243
QgsProcessingParameterRasterLayer)
4344
from qgis.gui import QgsExpressionBuilderDialog
4445
from 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

145168
class NumberInputPanel(NUMBER_BASE, NUMBER_WIDGET):

‎python/plugins/processing/modeler/ModelerParametersDialog.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,6 @@ def createAlgorithm(self):
318318
if (isinstance(val,
319319
QgsProcessingModelAlgorithm.ChildParameterSource) and val.source() == QgsProcessingModelAlgorithm.ChildParameterSource.StaticValue and not param.checkValueIsAcceptable(
320320
val.staticValue())) \
321-
or (not isinstance(val,
322-
QgsProcessingModelAlgorithm.ChildParameterSource) and not param.checkValueIsAcceptable(
323-
val))\
324321
or (val is None and not param.flags() & QgsProcessingParameterDefinition.FlagOptional):
325322
self.bar.pushMessage("Error", "Wrong or missing value for parameter '%s'" % param.description(),
326323
level=QgsMessageBar.WARNING)

0 commit comments

Comments
 (0)
Please sign in to comment.