Skip to content

Commit 1e4d6a9

Browse files
committed
[processing] fixed issue in modeler with hidden params
1 parent 28659b6 commit 1e4d6a9

File tree

4 files changed

+112
-105
lines changed

4 files changed

+112
-105
lines changed

python/plugins/processing/modeler/ModelerAlgorithm.py

+81-75
Original file line numberDiff line numberDiff line change
@@ -176,40 +176,42 @@ def openModel(self, filename):
176176
# parsing this
177177
pass
178178
for param in alg.parameters:
179-
line = lines.readline().strip('\n').strip('\r')
180-
if line == str(None):
181-
algParams[param.name] = None
182-
else:
183-
tokens = line.split('|')
184-
algParams[param.name] = \
185-
AlgorithmAndParameter(int(tokens[0]),
186-
tokens[1])
179+
if not param.hidden:
180+
line = lines.readline().strip('\n').strip('\r')
181+
if line == str(None):
182+
algParams[param.name] = None
183+
else:
184+
tokens = line.split('|')
185+
algParams[param.name] = \
186+
AlgorithmAndParameter(int(tokens[0]),
187+
tokens[1])
187188
outputPos = {}
188189
for out in alg.outputs:
189-
line = lines.readline().strip('\n').strip('\r')
190-
if str(None) != line:
191-
if '|' in line:
192-
tokens = line.split('|')
193-
name = tokens[0]
194-
tokens = tokens[1].split(',')
195-
outputPos[out.name] = QtCore.QPointF(
196-
float(tokens[0]), float(tokens[1]))
190+
if not out.hidden:
191+
line = lines.readline().strip('\n').strip('\r')
192+
if str(None) != line:
193+
if '|' in line:
194+
tokens = line.split('|')
195+
name = tokens[0]
196+
tokens = tokens[1].split(',')
197+
outputPos[out.name] = QtCore.QPointF(
198+
float(tokens[0]), float(tokens[1]))
199+
else:
200+
name = line
201+
outputPos[out.name] = None
202+
algOutputs[out.name] = name
203+
204+
# We add the output to the algorithm,
205+
# with a name indicating where it comes
206+
# from that guarantees that the name is
207+
# unique
208+
output = copy.deepcopy(out)
209+
output.description = name
210+
output.name = self.getSafeNameForOutput(iAlg,
211+
output)
212+
self.addOutput(output)
197213
else:
198-
name = line
199-
outputPos[out.name] = None
200-
algOutputs[out.name] = name
201-
202-
# We add the output to the algorithm,
203-
# with a name indicating where it comes
204-
# from that guarantees that the name is
205-
# unique
206-
output = copy.deepcopy(out)
207-
output.description = name
208-
output.name = self.getSafeNameForOutput(iAlg,
209-
output)
210-
self.addOutput(output)
211-
else:
212-
algOutputs[out.name] = None
214+
algOutputs[out.name] = None
213215
self.outputPos.append(outputPos)
214216
self.algOutputs.append(algOutputs)
215217
self.algParameters.append(algParams)
@@ -467,18 +469,20 @@ def serialize(self):
467469
else:
468470
s += str(None) + '\n'
469471
for param in alg.parameters:
470-
value = self.algParameters[i][param.name]
471-
if value:
472-
s += value.serialize() + '\n'
473-
else:
474-
s += str(None) + '\n'
472+
if not param.hidden:
473+
value = self.algParameters[i][param.name]
474+
if value:
475+
s += value.serialize() + '\n'
476+
else:
477+
s += str(None) + '\n'
475478
for out in alg.outputs:
476-
value = self.algOutputs[i][out.name]
477-
s += unicode(value)
478-
if value is not None:
479-
pt = self.outputPos[i][out.name]
480-
s += '|' + str(pt.x()) + ',' + str(pt.y())
481-
s += '\n'
479+
if not out.hidden:
480+
value = self.algOutputs[i][out.name]
481+
s += unicode(value)
482+
if value is not None:
483+
pt = self.outputPos[i][out.name]
484+
s += '|' + str(pt.x()) + ',' + str(pt.y())
485+
s += '\n'
482486

483487
return s
484488

@@ -489,42 +493,44 @@ def setPositions(self, paramPos, algPos, outputPos):
489493

490494
def prepareAlgorithm(self, alg, iAlg):
491495
for param in alg.parameters:
492-
aap = self.algParameters[iAlg][param.name]
493-
if aap is None:
494-
if isinstance(param, ParameterExtent):
495-
value = self.getMinCoveringExtent()
496-
if not param.setValue(value):
497-
raise GeoAlgorithmExecutionException('Wrong value: '
498-
+ str(value))
496+
if not param.hidden:
497+
aap = self.algParameters[iAlg][param.name]
498+
if aap is None:
499+
if isinstance(param, ParameterExtent):
500+
value = self.getMinCoveringExtent()
501+
if not param.setValue(value):
502+
raise GeoAlgorithmExecutionException('Wrong value: '
503+
+ str(value))
504+
else:
505+
param.setValue(None)
506+
continue
507+
if isinstance(param, ParameterMultipleInput):
508+
value = self.getValueFromAlgorithmAndParameter(aap)
509+
tokens = value.split(';')
510+
layerslist = []
511+
for token in tokens:
512+
(i, paramname) = token.split('|')
513+
aap = AlgorithmAndParameter(int(i), paramname)
514+
value = self.getValueFromAlgorithmAndParameter(aap)
515+
layerslist.append(str(value))
516+
value = ';'.join(layerslist)
499517
else:
500-
param.setValue(None)
501-
continue
502-
if isinstance(param, ParameterMultipleInput):
503-
value = self.getValueFromAlgorithmAndParameter(aap)
504-
tokens = value.split(';')
505-
layerslist = []
506-
for token in tokens:
507-
(i, paramname) = token.split('|')
508-
aap = AlgorithmAndParameter(int(i), paramname)
509518
value = self.getValueFromAlgorithmAndParameter(aap)
510-
layerslist.append(str(value))
511-
value = ';'.join(layerslist)
512-
else:
513-
value = self.getValueFromAlgorithmAndParameter(aap)
514-
515-
# We allow unexistent filepaths, since that allows
516-
# algorithms to skip some conversion routines
517-
if not param.setValue(value) and not isinstance(param,
518-
ParameterDataObject):
519-
raise GeoAlgorithmExecutionException('Wrong value: '
520-
+ str(value))
519+
520+
# We allow unexistent filepaths, since that allows
521+
# algorithms to skip some conversion routines
522+
if not param.setValue(value) and not isinstance(param,
523+
ParameterDataObject):
524+
raise GeoAlgorithmExecutionException('Wrong value: '
525+
+ str(value))
521526
for out in alg.outputs:
522-
val = self.algOutputs[iAlg][out.name]
523-
if val:
524-
name = self.getSafeNameForOutput(iAlg, out)
525-
out.value = self.getOutputFromName(name).value
526-
else:
527-
out.value = None
527+
if not out.hidden:
528+
val = self.algOutputs[iAlg][out.name]
529+
if val:
530+
name = self.getSafeNameForOutput(iAlg, out)
531+
out.value = self.getOutputFromName(name).value
532+
else:
533+
out.value = None
528534

529535
def getMinCoveringExtent(self):
530536
first = True

python/plugins/processing/modeler/ModelerDialog.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
import pickle
3030
from PyQt4.QtCore import *
3131
from PyQt4.QtGui import *
32+
3233
from processing.core.ProcessingConfig import ProcessingConfig
3334
from processing.core.GeoAlgorithm import GeoAlgorithm
3435
from processing.gui.HelpEditionDialog import HelpEditionDialog
3536
from processing.gui.ParametersDialog import ParametersDialog
3637
from processing.gui.AlgorithmClassification import AlgorithmDecorator
37-
from processing.modeler.ModelerParameterDefinitionDialog import \
38-
ModelerParameterDefinitionDialog
38+
from processing.modeler.ModelerParameterDefinitionDialog import ModelerParameterDefinitionDialog
3939
from processing.modeler.ModelerAlgorithm import ModelerAlgorithm
4040
from processing.modeler.ModelerParametersDialog import ModelerParametersDialog
4141
from processing.modeler.ModelerUtils import ModelerUtils
@@ -54,7 +54,6 @@ class ModelerDialog(QDialog, Ui_DlgModeler):
5454
def __init__(self, alg=None):
5555
QDialog.__init__(self)
5656

57-
self.hasChanged = False
5857
self.setupUi(self)
5958

6059
self.setWindowFlags(Qt.WindowMinimizeButtonHint |
@@ -162,15 +161,18 @@ def _mimeDataAlgorithm(items):
162161
self.textGroup.setText(alg.group)
163162
self.textName.setText(alg.name)
164163
self.repaintModel()
164+
165165
else:
166-
self.alg = ModelerAlgorithm()
166+
self.alg = ModelerAlgorithm()
167167

168168
self.view.centerOn(0, 0)
169169
self.alg.setModelerView(self)
170170
self.help = None
171171
# Indicates whether to update or not the toolbox after
172172
# closing this dialog
173173
self.update = False
174+
175+
self.hasChanged = False
174176

175177
def changeModel(self):
176178
self.hasChanged = True

python/plugins/processing/modeler/ModelerGraphicItem.py

+16-15
Original file line numberDiff line numberDiff line change
@@ -251,27 +251,29 @@ def paint(self, painter, option, widget=None):
251251
i = 1
252252
if not self.inputFolded:
253253
for param in self.element.parameters:
254-
text = self.getAdjustedText(param.description)
255-
h = -(fm.height() * 1.2) * (i + 1)
256-
h = h - ModelerGraphicItem.BOX_HEIGHT / 2.0 + 5
257-
pt = QtCore.QPointF(-ModelerGraphicItem.BOX_WIDTH / 2
258-
+ 33, h)
259-
painter.drawText(pt, text)
260-
i += 1
254+
if not param.hidden:
255+
text = self.getAdjustedText(param.description)
256+
h = -(fm.height() * 1.2) * (i + 1)
257+
h = h - ModelerGraphicItem.BOX_HEIGHT / 2.0 + 5
258+
pt = QtCore.QPointF(-ModelerGraphicItem.BOX_WIDTH / 2
259+
+ 33, h)
260+
painter.drawText(pt, text)
261+
i += 1
261262
i = 1
262263
h = fm.height() * 1.2
263264
h = h + ModelerGraphicItem.BOX_HEIGHT / 2.0
264265
pt = QtCore.QPointF(-ModelerGraphicItem.BOX_WIDTH / 2 + 25, h)
265266
painter.drawText(pt, 'Out')
266267
if not self.outputFolded:
267268
for out in self.element.outputs:
268-
text = self.getAdjustedText(out.description)
269-
h = fm.height() * 1.2 * (i + 1)
270-
h = h + ModelerGraphicItem.BOX_HEIGHT / 2.0
271-
pt = QtCore.QPointF(-ModelerGraphicItem.BOX_WIDTH / 2
272-
+ 33, h)
273-
painter.drawText(pt, text)
274-
i += 1
269+
if not out.hidden:
270+
text = self.getAdjustedText(out.description)
271+
h = fm.height() * 1.2 * (i + 1)
272+
h = h + ModelerGraphicItem.BOX_HEIGHT / 2.0
273+
pt = QtCore.QPointF(-ModelerGraphicItem.BOX_WIDTH / 2
274+
+ 33, h)
275+
painter.drawText(pt, text)
276+
i += 1
275277
if self.pixmap:
276278
painter.drawPixmap(-(ModelerGraphicItem.BOX_WIDTH / 2.0) + 3, -8,
277279
self.pixmap)
@@ -295,7 +297,6 @@ def getXPositionForFoldButton(self):
295297

296298
def getLinkPointForOutput(self, outputIndex):
297299
if isinstance(self.element, GeoAlgorithm):
298-
numParams = 0
299300
outputIndex = (outputIndex if not self.outputFolded else -1)
300301
text = self.getAdjustedText(
301302
self.element.outputs[outputIndex].description)

python/plugins/processing/modeler/ModelerScene.py

+9-11
Original file line numberDiff line numberDiff line change
@@ -138,17 +138,15 @@ def paintModel(self, model):
138138
params = model.algParameters[iAlg]
139139
idx = 0
140140
for parameter in alg.parameters:
141-
param = params[parameter.name]
142-
if param:
143-
sourceItems = self.getItemsFromAAP(param,
144-
isinstance(
145-
alg.getParameterFromName(parameter.name),
146-
ParameterMultipleInput))
147-
for sourceItem in sourceItems:
148-
arrow = ModelerArrowItem(sourceItem[0], sourceItem[1],
149-
self.algItems[iAlg], idx)
150-
self.addItem(arrow)
151-
idx += 1
141+
if not parameter.hidden:
142+
param = params[parameter.name]
143+
if param:
144+
sourceItems = self.getItemsFromAAP(param,
145+
isinstance(alg.getParameterFromName(parameter.name), ParameterMultipleInput))
146+
for sourceItem in sourceItems:
147+
arrow = ModelerArrowItem(sourceItem[0], sourceItem[1], self.algItems[iAlg], idx)
148+
self.addItem(arrow)
149+
idx += 1
152150
for depend in model.dependencies[iAlg]:
153151
arrow = ModelerArrowItem(self.algItems[depend], -1,
154152
self.algItems[iAlg], -1)

0 commit comments

Comments
 (0)