2012-10-04 19:33:47 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
"""
|
|
|
|
***************************************************************************
|
|
|
|
ModelerParametersDialog.py
|
|
|
|
---------------------
|
|
|
|
Date : August 2012
|
|
|
|
Copyright : (C) 2012 by Victor Olaya
|
|
|
|
Email : volayaf at gmail dot com
|
|
|
|
***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************
|
|
|
|
"""
|
2013-02-23 16:18:22 +01:00
|
|
|
|
2012-10-04 19:33:47 +02:00
|
|
|
__author__ = 'Victor Olaya'
|
|
|
|
__date__ = 'August 2012'
|
|
|
|
__copyright__ = '(C) 2012, Victor Olaya'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
|
|
__revision__ = '$Format:%H$'
|
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
from PyQt4.QtCore import *
|
|
|
|
from PyQt4.QtGui import *
|
|
|
|
from PyQt4 import QtCore, QtGui, QtWebKit
|
2013-02-23 16:18:22 +01:00
|
|
|
from sextante.modeler.MultilineTextPanel import MultilineTextPanel
|
|
|
|
from sextante.gui.CrsSelectionPanel import CrsSelectionPanel
|
2012-12-20 00:16:05 +01:00
|
|
|
from sextante.parameters.ParameterCrs import ParameterCrs
|
|
|
|
from sextante.outputs.OutputString import OutputString
|
2012-09-15 18:25:25 +03:00
|
|
|
from sextante.parameters.ParameterRaster import ParameterRaster
|
|
|
|
from sextante.parameters.ParameterVector import ParameterVector
|
|
|
|
from sextante.parameters.ParameterBoolean import ParameterBoolean
|
|
|
|
from sextante.parameters.ParameterSelection import ParameterSelection
|
|
|
|
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
|
|
|
|
from sextante.gui.MultipleInputPanel import MultipleInputPanel
|
|
|
|
from sextante.parameters.ParameterFixedTable import ParameterFixedTable
|
|
|
|
from sextante.gui.FixedTablePanel import FixedTablePanel
|
|
|
|
from sextante.parameters.ParameterNumber import ParameterNumber
|
|
|
|
from sextante.parameters.ParameterTableField import ParameterTableField
|
|
|
|
from sextante.parameters.ParameterTable import ParameterTable
|
|
|
|
from sextante.parameters.ParameterString import ParameterString
|
|
|
|
from sextante.outputs.OutputRaster import OutputRaster
|
|
|
|
from sextante.outputs.OutputVector import OutputVector
|
|
|
|
from sextante.outputs.OutputTable import OutputTable
|
|
|
|
from sextante.modeler.ModelerAlgorithm import AlgorithmAndParameter
|
|
|
|
from sextante.parameters.ParameterRange import ParameterRange
|
|
|
|
from sextante.gui.RangePanel import RangePanel
|
|
|
|
from sextante.outputs.OutputNumber import OutputNumber
|
2012-10-12 19:14:39 +02:00
|
|
|
from sextante.outputs.OutputHTML import OutputHTML
|
2012-09-15 18:25:25 +03:00
|
|
|
from sextante.parameters.ParameterFile import ParameterFile
|
|
|
|
from sextante.outputs.OutputFile import OutputFile
|
|
|
|
from sextante.core.WrongHelpFileException import WrongHelpFileException
|
|
|
|
from sextante.parameters.ParameterExtent import ParameterExtent
|
|
|
|
|
|
|
|
class ModelerParametersDialog(QtGui.QDialog):
|
|
|
|
|
|
|
|
ENTER_NAME = "[Enter name if this is a final result]"
|
|
|
|
NOT_SELECTED = "[Not selected]"
|
2012-12-20 00:16:05 +01:00
|
|
|
USE_MIN_COVERING_EXTENT = "[Use min covering extent]"
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
def __init__(self, alg, model, algIndex = None):
|
|
|
|
QtGui.QDialog.__init__(self)
|
|
|
|
self.setModal(True)
|
|
|
|
self.alg = alg
|
|
|
|
self.model = model
|
|
|
|
self.algIndex = algIndex
|
|
|
|
self.setupUi()
|
|
|
|
self.params = None
|
|
|
|
|
|
|
|
|
|
|
|
def setupUi(self):
|
2012-10-12 19:14:39 +02:00
|
|
|
self.labels = {}
|
|
|
|
self.widgets = {}
|
|
|
|
self.checkBoxes = {}
|
|
|
|
self.showAdvanced = False
|
2012-09-15 18:25:25 +03:00
|
|
|
self.valueItems = {}
|
|
|
|
self.dependentItems = {}
|
|
|
|
self.resize(650, 450)
|
|
|
|
self.buttonBox = QtGui.QDialogButtonBox()
|
|
|
|
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
|
|
|
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
|
2012-10-12 19:14:39 +02:00
|
|
|
tooltips = self.alg.getParameterDescriptions()
|
|
|
|
self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
|
|
|
self.verticalLayout = QtGui.QVBoxLayout()
|
|
|
|
self.verticalLayout.setSpacing(5)
|
|
|
|
self.verticalLayout.setMargin(20)
|
|
|
|
for param in self.alg.parameters:
|
|
|
|
if param.isAdvanced:
|
|
|
|
self.advancedButton = QtGui.QPushButton()
|
|
|
|
self.advancedButton.setText("Show advanced parameters")
|
|
|
|
self.advancedButton.setMaximumWidth(150)
|
|
|
|
QtCore.QObject.connect(self.advancedButton, QtCore.SIGNAL("clicked()"), self.showAdvancedParametersClicked)
|
|
|
|
self.verticalLayout.addWidget(self.advancedButton)
|
|
|
|
break
|
|
|
|
for param in self.alg.parameters:
|
|
|
|
if param.hidden:
|
|
|
|
continue
|
|
|
|
desc = param.description
|
|
|
|
if isinstance(param, ParameterExtent):
|
|
|
|
desc += "(xmin, xmax, ymin, ymax)"
|
|
|
|
label = QtGui.QLabel(desc)
|
|
|
|
self.labels[param.name] = label
|
|
|
|
widget = self.getWidgetFromParameter(param)
|
|
|
|
self.valueItems[param.name] = widget
|
|
|
|
if param.name in tooltips.keys():
|
|
|
|
tooltip = tooltips[param.name]
|
|
|
|
else:
|
|
|
|
tooltip = param.description
|
|
|
|
label.setToolTip(tooltip)
|
|
|
|
widget.setToolTip(tooltip)
|
|
|
|
if param.isAdvanced:
|
|
|
|
label.setVisible(self.showAdvanced)
|
|
|
|
widget.setVisible(self.showAdvanced)
|
|
|
|
self.widgets[param.name] = widget
|
|
|
|
self.verticalLayout.addWidget(label)
|
|
|
|
self.verticalLayout.addWidget(widget)
|
|
|
|
|
|
|
|
for output in self.alg.outputs:
|
|
|
|
if output.hidden:
|
|
|
|
continue
|
2012-10-17 22:03:40 +02:00
|
|
|
if isinstance(output, (OutputRaster, OutputVector, OutputTable, OutputHTML, OutputFile)):
|
2012-10-12 19:14:39 +02:00
|
|
|
label = QtGui.QLabel(output.description + "<" + output.__module__.split(".")[-1] + ">")
|
|
|
|
item = QLineEdit()
|
|
|
|
if hasattr(item, 'setPlaceholderText'):
|
|
|
|
item.setPlaceholderText(ModelerParametersDialog.ENTER_NAME)
|
|
|
|
self.verticalLayout.addWidget(label)
|
|
|
|
self.verticalLayout.addWidget(item)
|
|
|
|
self.valueItems[output.name] = item
|
2013-02-07 01:09:39 +01:00
|
|
|
|
2013-02-03 10:26:43 +01:00
|
|
|
label = QtGui.QLabel(" ")
|
|
|
|
self.verticalLayout.addWidget(label)
|
|
|
|
label = QtGui.QLabel("Parent algorithms")
|
2013-02-07 01:09:39 +01:00
|
|
|
self.dependenciesPanel = self.getDependenciesPanel()
|
2013-02-03 10:26:43 +01:00
|
|
|
self.verticalLayout.addWidget(label)
|
|
|
|
self.verticalLayout.addWidget(self.dependenciesPanel)
|
2013-02-07 01:09:39 +01:00
|
|
|
|
2012-10-12 19:14:39 +02:00
|
|
|
self.verticalLayout.addStretch(1000)
|
|
|
|
self.setLayout(self.verticalLayout)
|
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
self.setPreviousValues()
|
|
|
|
self.setWindowTitle(self.alg.name)
|
2012-10-12 19:14:39 +02:00
|
|
|
self.verticalLayout2 = QtGui.QVBoxLayout()
|
|
|
|
self.verticalLayout2.setSpacing(2)
|
|
|
|
self.verticalLayout2.setMargin(0)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.tabWidget = QtGui.QTabWidget()
|
2012-12-10 00:12:07 +01:00
|
|
|
self.tabWidget.setMinimumWidth(300)
|
2012-10-12 19:14:39 +02:00
|
|
|
self.paramPanel = QtGui.QWidget()
|
|
|
|
self.paramPanel.setLayout(self.verticalLayout)
|
2012-12-10 00:12:07 +01:00
|
|
|
self.scrollArea = QtGui.QScrollArea()
|
2012-10-16 00:01:13 +02:00
|
|
|
self.scrollArea.setWidget(self.paramPanel)
|
|
|
|
self.scrollArea.setWidgetResizable(True)
|
|
|
|
self.tabWidget.addTab(self.scrollArea, "Parameters")
|
2012-09-15 18:25:25 +03:00
|
|
|
self.webView = QtWebKit.QWebView()
|
|
|
|
html = None
|
|
|
|
try:
|
|
|
|
if self.alg.helpFile():
|
|
|
|
helpFile = self.alg.helpFile()
|
|
|
|
else:
|
|
|
|
html = "<h2>Sorry, no help is available for this algorithm.</h2>"
|
|
|
|
except WrongHelpFileException, e:
|
|
|
|
html = e.msg
|
|
|
|
self.webView.setHtml("<h2>Could not open help file :-( </h2>")
|
|
|
|
try:
|
|
|
|
if html:
|
|
|
|
self.webView.setHtml(html)
|
|
|
|
else:
|
|
|
|
url = QtCore.QUrl(helpFile)
|
|
|
|
self.webView.load(url)
|
|
|
|
except:
|
|
|
|
self.webView.setHtml("<h2>Could not open help file :-( </h2>")
|
|
|
|
self.tabWidget.addTab(self.webView, "Help")
|
2012-10-12 19:14:39 +02:00
|
|
|
self.verticalLayout2.addWidget(self.tabWidget)
|
|
|
|
self.verticalLayout2.addWidget(self.buttonBox)
|
|
|
|
self.setLayout(self.verticalLayout2)
|
2012-09-15 18:25:25 +03:00
|
|
|
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), self.okPressed)
|
|
|
|
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), self.cancelPressed)
|
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
2013-02-03 10:26:43 +01:00
|
|
|
|
2013-02-07 01:09:39 +01:00
|
|
|
def getAvailableDependencies(self):
|
2013-02-03 10:26:43 +01:00
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
2013-02-07 01:09:39 +01:00
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
|
|
|
opts = []
|
2013-02-03 10:26:43 +01:00
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
opts.append(str(i+1) + ":" + alg.name)
|
|
|
|
i+=1
|
|
|
|
return opts
|
|
|
|
|
|
|
|
def getDependenciesPanel(self):
|
|
|
|
return MultipleInputPanel(self.getAvailableDependencies())
|
2013-02-07 01:09:39 +01:00
|
|
|
|
|
|
|
|
2012-10-17 22:03:40 +02:00
|
|
|
def showAdvancedParametersClicked(self):
|
|
|
|
self.showAdvanced = not self.showAdvanced
|
|
|
|
if self.showAdvanced:
|
|
|
|
self.advancedButton.setText("Hide advanced parameters")
|
|
|
|
else:
|
|
|
|
self.advancedButton.setText("Show advanced parameters")
|
|
|
|
for param in self.alg.parameters:
|
|
|
|
if param.isAdvanced:
|
|
|
|
self.labels[param.name].setVisible(self.showAdvanced)
|
|
|
|
self.widgets[param.name].setVisible(self.showAdvanced)
|
2012-12-10 00:12:07 +01:00
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
def getRasterLayers(self):
|
|
|
|
layers = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterRaster):
|
|
|
|
layers.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
|
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
2013-02-03 10:26:43 +01:00
|
|
|
#dependent.append(self.algIndex)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
for out in alg.outputs:
|
|
|
|
if isinstance(out, OutputRaster):
|
|
|
|
layers.append(AlgorithmAndParameter(i, out.name, alg.name, out.description))
|
|
|
|
i+=1
|
|
|
|
|
|
|
|
return layers
|
|
|
|
|
|
|
|
def getVectorLayers(self):
|
|
|
|
layers = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterVector):
|
|
|
|
layers.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
|
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
2013-02-03 10:26:43 +01:00
|
|
|
#dependent.append(self.algIndex)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
for out in alg.outputs:
|
|
|
|
if isinstance(out, OutputVector):
|
|
|
|
layers.append(AlgorithmAndParameter(i, out.name, alg.name, out.description))
|
|
|
|
i+=1
|
|
|
|
|
|
|
|
return layers
|
|
|
|
|
|
|
|
def getTables(self):
|
|
|
|
tables = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterTable):
|
|
|
|
tables.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
|
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
2013-02-03 10:26:43 +01:00
|
|
|
#dependent.append(self.algIndex)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
for out in alg.outputs:
|
|
|
|
if isinstance(out, OutputTable):
|
|
|
|
tables.append(AlgorithmAndParameter(i, out.name, alg.name, out.description))
|
|
|
|
i+=1
|
|
|
|
|
|
|
|
return tables
|
|
|
|
|
|
|
|
def getExtents(self):
|
|
|
|
extents = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterExtent):
|
2013-01-12 23:36:00 +01:00
|
|
|
extents.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
2012-09-15 18:25:25 +03:00
|
|
|
return extents
|
|
|
|
|
|
|
|
def getNumbers(self):
|
|
|
|
numbers = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterNumber):
|
|
|
|
numbers.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
|
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
2013-02-03 10:26:43 +01:00
|
|
|
#dependent.append(self.algIndex)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
for out in alg.outputs:
|
|
|
|
if isinstance(out, OutputNumber):
|
|
|
|
numbers.append(AlgorithmAndParameter(i, out.name, alg.name, out.description))
|
|
|
|
i+=1
|
|
|
|
return numbers
|
|
|
|
|
|
|
|
def getFiles(self):
|
|
|
|
files = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterFile):
|
|
|
|
files.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
|
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
2013-02-03 10:26:43 +01:00
|
|
|
#dependent.append(self.algIndex)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
for out in alg.outputs:
|
|
|
|
if isinstance(out, OutputFile):
|
|
|
|
files.append(AlgorithmAndParameter(i, out.name, alg.name, out.description))
|
|
|
|
i+=1
|
|
|
|
return files
|
|
|
|
|
|
|
|
def getBooleans(self):
|
|
|
|
booleans = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterBoolean):
|
|
|
|
booleans.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
return booleans
|
|
|
|
|
|
|
|
def getStrings(self):
|
|
|
|
strings = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterString):
|
|
|
|
strings.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
2012-11-05 20:07:16 +01:00
|
|
|
|
|
|
|
if self.algIndex is None:
|
|
|
|
dependent = []
|
|
|
|
else:
|
|
|
|
dependent = self.model.getDependentAlgorithms(self.algIndex)
|
2013-02-03 10:26:43 +01:00
|
|
|
#dependent.append(self.algIndex)
|
2012-12-10 00:12:07 +01:00
|
|
|
|
2012-11-05 20:07:16 +01:00
|
|
|
i=0
|
|
|
|
for alg in self.model.algs:
|
|
|
|
if i not in dependent:
|
|
|
|
for out in alg.outputs:
|
|
|
|
if isinstance(out, OutputString):
|
|
|
|
strings.append(AlgorithmAndParameter(i, out.name, alg.name, out.description))
|
2012-12-10 00:12:07 +01:00
|
|
|
i+=1
|
2012-09-15 18:25:25 +03:00
|
|
|
return strings
|
|
|
|
|
|
|
|
def getTableFields(self):
|
|
|
|
strings = []
|
|
|
|
params = self.model.parameters
|
|
|
|
for param in params:
|
|
|
|
if isinstance(param, ParameterTableField):
|
|
|
|
strings.append(AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, param.name, "", param.description))
|
|
|
|
return strings
|
|
|
|
|
|
|
|
def getWidgetFromParameter(self, param):
|
|
|
|
if isinstance(param, ParameterRaster):
|
|
|
|
item = QtGui.QComboBox()
|
2012-10-27 23:06:38 +02:00
|
|
|
#item.setEditable(True)
|
2012-09-15 18:25:25 +03:00
|
|
|
layers = self.getRasterLayers()
|
|
|
|
if (param.optional):
|
|
|
|
item.addItem(self.NOT_SELECTED, None)
|
|
|
|
for layer in layers:
|
|
|
|
item.addItem(layer.name(), layer)
|
|
|
|
elif isinstance(param, ParameterVector):
|
|
|
|
item = QtGui.QComboBox()
|
2012-10-27 23:06:38 +02:00
|
|
|
#item.setEditable(True)
|
2012-09-15 18:25:25 +03:00
|
|
|
layers = self.getVectorLayers()
|
|
|
|
if (param.optional):
|
|
|
|
item.addItem(self.NOT_SELECTED, None)
|
|
|
|
for layer in layers:
|
|
|
|
item.addItem(layer.name(), layer)
|
|
|
|
elif isinstance(param, ParameterTable):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.setEditable(True)
|
|
|
|
layers = self.getTables()
|
|
|
|
if (param.optional):
|
|
|
|
item.addItem(self.NOT_SELECTED, None)
|
|
|
|
for layer in layers:
|
|
|
|
item.addItem(layer.name(), layer)
|
|
|
|
elif isinstance(param, ParameterBoolean):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.addItem("Yes")
|
|
|
|
item.addItem("No")
|
|
|
|
bools = self.getBooleans()
|
|
|
|
for b in bools:
|
|
|
|
item.addItem(b.name(), b)
|
|
|
|
elif isinstance(param, ParameterSelection):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.addItems(param.options)
|
|
|
|
elif isinstance(param, ParameterFixedTable):
|
|
|
|
item = FixedTablePanel(param)
|
|
|
|
elif isinstance(param, ParameterRange):
|
|
|
|
item = RangePanel(param)
|
|
|
|
elif isinstance(param, ParameterMultipleInput):
|
|
|
|
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
|
|
|
|
options = self.getVectorLayers()
|
|
|
|
else:
|
|
|
|
options = self.getRasterLayers()
|
|
|
|
opts = []
|
|
|
|
for opt in options:
|
|
|
|
opts.append(opt.name())
|
|
|
|
item = MultipleInputPanel(opts)
|
|
|
|
elif isinstance(param, ParameterString):
|
|
|
|
strings = self.getStrings()
|
2013-02-03 10:26:43 +01:00
|
|
|
if param.multiline:
|
2013-04-13 09:40:01 +02:00
|
|
|
item = MultilineTextPanel(strings,self.model)
|
2013-02-03 10:26:43 +01:00
|
|
|
item.setText(str(param.default))
|
|
|
|
else:
|
|
|
|
item = QtGui.QComboBox()
|
2013-02-07 01:09:39 +01:00
|
|
|
item.setEditable(True)
|
2013-02-03 10:26:43 +01:00
|
|
|
for s in strings:
|
|
|
|
item.addItem(s.name(), s)
|
|
|
|
item.setEditText(str(param.default))
|
2012-09-15 18:25:25 +03:00
|
|
|
elif isinstance(param, ParameterTableField):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.setEditable(True)
|
|
|
|
fields = self.getTableFields()
|
|
|
|
for f in fields:
|
|
|
|
item.addItem(f.name(), f)
|
|
|
|
elif isinstance(param, ParameterNumber):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.setEditable(True)
|
|
|
|
numbers = self.getNumbers()
|
|
|
|
for n in numbers:
|
|
|
|
item.addItem(n.name(), n)
|
|
|
|
item.setEditText(str(param.default))
|
2013-02-23 16:18:22 +01:00
|
|
|
elif isinstance(param, ParameterCrs):
|
2013-02-28 22:08:32 +01:00
|
|
|
item = CrsSelectionPanel(param.default)
|
2012-09-15 18:25:25 +03:00
|
|
|
elif isinstance(param, ParameterExtent):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.setEditable(True)
|
|
|
|
extents = self.getExtents()
|
2013-01-12 23:36:00 +01:00
|
|
|
if self.canUseAutoExtent():
|
2012-12-20 00:16:05 +01:00
|
|
|
item.addItem(self.USE_MIN_COVERING_EXTENT, None)
|
2012-09-15 18:25:25 +03:00
|
|
|
for ex in extents:
|
2013-01-12 23:36:00 +01:00
|
|
|
item.addItem(ex.name(), ex)
|
2012-12-20 00:16:05 +01:00
|
|
|
if not self.canUseAutoExtent():
|
|
|
|
item.setEditText(str(param.default))
|
2012-09-15 18:25:25 +03:00
|
|
|
elif isinstance(param, ParameterFile):
|
|
|
|
item = QtGui.QComboBox()
|
|
|
|
item.setEditable(True)
|
|
|
|
files = self.getFiles()
|
|
|
|
for f in files:
|
2013-02-07 01:09:39 +01:00
|
|
|
item.addItem(f.name(), f)
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
|
|
|
item = QtGui.QLineEdit()
|
|
|
|
try:
|
|
|
|
item.setText(str(param.default))
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
return item
|
|
|
|
|
2012-12-20 00:16:05 +01:00
|
|
|
def canUseAutoExtent(self):
|
|
|
|
for param in self.alg.parameters:
|
|
|
|
if isinstance(param, (ParameterRaster, ParameterVector)):
|
|
|
|
return True
|
|
|
|
if isinstance(param, ParameterMultipleInput):
|
|
|
|
return True
|
2013-01-12 23:36:00 +01:00
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
def setTableContent(self):
|
|
|
|
params = self.alg.parameters
|
|
|
|
outputs = self.alg.outputs
|
|
|
|
numParams = 0
|
|
|
|
for param in params:
|
|
|
|
if not param.hidden:
|
|
|
|
numParams += 1
|
|
|
|
numOutputs = 0
|
|
|
|
for output in outputs:
|
|
|
|
if not output.hidden:
|
|
|
|
numOutputs += 1
|
|
|
|
self.tableWidget.setRowCount(numParams + numOutputs)
|
|
|
|
|
|
|
|
i=0
|
|
|
|
for param in params:
|
|
|
|
if not param.hidden:
|
|
|
|
item = QtGui.QTableWidgetItem(param.description)
|
|
|
|
item.setFlags(QtCore.Qt.ItemIsEnabled)
|
|
|
|
self.tableWidget.setItem(i,0, item)
|
|
|
|
item = self.getWidgetFromParameter(param)
|
|
|
|
self.valueItems[param.name] = item
|
|
|
|
self.tableWidget.setCellWidget(i,1, item)
|
|
|
|
self.tableWidget.setRowHeight(i,22)
|
|
|
|
i+=1
|
|
|
|
|
|
|
|
for output in outputs:
|
|
|
|
if not output.hidden:
|
|
|
|
item = QtGui.QTableWidgetItem(output.description + "<" + output.__module__.split(".")[-1] + ">")
|
|
|
|
item.setFlags(QtCore.Qt.ItemIsEnabled)
|
|
|
|
self.tableWidget.setItem(i,0, item)
|
|
|
|
item = QLineEdit()
|
|
|
|
if hasattr(item, 'setPlaceholderText'):
|
|
|
|
item.setPlaceholderText(ModelerParametersDialog.ENTER_NAME)
|
|
|
|
self.valueItems[output.name] = item
|
|
|
|
self.tableWidget.setCellWidget(i,1, item)
|
|
|
|
self.tableWidget.setRowHeight(i,22)
|
|
|
|
i+=1
|
|
|
|
|
|
|
|
|
|
|
|
def setComboBoxValue(self, combo, value, param):
|
2013-06-09 16:04:44 +02:00
|
|
|
items = [combo.itemData(i) for i in range(combo.count())]
|
2012-09-15 18:25:25 +03:00
|
|
|
idx = 0
|
|
|
|
for item in items:
|
|
|
|
if item and value:
|
|
|
|
if item.alg == value.alg and item.param == value.param:
|
|
|
|
combo.setCurrentIndex(idx)
|
|
|
|
return
|
|
|
|
idx += 1
|
|
|
|
if combo.isEditable():
|
|
|
|
value = self.model.getValueFromAlgorithmAndParameter(value)
|
|
|
|
if value:
|
|
|
|
combo.setEditText(str(value))
|
|
|
|
elif isinstance(param, ParameterSelection):
|
|
|
|
value = self.model.getValueFromAlgorithmAndParameter(value)
|
|
|
|
combo.setCurrentIndex(int(value))
|
|
|
|
elif isinstance(param, ParameterBoolean):
|
|
|
|
value = self.model.getValueFromAlgorithmAndParameter(value) == str(True)
|
|
|
|
if value:
|
|
|
|
combo.setCurrentIndex(0)
|
|
|
|
else:
|
|
|
|
combo.setCurrentIndex(1)
|
|
|
|
|
|
|
|
|
|
|
|
def setPreviousValues(self):
|
|
|
|
if self.algIndex is not None:
|
|
|
|
for name, value in self.model.algParameters[self.algIndex].items():
|
|
|
|
widget = self.valueItems[name]
|
|
|
|
param = self.alg.getParameterFromName(name)
|
|
|
|
if isinstance(param, (ParameterRaster, ParameterVector,
|
|
|
|
ParameterTable, ParameterTableField,
|
|
|
|
ParameterSelection, ParameterNumber,
|
2013-02-03 10:26:43 +01:00
|
|
|
ParameterBoolean, ParameterExtent)):
|
2012-09-15 18:25:25 +03:00
|
|
|
self.setComboBoxValue(widget, value, param)
|
2013-02-03 10:26:43 +01:00
|
|
|
elif isinstance(param, ParameterString):
|
|
|
|
if param.multiline:
|
|
|
|
widget.setValue(value)
|
|
|
|
else:
|
2013-02-07 01:09:39 +01:00
|
|
|
self.setComboBoxValue(widget, value, param)
|
|
|
|
elif isinstance(param, ParameterCrs):
|
2012-11-10 00:31:01 +01:00
|
|
|
value = self.model.getValueFromAlgorithmAndParameter(value)
|
2013-02-23 16:18:22 +01:00
|
|
|
widget.setAuthid(value)
|
2012-09-15 18:25:25 +03:00
|
|
|
elif isinstance(param, ParameterFixedTable):
|
|
|
|
pass
|
|
|
|
elif isinstance(param, ParameterMultipleInput):
|
2012-11-12 22:02:23 +01:00
|
|
|
value = self.model.getValueFromAlgorithmAndParameter(value)
|
|
|
|
values = value.split(";")
|
|
|
|
selectedoptions = []
|
|
|
|
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
|
|
|
|
options = self.getVectorLayers()
|
|
|
|
else:
|
|
|
|
options = self.getRasterLayers()
|
|
|
|
for i in range(len(options)):
|
2012-12-10 00:12:07 +01:00
|
|
|
option = options[i]
|
|
|
|
for aap in (values):
|
2012-11-12 22:02:23 +01:00
|
|
|
if str(option) == aap:
|
2012-12-10 00:12:07 +01:00
|
|
|
selectedoptions.append(i)
|
2012-11-12 22:02:23 +01:00
|
|
|
widget.setSelectedItems(selectedoptions)
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
|
|
|
pass
|
|
|
|
|
|
|
|
for out in self.alg.outputs:
|
|
|
|
if not out.hidden:
|
|
|
|
value = self.model.algOutputs[self.algIndex][out.name]
|
|
|
|
if value is not None:
|
|
|
|
widget = self.valueItems[out.name].setText(unicode(value))
|
2013-02-07 01:09:39 +01:00
|
|
|
|
2013-02-03 10:26:43 +01:00
|
|
|
selected = []
|
|
|
|
dependencies = self.getAvailableDependencies()
|
2013-02-07 01:09:39 +01:00
|
|
|
index = -1
|
2013-02-03 10:26:43 +01:00
|
|
|
for dependency in dependencies:
|
|
|
|
index += 1
|
|
|
|
n = int(dependency[:dependency.find(":")]) - 1
|
|
|
|
if n in self.model.dependencies[self.algIndex]:
|
2013-02-07 01:09:39 +01:00
|
|
|
selected.append(index)
|
|
|
|
|
2013-02-03 10:26:43 +01:00
|
|
|
self.dependenciesPanel.setSelectedItems(selected)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
|
|
|
|
def setParamValues(self):
|
|
|
|
self.params = {}
|
|
|
|
self.values = {}
|
|
|
|
self.outputs = {}
|
|
|
|
|
|
|
|
params = self.alg.parameters
|
|
|
|
outputs = self.alg.outputs
|
2013-04-13 09:40:01 +02:00
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
for param in params:
|
|
|
|
if param.hidden:
|
|
|
|
continue
|
|
|
|
if not self.setParamValue(param, self.valueItems[param.name]):
|
|
|
|
return False
|
|
|
|
for output in outputs:
|
|
|
|
if output.hidden:
|
2012-12-20 00:16:05 +01:00
|
|
|
self.outputs[output.name] = None
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
2012-10-03 00:06:22 +02:00
|
|
|
name= unicode(self.valueItems[output.name].text())
|
|
|
|
if name.strip()!="" and name != ModelerParametersDialog.ENTER_NAME:
|
|
|
|
self.outputs[output.name]=name
|
|
|
|
else:
|
|
|
|
self.outputs[output.name] = None
|
2013-02-07 01:09:39 +01:00
|
|
|
|
2013-02-03 10:26:43 +01:00
|
|
|
selectedOptions = self.dependenciesPanel.selectedoptions
|
2013-02-07 01:09:39 +01:00
|
|
|
#this index are based on the list of available dependencies.
|
2013-02-03 10:26:43 +01:00
|
|
|
#we translate them into indices based on the whole set of algorithm in the model
|
2013-03-10 20:53:24 +01:00
|
|
|
#We just take the values in the beginning of the string representing the algorithm
|
2013-02-03 10:26:43 +01:00
|
|
|
availableDependencies = self.getAvailableDependencies()
|
2013-02-07 01:09:39 +01:00
|
|
|
self.dependencies = []
|
2013-02-03 10:26:43 +01:00
|
|
|
for selected in selectedOptions:
|
|
|
|
s = availableDependencies[selected]
|
|
|
|
n = int(s[:s.find(":")]) - 1
|
|
|
|
self.dependencies.append(n);
|
2013-02-07 01:09:39 +01:00
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
def setParamValueLayerOrTable(self, param, widget):
|
2013-03-10 20:53:24 +01:00
|
|
|
idx = widget.currentIndex()
|
2012-09-15 18:25:25 +03:00
|
|
|
if idx < 0:
|
2013-03-10 20:53:24 +01:00
|
|
|
return False
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
2013-06-09 16:04:44 +02:00
|
|
|
value = widget.itemData(widget.currentIndex())
|
2012-09-15 18:25:25 +03:00
|
|
|
self.params[param.name] = value
|
2013-03-10 20:53:24 +01:00
|
|
|
return True
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
def setParamBooleanValue(self, param, widget):
|
|
|
|
if widget.currentIndex() < 2:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
self.values[name] = str(widget.currentIndex() == 0)
|
|
|
|
else:
|
2013-06-09 16:04:44 +02:00
|
|
|
value = widget.itemData(widget.currentIndex())
|
2012-09-15 18:25:25 +03:00
|
|
|
self.params[param.name] = value
|
|
|
|
return True
|
|
|
|
|
|
|
|
def setParamTableFieldValue(self, param, widget):
|
|
|
|
idx = widget.findText(widget.currentText())
|
|
|
|
if idx < 0:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
2013-04-15 07:16:20 +02:00
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
2013-04-13 09:40:01 +02:00
|
|
|
s = str(widget.currentText()).strip()
|
|
|
|
if s == "":
|
|
|
|
if param.optional:
|
|
|
|
self.params[param.name] = None
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
2013-04-13 09:40:01 +02:00
|
|
|
self.params[param.name] = value
|
2012-09-15 18:25:25 +03:00
|
|
|
self.values[name] = str(widget.currentText())
|
|
|
|
return True
|
|
|
|
else:
|
2013-06-09 16:04:44 +02:00
|
|
|
value = widget.itemData(widget.currentIndex())
|
2012-09-15 18:25:25 +03:00
|
|
|
self.params[param.name] = value
|
|
|
|
return True
|
|
|
|
|
|
|
|
def setParamStringValue(self, param, widget):
|
2013-04-15 07:16:20 +02:00
|
|
|
if param.multiline:
|
2013-04-13 09:40:01 +02:00
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
paramValue = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
2013-02-03 10:26:43 +01:00
|
|
|
value = widget.getValue()
|
2013-04-13 09:40:01 +02:00
|
|
|
option = widget.getOption()
|
2013-04-15 07:16:20 +02:00
|
|
|
if option == MultilineTextPanel.USE_TEXT:
|
2013-02-03 10:26:43 +01:00
|
|
|
if value == "":
|
2013-04-13 09:40:01 +02:00
|
|
|
if param.optional:
|
|
|
|
self.params[param.name] = None
|
2013-04-15 07:16:20 +02:00
|
|
|
return True
|
2013-04-13 09:40:01 +02:00
|
|
|
else:
|
|
|
|
return False
|
2013-04-15 07:16:20 +02:00
|
|
|
else:
|
2013-04-13 09:40:01 +02:00
|
|
|
self.values[name] = value
|
2013-04-15 07:16:20 +02:00
|
|
|
|
2013-04-13 09:40:01 +02:00
|
|
|
self.params[param.name] = paramValue
|
2013-02-07 01:09:39 +01:00
|
|
|
else:
|
2013-02-03 10:26:43 +01:00
|
|
|
self.params[param.name] = value
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
2013-02-03 10:26:43 +01:00
|
|
|
if widget.currentText() == "":
|
|
|
|
return False
|
|
|
|
idx = widget.findText(widget.currentText())
|
|
|
|
if idx < 0:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
2013-04-13 09:40:01 +02:00
|
|
|
value = str(widget.currentText()).strip()
|
|
|
|
if value == "":
|
|
|
|
if param.optional:
|
|
|
|
self.values[name] = None
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
self.values[name] = str(widget.currentText())
|
2013-02-03 10:26:43 +01:00
|
|
|
else:
|
2013-06-09 16:04:44 +02:00
|
|
|
value = widget.itemData(widget.currentIndex())
|
2013-02-03 10:26:43 +01:00
|
|
|
self.params[param.name] = value
|
2012-09-15 18:25:25 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
def setParamFileValue(self, param, widget):
|
|
|
|
idx = widget.findText(widget.currentText())
|
|
|
|
if idx < 0:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
s = str(widget.currentText())
|
|
|
|
self.values[name] = s
|
|
|
|
else:
|
2013-06-09 16:04:44 +02:00
|
|
|
value = widget.itemData(widget.currentIndex())
|
2012-09-15 18:25:25 +03:00
|
|
|
self.params[param.name] = value
|
|
|
|
return True
|
|
|
|
|
|
|
|
def setParamNumberValue(self, param, widget):
|
|
|
|
idx = widget.findText(widget.currentText())
|
|
|
|
if idx < 0:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
s = str(widget.currentText())
|
|
|
|
try:
|
|
|
|
float(s)
|
|
|
|
self.values[name] = s
|
|
|
|
except:
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
value = widget.itemData(widget.currentIndex()).toPyObject()
|
|
|
|
self.params[param.name] = value
|
|
|
|
return True
|
|
|
|
|
|
|
|
def setParamExtentValue(self, param, widget):
|
|
|
|
idx = widget.findText(widget.currentText())
|
|
|
|
if idx < 0:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
s = str(widget.currentText())
|
|
|
|
try:
|
|
|
|
tokens = s.split(",")
|
|
|
|
if len(tokens) != 4:
|
|
|
|
return False
|
|
|
|
for token in tokens:
|
|
|
|
float(token)
|
|
|
|
except:
|
|
|
|
return False
|
|
|
|
self.values[name] = s
|
|
|
|
else:
|
|
|
|
value = widget.itemData(widget.currentIndex()).toPyObject()
|
|
|
|
self.params[param.name] = value
|
|
|
|
return True
|
|
|
|
|
|
|
|
def setParamValue(self, param, widget):
|
|
|
|
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable)):
|
|
|
|
return self.setParamValueLayerOrTable(param, widget)
|
|
|
|
elif isinstance(param, ParameterBoolean):
|
|
|
|
return self.setParamBooleanValue(param, widget)
|
|
|
|
elif isinstance(param, ParameterString):
|
|
|
|
return self.setParamStringValue(param, widget)
|
|
|
|
elif isinstance(param, ParameterNumber):
|
|
|
|
return self.setParamNumberValue(param, widget)
|
|
|
|
elif isinstance(param, ParameterExtent):
|
|
|
|
return self.setParamExtentValue(param, widget)
|
|
|
|
elif isinstance(param, ParameterFile):
|
|
|
|
return self.setParamFileValue(param, widget)
|
|
|
|
elif isinstance(param, ParameterSelection):
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
self.values[name] = str(widget.currentIndex())
|
|
|
|
return True
|
|
|
|
elif isinstance(param, ParameterRange):
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
self.values[name] = str(widget.getValue())
|
|
|
|
return True
|
2013-02-23 16:18:22 +01:00
|
|
|
elif isinstance(param, ParameterCrs):
|
|
|
|
authid = widget.getValue()
|
|
|
|
if authid is None:
|
2013-02-28 22:08:32 +01:00
|
|
|
self.params[param.name] = None
|
2013-02-23 16:18:22 +01:00
|
|
|
else:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
self.values[name] = authid
|
2013-02-28 22:08:32 +01:00
|
|
|
return True
|
2012-09-15 18:25:25 +03:00
|
|
|
elif isinstance(param, ParameterFixedTable):
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
self.values[name] = ParameterFixedTable.tableToString(widget.table)
|
|
|
|
return True
|
|
|
|
elif isinstance(param, ParameterTableField):
|
|
|
|
return self.setParamTableFieldValue(param, widget)
|
|
|
|
elif isinstance(param, ParameterMultipleInput):
|
|
|
|
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
|
|
|
|
options = self.getVectorLayers()
|
|
|
|
else:
|
|
|
|
options = self.getRasterLayers()
|
|
|
|
values = []
|
|
|
|
for index in widget.selectedoptions:
|
|
|
|
values.append(options[index].serialize())
|
|
|
|
if len(values) == 0 and not param.optional:
|
|
|
|
return False
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
|
|
|
self.values[name] = ";".join(values)
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
name = self.getSafeNameForHarcodedParameter(param)
|
|
|
|
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
|
|
|
|
self.params[param.name] = value
|
2013-06-03 21:25:22 +02:00
|
|
|
self.values[name] = unicode(widget.text())
|
2012-09-15 18:25:25 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
def getSafeNameForHarcodedParameter(self, param):
|
|
|
|
if self.algIndex is None:
|
|
|
|
return "HARDCODEDPARAMVALUE_" + param.name + "_" + str(len(self.model.algs))
|
|
|
|
else:
|
|
|
|
return "HARDCODEDPARAMVALUE_" + param.name + "_" + str(self.algIndex)
|
|
|
|
|
|
|
|
|
|
|
|
def okPressed(self):
|
|
|
|
if self.setParamValues():
|
|
|
|
self.close()
|
|
|
|
else:
|
|
|
|
QMessageBox.critical(self, "Unable to add algorithm", "Wrong or missing parameter values")
|
|
|
|
self.params = None
|
|
|
|
|
|
|
|
|
|
|
|
def cancelPressed(self):
|
|
|
|
self.params = None
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|