Skip to content

Commit b5d83c0

Browse files
author
volayaf
committed
Modeler can now have hard-coded layer paths
Added "hidden" property to parameters git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@317 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent e931725 commit b5d83c0

File tree

8 files changed

+73
-82
lines changed

8 files changed

+73
-82
lines changed

src/sextante/core/GeoAlgorithm.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,14 @@ def getVisibleOutputsCount(self):
196196
i+=1
197197
return i;
198198

199+
def getVisibleParametersCount(self):
200+
'''returns the number of non-hidden parameters'''
201+
i = 0;
202+
for param in self.parameters:
203+
if not param.hidden:
204+
i+=1
205+
return i;
206+
199207
def getOutputValuesAsDictionary(self):
200208
d = {}
201209
for out in self.outputs:

src/sextante/core/Sextante.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def updateProviders():
124124

125125
@staticmethod
126126
def addAlgListListener(listener):
127-
'''listener should implement a algsListHasChanged() method. whenever the list of algorithms changed,
127+
'''listener should implement a algsListHasChanged() method. Whenever the list of algorithms changes,
128128
that method will be called for all registered listeners'''
129129
Sextante.listeners.append(listener)
130130

@@ -254,9 +254,9 @@ def runAlgorithm(algOrName, onFinish, *args):
254254
if alg == None:
255255
print("Error: Algorithm not found\n")
256256
return
257-
if len(args) != len(alg.parameters) + alg.getVisibleOutputsCount():
257+
if len(args) != alg.getVisibleParametersCount() + alg.getVisibleOutputsCount():
258258
print ("Error: Wrong number of parameters")
259-
Sextante.alghelp(name)
259+
Sextante.alghelp(algOrName)
260260
return
261261

262262
alg = alg.getCopy()#copy.deepcopy(alg)
@@ -272,10 +272,11 @@ def runAlgorithm(algOrName, onFinish, *args):
272272
else:
273273
i = 0
274274
for param in alg.parameters:
275-
if not param.setValue(args[i]):
276-
print ("Error: Wrong parameter value: " + args[i])
277-
return
278-
i = i +1
275+
if not param.hidden:
276+
if not param.setValue(args[i]):
277+
print ("Error: Wrong parameter value: " + args[i])
278+
return
279+
i = i +1
279280

280281
for output in alg.outputs:
281282
if not output.hidden:

src/sextante/gui/AlgorithmExecutionDialog.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ def setParamValues(self):
103103
outputs = self.alg.outputs
104104

105105
for param in params:
106+
if param.hidden:
107+
continue
106108
if not self.setParamValue(param, self.paramTable.valueItems[param.name]):
107109
return False
108110

src/sextante/gui/ParametersDialog.py

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,9 @@
11
#!/usr/bin/env python
22
# -*- coding: latin-1 -*-
3-
from PyQt4.QtCore import *
4-
from PyQt4.QtGui import *
5-
from PyQt4 import QtCore, QtGui, QtWebKit
6-
from sextante.core.QGisLayers import QGisLayers
7-
from sextante.gui.SextantePostprocessing import SextantePostprocessing
3+
from sextante.gui.ParametersPanel import ParametersPanel
84
from sextante.gui.AlgorithmExecutionDialog import AlgorithmExecutionDialog
9-
from sextante.parameters.ParameterRaster import ParameterRaster
10-
from sextante.parameters.ParameterVector import ParameterVector
11-
from sextante.parameters.ParameterBoolean import ParameterBoolean
12-
from sextante.parameters.ParameterSelection import ParameterSelection
13-
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
14-
from sextante.parameters.ParameterFixedTable import ParameterFixedTable
15-
from sextante.parameters.ParameterTableField import ParameterTableField
16-
from sextante.parameters.ParameterTable import ParameterTable
17-
from sextante.gui.AlgorithmExecutor import AlgorithmExecutor
18-
from sextante.core.SextanteLog import SextanteLog
19-
#~ from sextante.gui.SextantePostprocessing import SextantePostprocessing
20-
from sextante.parameters.ParameterRange import ParameterRange
21-
from sextante.parameters.ParameterNumber import ParameterNumber
5+
from PyQt4 import QtCore
226

23-
from sextante.gui.ParametersPanel import ParametersPanel
24-
from sextante.parameters.ParameterFile import ParameterFile
25-
from sextante.parameters.ParameterCrs import ParameterCrs
26-
from sextante.core.SextanteConfig import SextanteConfig
27-
from sextante.parameters.ParameterExtent import ParameterExtent
28-
from sextante.outputs.OutputHTML import OutputHTML
29-
from sextante.outputs.OutputRaster import OutputRaster
30-
from sextante.outputs.OutputVector import OutputVector
31-
from sextante.outputs.OutputTable import OutputTable
32-
from sextante.core.WrongHelpFileException import WrongHelpFileException
33-
import os
34-
from sextante.gui.UnthreadedAlgorithmExecutor import UnthreadedAlgorithmExecutor
357

368
try:
379
_fromUtf8 = QtCore.QString.fromUtf8
@@ -43,6 +15,6 @@ class ParametersDialog(AlgorithmExecutionDialog):
4315
NOT_SELECTED = "[Not selected]"
4416
'''the default parameters dialog, to be used when an algorithm is called from the toolbox'''
4517
def __init__(self, alg):
46-
self.paramTable = ParametersPanel(self, alg)
18+
self.paramTable = ParametersPanel(self, alg)
4719
AlgorithmExecutionDialog.__init__(self, alg, self.paramTable)
4820
self.executed = False

src/sextante/gui/ParametersPanel.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ def initGUI(self):
8080
self.verticalLayout.addWidget(self.advancedButton)
8181
break
8282
for param in self.alg.parameters:
83+
if param.hidden:
84+
continue
8385
desc = param.description
8486
if isinstance(param, ParameterExtent):
8587
desc += "(xmin, xmax, ymin, ymax)"
@@ -296,7 +298,10 @@ def somethingDependsOnThisParameter(self, parent):
296298
def setTableContent(self):
297299
params = self.alg.parameters
298300
outputs = self.alg.outputs
299-
numParams = len(self.alg.parameters)
301+
numParams = 0
302+
for param in params:
303+
if not param.hidden:
304+
numParams += 1
300305
numOutputs = 0
301306
for output in outputs:
302307
if not output.hidden:
@@ -305,6 +310,8 @@ def setTableContent(self):
305310

306311
i=0
307312
for param in params:
313+
if param.hidden:
314+
continue
308315
item = QtGui.QTableWidgetItem(param.description)
309316
item.setFlags(QtCore.Qt.ItemIsEnabled)
310317
self.tableWidget.setItem(i,0, item)

src/sextante/modeler/ModelerDialog.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -268,21 +268,21 @@ def addInput(self):
268268

269269

270270
def fillInputsTree(self):
271-
inputsItem = QtGui.QTreeWidgetItem()
272-
inputsItem.setText(0, "Inputs")
271+
parametersItem = QtGui.QTreeWidgetItem()
272+
parametersItem.setText(0, "Parameters")
273273
for paramType in ModelerParameterDefinitionDialog.paramTypes:
274-
inputItem = QtGui.QTreeWidgetItem()
275-
inputItem.setText(0, paramType)
276-
inputsItem.addChild(inputItem)
277-
self.inputsTree.addTopLevelItem(inputsItem)
278-
inputsItem.setExpanded(True)
274+
paramItem = QtGui.QTreeWidgetItem()
275+
paramItem.setText(0, paramType)
276+
parametersItem.addChild(paramItem)
277+
self.inputsTree.addTopLevelItem(parametersItem)
278+
parametersItem.setExpanded(True)
279279

280280

281281
def addAlgorithm(self):
282282
item = self.algorithmTree.currentItem()
283283
if isinstance(item, TreeAlgorithmItem):
284284
alg = ModelerUtils.getAlgorithm(item.alg.commandLineName())
285-
alg = alg.getCopy()#copy.deepcopy(alg)
285+
alg = alg.getCopy()
286286
dlg = alg.getCustomModelerParametersDialog(self.alg)
287287
if not dlg:
288288
dlg = ModelerParametersDialog(alg, self.alg)

src/sextante/modeler/ModelerParametersDialog.py

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -230,20 +230,23 @@ def getTableFields(self):
230230
def getWidgetFromParameter(self, param):
231231
if isinstance(param, ParameterRaster):
232232
item = QtGui.QComboBox()
233+
item.setEditable(True)
233234
layers = self.getRasterLayers()
234235
if (param.optional):
235236
item.addItem(self.NOT_SELECTED, None)
236237
for layer in layers:
237238
item.addItem(layer.name(), layer)
238239
elif isinstance(param, ParameterVector):
239240
item = QtGui.QComboBox()
241+
item.setEditable(True)
240242
layers = self.getVectorLayers()
241243
if (param.optional):
242244
item.addItem(self.NOT_SELECTED, None)
243245
for layer in layers:
244246
item.addItem(layer.name(), layer)
245247
elif isinstance(param, ParameterTable):
246248
item = QtGui.QComboBox()
249+
item.setEditable(True)
247250
layers = self.getTables()
248251
if (param.optional):
249252
item.addItem(self.NOT_SELECTED, None)
@@ -310,7 +313,10 @@ def getWidgetFromParameter(self, param):
310313
def setTableContent(self):
311314
params = self.alg.parameters
312315
outputs = self.alg.outputs
313-
numParams = len(self.alg.parameters)
316+
numParams = 0
317+
for param in params:
318+
if not param.hidden:
319+
numParams += 1
314320
numOutputs = 0
315321
for output in outputs:
316322
if not output.hidden:
@@ -319,14 +325,15 @@ def setTableContent(self):
319325

320326
i=0
321327
for param in params:
322-
item = QtGui.QTableWidgetItem(param.description)
323-
item.setFlags(QtCore.Qt.ItemIsEnabled)
324-
self.tableWidget.setItem(i,0, item)
325-
item = self.getWidgetFromParameter(param)
326-
self.valueItems[param.name] = item
327-
self.tableWidget.setCellWidget(i,1, item)
328-
self.tableWidget.setRowHeight(i,22)
329-
i+=1
328+
if not param.hidden:
329+
item = QtGui.QTableWidgetItem(param.description)
330+
item.setFlags(QtCore.Qt.ItemIsEnabled)
331+
self.tableWidget.setItem(i,0, item)
332+
item = self.getWidgetFromParameter(param)
333+
self.valueItems[param.name] = item
334+
self.tableWidget.setCellWidget(i,1, item)
335+
self.tableWidget.setRowHeight(i,22)
336+
i+=1
330337

331338
for output in outputs:
332339
if not output.hidden:
@@ -400,6 +407,8 @@ def setParamValues(self):
400407
params = self.alg.parameters
401408
outputs = self.alg.outputs
402409
for param in params:
410+
if param.hidden:
411+
continue
403412
if not self.setParamValue(param, self.valueItems[param.name]):
404413
return False
405414
for output in outputs:
@@ -413,21 +422,21 @@ def setParamValues(self):
413422
return True
414423

415424

416-
def setParamRasterValue(self, param, widget):
417-
if widget.currentIndex() < 0:
418-
return False
419-
value = widget.itemData(widget.currentIndex()).toPyObject()
420-
self.params[param.name] = value
425+
def setParamValueLayerOrTable(self, param, widget):
426+
idx = widget.findText(widget.currentText())
427+
if idx < 0:
428+
name = self.getSafeNameForHarcodedParameter(param)
429+
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
430+
self.params[param.name] = value
431+
s = str(widget.currentText())
432+
self.values[name] = s
433+
else:
434+
value = widget.itemData(widget.currentIndex()).toPyObject()
435+
self.params[param.name] = value
421436
return True
422437

423-
def setParamVectorValue(self, param, widget):
424-
if widget.currentIndex() < 0:
425-
return False
426-
value = widget.itemData(widget.currentIndex()).toPyObject()
427-
self.params[param.name] = value
428-
return True
429438

430-
def setParamTableValue(self, param, widget):
439+
431440
if widget.currentIndex() < 0:
432441
return False
433442
value = widget.itemData(widget.currentIndex()).toPyObject()
@@ -505,12 +514,8 @@ def setParamNumberValue(self, param, widget):
505514
return True
506515

507516
def setParamValue(self, param, widget):
508-
if isinstance(param, ParameterRaster):
509-
return self.setParamRasterValue(param, widget)
510-
elif isinstance(param, ParameterVector):
511-
return self.setParamVectorValue(param, widget)
512-
elif isinstance(param, ParameterTable):
513-
return self.setParamTableValue(param, widget)
517+
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable)):
518+
return self.setParamValueLayerOrTable(param, widget)
514519
elif isinstance(param, ParameterBoolean):
515520
return self.setParamBooleanValue(param, widget)
516521
elif isinstance(param, ParameterString):
@@ -539,13 +544,6 @@ def setParamValue(self, param, widget):
539544
return True
540545
if isinstance(param, ParameterTableField):
541546
return self.setParamTableFieldValue(param, widget)
542-
#===================================================================
543-
# name = self.getSafeNameForHarcodedParameter(param)
544-
# value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
545-
# self.params[param.name] = value
546-
# self.values[name] = str(widget.text())
547-
# return True
548-
#===================================================================
549547
elif isinstance(param, ParameterMultipleInput):
550548
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
551549
options = self.getVectorLayers()

src/sextante/parameters/Parameter.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ def __init__(self, name="", description=""):
66
self.description = description
77
self.value = None
88

9-
#this is not used yet
109
self.isAdvanced = False
1110

11+
#a hidden parameter can be used to set a hard-coded value.
12+
#It can be used as any other parameter, but it will not be shown to the user
13+
self.hidden = False
14+
1215

1316
def setValue(self, obj):
1417
'''sets the value of the parameter.

0 commit comments

Comments
 (0)