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

637 lines
25 KiB
Python
Raw Normal View History

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. *
* *
***************************************************************************
"""
2012-10-04 19:33:47 +02:00
__author__ = 'Victor Olaya'
__date__ = 'August 2012'
__copyright__ = '(C) 2012, Victor Olaya'
2012-10-04 19:33:47 +02:00
# This will get replaced with a git SHA1 when you do a git archive
2012-10-04 19:33:47 +02:00
__revision__ = '$Format:%H$'
2012-09-15 18:25:25 +03:00
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from processing.modeler.ModelerAlgorithm import ValueFromInput,\
ValueFromOutput, Algorithm, ModelerOutput
2013-08-12 20:44:27 +02:00
from processing.gui.CrsSelectionPanel import CrsSelectionPanel
from processing.gui.MultipleInputPanel import MultipleInputPanel
from processing.gui.FixedTablePanel import FixedTablePanel
from processing.gui.RangePanel import RangePanel
from processing.modeler.MultilineTextPanel import MultilineTextPanel
from processing.core.parameters import *
from processing.core.outputs import *
2012-09-15 18:25:25 +03:00
class ModelerParametersDialog(QDialog):
2012-09-15 18:25:25 +03:00
ENTER_NAME = '[Enter name if this is a final result]'
NOT_SELECTED = '[Not selected]'
USE_MIN_COVERING_EXTENT = '[Use min covering extent]'
2012-09-15 18:25:25 +03:00
def __init__(self, alg, model, algName=None):
QDialog.__init__(self)
2012-09-15 18:25:25 +03:00
self.setModal(True)
#The algorithm to define in this dialog. It is an instance of GeoAlgorithm
self._alg = alg
#The resulting algorithm after the user clicks on OK. it is an instance of the container Algorithm class
self.alg = None
#The model this algorithm is going to be added to
2012-09-15 18:25:25 +03:00
self.model = model
2014-07-02 07:46:03 +02:00
#The name of the algorithm in the model, in case we are editing it and not defining it for the first time
self._algName = algName
2012-09-15 18:25:25 +03:00
self.setupUi()
self.params = None
def setupUi(self):
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 = QDialogButtonBox()
self.buttonBox.setOrientation(Qt.Horizontal)
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel
| QDialogButtonBox.Ok)
tooltips = self._alg.getParameterDescriptions()
self.setSizePolicy(QSizePolicy.Expanding,
QSizePolicy.Expanding)
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setSpacing(5)
self.verticalLayout.setMargin(20)
2014-07-02 07:46:03 +02:00
hLayout = QHBoxLayout()
hLayout.setSpacing(5)
hLayout.setMargin(0)
descriptionLabel = QLabel("Description")
self.descriptionBox = QLineEdit()
self.descriptionBox.setText(self._alg.name)
hLayout.addWidget(descriptionLabel)
hLayout.addWidget(self.descriptionBox)
self.verticalLayout.addLayout(hLayout)
line = QFrame()
line.setFrameShape(QFrame.HLine)
line.setFrameShadow(QFrame.Sunken)
self.verticalLayout.addWidget(line)
2014-07-02 07:46:03 +02:00
for param in self._alg.parameters:
if param.isAdvanced:
self.advancedButton = QPushButton()
self.advancedButton.setText('Show advanced parameters')
self.advancedButton.setMaximumWidth(150)
self.advancedButton.clicked.connect(
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 = 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
if isinstance(output, (OutputRaster, OutputVector, OutputTable,
OutputHTML, OutputFile, OutputDirectory)):
label = 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
label = QLabel(' ')
2013-02-03 10:26:43 +01:00
self.verticalLayout.addWidget(label)
label = 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
self.verticalLayout.addStretch(1000)
self.setLayout(self.verticalLayout)
2012-09-15 18:25:25 +03:00
self.setPreviousValues()
self.setWindowTitle(self._alg.name)
self.verticalLayout2 = QVBoxLayout()
self.verticalLayout2.setSpacing(2)
self.verticalLayout2.setMargin(0)
self.tabWidget = QTabWidget()
2012-12-10 00:12:07 +01:00
self.tabWidget.setMinimumWidth(300)
self.paramPanel = QWidget()
self.paramPanel.setLayout(self.verticalLayout)
self.scrollArea = QScrollArea()
self.scrollArea.setWidget(self.paramPanel)
self.scrollArea.setWidgetResizable(True)
self.tabWidget.addTab(self.scrollArea, 'Parameters')
self.webView = QWebView()
2014-04-19 22:04:24 +02:00
2012-09-15 18:25:25 +03:00
html = None
url = None
isText, help = self._alg.help()
if help is not None:
if isText:
html = help;
2012-09-15 18:25:25 +03:00
else:
url = QUrl(help)
else:
html = '<h2>Sorry, no help is available for this \
algorithm.</h2>'
2012-09-15 18:25:25 +03:00
try:
if html:
self.webView.setHtml(html)
2014-04-19 22:04:24 +02:00
elif url:
2012-09-15 18:25:25 +03:00
self.webView.load(url)
except:
self.webView.setHtml('<h2>Could not open help file :-( </h2>')
self.tabWidget.addTab(self.webView, 'Help')
self.verticalLayout2.addWidget(self.tabWidget)
self.verticalLayout2.addWidget(self.buttonBox)
self.setLayout(self.verticalLayout2)
self.buttonBox.accepted.connect(self.okPressed)
self.buttonBox.rejected.connect(self.cancelPressed)
QMetaObject.connectSlotsByName(self)
2012-09-15 18:25:25 +03:00
2013-02-07 01:09:39 +01:00
def getAvailableDependencies(self):
if self._algName is None:
2013-02-03 10:26:43 +01:00
dependent = []
else:
dependent = self.model.getDependentAlgorithms(self._algName)
2013-02-07 01:09:39 +01:00
opts = []
for alg in self.model.algs.values():
if alg.name not in dependent:
opts.append(alg.algorithm.name)
2013-02-03 10:26:43 +01:00
return opts
def getDependenciesPanel(self):
return MultipleInputPanel(self.getAvailableDependencies())
2013-02-07 01:09:39 +01: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
2014-07-02 07:46:03 +02:00
def getAvailableValuesOfType(self, paramType, outType = None):
values = []
inputs = self.model.inputs
for i in inputs.values():
param = i.param
if isinstance(param, paramType):
values.append(ValueFromInput(param.name))
if outType is None:
return values
if self._algName is None:
2012-09-15 18:25:25 +03:00
dependent = []
else:
dependent = self.model.getDependentAlgorithms(self._algName)
for alg in self.model.algs.values():
if alg.name not in dependent:
for out in alg.algorithm.outputs:
if isinstance(out, outType):
2014-07-02 07:46:03 +02:00
values.append(ValueFromOutput(alg.name, out.name))
return values
2014-07-02 07:46:03 +02:00
def resolveValueDescription(self, value):
if isinstance(value, ValueFromInput):
return self.model.inputs[value.name].param.description
2012-09-15 18:25:25 +03:00
else:
alg = self.model.algs[value.alg]
2014-07-02 07:46:03 +02:00
return "'%s' from algorithm '%s'" % (alg.algorithm.getOutputFromName(value.output).description, alg.description)
2012-09-15 18:25:25 +03:00
def getWidgetFromParameter(self, param):
if isinstance(param, ParameterRaster):
item = QComboBox()
layers = self.getAvailableValuesOfType(ParameterRaster, OutputRaster)
if param.optional:
2012-09-15 18:25:25 +03:00
item.addItem(self.NOT_SELECTED, None)
for layer in layers:
item.addItem(self.resolveValueDescription(layer), layer)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterVector):
item = QComboBox()
layers = self.getAvailableValuesOfType(ParameterVector, OutputVector)
if param.optional:
2012-09-15 18:25:25 +03:00
item.addItem(self.NOT_SELECTED, None)
for layer in layers:
item.addItem(self.resolveValueDescription(layer), layer)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterTable):
item = QComboBox()
2012-09-15 18:25:25 +03:00
item.setEditable(True)
layers = self.getAvailableValuesOfType(ParameterTable, OutputTable)
if param.optional:
2012-09-15 18:25:25 +03:00
item.addItem(self.NOT_SELECTED, None)
for layer in layers:
item.addItem(self.resolveValueDescription(layer), layer)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterBoolean):
item = QComboBox()
bools = self.getAvailableValuesOfType(ParameterBoolean, None)
2012-09-15 18:25:25 +03:00
for b in bools:
item.addItem(self.resolveValueDescription(b), b)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterSelection):
item = QComboBox()
2012-09-15 18:25:25 +03:00
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.getAvailableValuesOfType(ParameterVector, OutputVector)
2012-09-15 18:25:25 +03:00
else:
options = self.getAvailableValuesOfType(ParameterRaster, OutputRaster)
2012-09-15 18:25:25 +03:00
opts = []
for opt in options:
opts.append(self.resolveValueDescription(opt))
2012-09-15 18:25:25 +03:00
item = MultipleInputPanel(opts)
elif isinstance(param, ParameterString):
strings = self.getAvailableValuesOfType(ParameterString, OutputString)
options = [(self.resolveValueDescription(s), s) for s in strings]
2013-02-03 10:26:43 +01:00
if param.multiline:
item = MultilineTextPanel(options)
item.setText(unicode(param.default))
2013-02-03 10:26:43 +01:00
else:
item = QComboBox()
2013-02-07 01:09:39 +01:00
item.setEditable(True)
for desc, val in options:
item.addItem(desc, val)
item.setEditText(unicode(param.default))
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterTableField):
item = QComboBox()
2012-09-15 18:25:25 +03:00
item.setEditable(True)
fields = self.getAvailableValuesOfType(ParameterTableField, None)
2012-09-15 18:25:25 +03:00
for f in fields:
item.addItem(self.resolveValueDescription(f), f)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterNumber):
item = QComboBox()
2012-09-15 18:25:25 +03:00
item.setEditable(True)
numbers = self.getAvailableValuesOfType(ParameterNumber, OutputNumber)
2012-09-15 18:25:25 +03:00
for n in numbers:
item.addItem(self.resolveValueDescription(n), n)
2012-09-15 18:25:25 +03:00
item.setEditText(str(param.default))
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 = QComboBox()
2012-09-15 18:25:25 +03:00
item.setEditable(True)
extents = self.getAvailableValuesOfType(ParameterExtent, OutputExtent)
if self.canUseAutoExtent():
item.addItem(self.USE_MIN_COVERING_EXTENT, None)
2012-09-15 18:25:25 +03:00
for ex in extents:
item.addItem(self.resolveValueDescription(ex), ex)
if not self.canUseAutoExtent():
item.setEditText(str(param.default))
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterFile):
item = QComboBox()
2012-09-15 18:25:25 +03:00
item.setEditable(True)
2014-07-04 22:35:41 +02:00
files = self.getAvailableValuesOfType(ParameterFile, OutputFile)
2012-09-15 18:25:25 +03:00
for f in files:
item.addItem(self.resolveValueDescription(f), f)
2012-09-15 18:25:25 +03:00
else:
item = QLineEdit()
2012-09-15 18:25:25 +03:00
try:
item.setText(str(param.default))
except:
pass
return item
def canUseAutoExtent(self):
for param in self._alg.parameters:
if isinstance(param, (ParameterRaster, ParameterVector, ParameterMultipleInput)):
return True
return False
2012-09-15 18:25:25 +03:00
def setTableContent(self):
params = self._alg.parameters
outputs = self._alg.outputs
2014-07-02 07:46:03 +02:00
visibleParams = [p for p in params if not p.hidden]
visibleOutputs = [p for o in outputs if not o.hidden]
self.tableWidget.setRowCount(len(visibleParams) + len(visibleOutputs))
2014-07-02 07:46:03 +02:00
for i, param in visibleParams:
item = QTableWidgetItem(param.description)
item.setFlags(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)
2014-07-02 07:46:03 +02:00
for i, output in visibleOutputs:
item = QTableWidgetItem(output.description + '<'
+ output.__module__.split('.')[-1] + '>')
item.setFlags(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)
2012-09-15 18:25:25 +03:00
def setComboBoxValue(self, combo, value, param):
if isinstance(value, list):
value = value[0]
print param.name
print value
items = [combo.itemData(i) for i in range(combo.count())]
2014-07-02 07:46:03 +02:00
print items
try:
2014-07-02 07:46:03 +02:00
idx = items.index(value)
combo.setCurrentIndex(idx)
2014-07-02 07:46:03 +02:00
return
except ValueError:
pass
2014-07-02 07:46:03 +02:00
if combo.isEditable():
if value is not None:
combo.setEditText(unicode(value))
2014-07-02 07:46:03 +02:00
elif isinstance(param, ParameterSelection):
2012-09-15 18:25:25 +03:00
combo.setCurrentIndex(int(value))
2014-07-02 07:46:03 +02:00
elif isinstance(param, ParameterBoolean):
2012-09-15 18:25:25 +03:00
if value:
combo.setCurrentIndex(0)
else:
combo.setCurrentIndex(1)
2014-07-02 07:46:03 +02:00
def setPreviousValues(self):
if self._algName is not None:
alg = self.model.algs[self._algName]
self.descriptionBox.setText(alg.description)
for param in alg.algorithm.parameters:
if param.hidden:
continue
widget = self.valueItems[param.name]
2014-07-02 07:46:03 +02:00
value = alg.params[param.name]
if isinstance(param, (
ParameterRaster,
ParameterVector,
ParameterTable,
ParameterTableField,
ParameterSelection,
ParameterNumber,
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):
widget.setAuthid(value)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterFixedTable):
pass #TODO!
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterMultipleInput):
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
options = self.getAvailableValuesOfType(ParameterVector, OutputVector)
2012-11-12 22:02:23 +01:00
else:
options = self.getAvailableValuesOfType(ParameterRaster, OutputRaster)
selected = []
for i, opt in enumerate(options):
if opt in value:
selected.append(i)
widget.setSelectedItems(selected)
2012-09-15 18:25:25 +03:00
2014-07-02 07:46:03 +02:00
for name, out in alg.outputs.iteritems():
widget = self.valueItems[name].setText(out.description)
2013-02-07 01:09:39 +01:00
2013-02-03 10:26:43 +01:00
selected = []
dependencies = self.getAvailableDependencies()
for idx, dependency in enumerate(dependencies):
if dependency in alg.dependencies:
selected.append(idx)
2013-02-07 01:09:39 +01:00
2013-02-03 10:26:43 +01:00
self.dependenciesPanel.setSelectedItems(selected)
2012-09-15 18:25:25 +03:00
def createAlgorithm(self):
alg = Algorithm(self._alg.commandLineName())
alg.setName(self.model)
2014-07-02 07:46:03 +02:00
alg.description = self.descriptionBox.text()
params = self._alg.parameters
outputs = self._alg.outputs
2012-09-15 18:25:25 +03:00
for param in params:
if param.hidden:
continue
if not self.setParamValue(alg, param, self.valueItems[param.name]):
return None
2012-09-15 18:25:25 +03:00
for output in outputs:
if not output.hidden:
name = unicode(self.valueItems[output.name].text())
if name.strip() != '' and name != ModelerParametersDialog.ENTER_NAME:
alg.outputs[output.name] = ModelerOutput(name)
2013-02-07 01:09:39 +01:00
2013-02-03 10:26:43 +01:00
selectedOptions = self.dependenciesPanel.selectedoptions
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]
alg.dependencies.append(s)
2013-02-07 01:09:39 +01:00
return alg
2012-09-15 18:25:25 +03:00
def setParamValueLayerOrTable(self, alg, param, widget):
idx = widget.currentIndex()
2012-09-15 18:25:25 +03:00
if idx < 0:
return False
2012-09-15 18:25:25 +03:00
else:
value = widget.itemData(widget.currentIndex())
alg.params[param.name] = value
return True
2012-09-15 18:25:25 +03:00
def setParamTableFieldValue(self, alg, param, widget):
2012-09-15 18:25:25 +03:00
idx = widget.findText(widget.currentText())
2014-07-02 07:46:03 +02:00
if idx < 0:
s = str(widget.currentText()).strip()
if s == '':
if param.optional:
alg.params[param.name] = None
return True
else:
return False
2014-07-02 07:46:03 +02:00
else:
alg.values[param.name] = s
2012-09-15 18:25:25 +03:00
return True
else:
alg.params[param.name] = widget.itemData(widget.currentIndex())
2012-09-15 18:25:25 +03:00
return True
def setParamStringValue(self, alg, param, widget):
2014-07-02 07:46:03 +02:00
if param.multiline:
2013-02-03 10:26:43 +01:00
value = widget.getValue()
option = widget.getOption()
2013-04-15 07:16:20 +02:00
if option == MultilineTextPanel.USE_TEXT:
if value == '':
if param.optional:
alg.params[param.name] = None
2013-04-15 07:16:20 +02:00
return True
else:
return False
2013-04-15 07:16:20 +02:00
else:
alg.params[param.name] = value
2013-02-07 01:09:39 +01:00
else:
alg.params[param.name] = value
2014-07-02 07:46:03 +02:00
else:
2013-02-03 10:26:43 +01:00
idx = widget.findText(widget.currentText())
2014-07-02 07:46:03 +02:00
if idx < 0:
value = widget.currentText().strip()
if value == '':
if param.optional:
alg.params[param.name] = None
return True
else:
return False
else:
alg.params[param.name] = value
2013-02-03 10:26:43 +01:00
else:
2014-07-02 07:46:03 +02:00
alg.params[param.name] = widget.itemData(widget.currentIndex())
2012-09-15 18:25:25 +03:00
return True
def setParamFileValue(self, alg, param, widget):
2012-09-15 18:25:25 +03:00
idx = widget.findText(widget.currentText())
2014-07-02 07:46:03 +02:00
if idx < 0:
value = widget.currentText()
2012-09-15 18:25:25 +03:00
else:
value = widget.itemData(widget.currentIndex())
alg.params[param.name] = value
2012-09-15 18:25:25 +03:00
return True
def setParamNumberValue(self, alg, param, widget):
2012-09-15 18:25:25 +03:00
idx = widget.findText(widget.currentText())
2014-07-02 07:46:03 +02:00
if idx < 0:
s = widget.currentText()
2012-09-15 18:25:25 +03:00
try:
2014-07-02 07:46:03 +02:00
value = float(s)
2012-09-15 18:25:25 +03:00
except:
return False
else:
value = widget.itemData(widget.currentIndex())
2014-07-02 07:46:03 +02:00
alg.params[param.name] = value
2012-09-15 18:25:25 +03:00
return True
def setParamExtentValue(self, alg, param, widget):
2012-09-15 18:25:25 +03:00
idx = widget.findText(widget.currentText())
2014-07-02 07:46:03 +02:00
if idx < 0:
2012-09-15 18:25:25 +03:00
s = str(widget.currentText())
try:
tokens = s.split(',')
2012-09-15 18:25:25 +03:00
if len(tokens) != 4:
return False
for token in tokens:
float(token)
except:
2014-07-02 07:46:03 +02:00
return False
alg.params[param.name] = [s]
2012-09-15 18:25:25 +03:00
else:
value = widget.itemData(widget.currentIndex())
alg.params[param.name] = value
2012-09-15 18:25:25 +03:00
return True
def setParamValue(self, alg, param, widget):
if isinstance(param, (ParameterRaster, ParameterVector,
ParameterTable)):
return self.setParamValueLayerOrTable(alg, param, widget)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterBoolean):
if widget.currentIndex() < 2:
value = widget.currentIndex() == 0
else:
value = widget.itemData(widget.currentIndex())
alg.params[param.name] = value
return True
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterString):
return self.setParamStringValue(alg, param, widget)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterNumber):
return self.setParamNumberValue(alg, param, widget)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterExtent):
return self.setParamExtentValue(alg, param, widget)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterFile):
return self.setParamFileValue(alg, param, widget)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterSelection):
alg.params[param.name] = widget.currentIndex()
2014-07-02 07:46:03 +02:00
return True
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterRange):
alg.params[param.name] = widget.getValue()
2014-07-02 07:46:03 +02:00
return True
elif isinstance(param, ParameterCrs):
authid = widget.getValue()
if authid is None:
alg.params[param.name] = None
else:
2014-07-02 07:46:03 +02:00
alg.params[param.name] = authid
2013-02-28 22:08:32 +01:00
return True
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterFixedTable):
alg.params[param.name] = ParameterFixedTable.tableToString(widget.table)
2014-07-02 07:46:03 +02:00
return True
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterTableField):
return self.setParamTableFieldValue(alg, param, widget)
2012-09-15 18:25:25 +03:00
elif isinstance(param, ParameterMultipleInput):
if param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
2014-07-02 07:46:03 +02:00
options = self.getAvailableValuesOfType(ParameterVector, OutputVector)
2012-09-15 18:25:25 +03:00
else:
options = self.getAvailableValuesOfType(ParameterRaster, OutputRaster)
2014-07-02 07:46:03 +02:00
values = [options[i] for i in widget.selectedoptions]
2012-09-15 18:25:25 +03:00
if len(values) == 0 and not param.optional:
2014-07-02 07:46:03 +02:00
return False
alg.params[param.name] = values
2012-09-15 18:25:25 +03:00
return True
else:
alg.params[param.name] = unicode(widget.text())
2012-09-15 18:25:25 +03:00
return True
def okPressed(self):
self.alg = self.createAlgorithm()
if self.alg is not None:
2012-09-15 18:25:25 +03:00
self.close()
else:
QMessageBox.warning(self, 'Unable to add algorithm',
2014-07-02 07:46:03 +02:00
'Wrong or missing parameter values')
2012-09-15 18:25:25 +03:00
def cancelPressed(self):
self.alg = None
2012-09-15 18:25:25 +03:00
self.close()