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

666 lines
27 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 import QtCore, QtGui, QtWebKit
from processing.modeler.ModelerAlgorithm import ValueFromInput,\
ValueFromOutput, Algorithm, Output
from processing.core.WrongHelpFileException import WrongHelpFileException
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
2013-08-12 20:44:27 +02:00
from processing.parameters.ParameterCrs import ParameterCrs
from processing.parameters.ParameterRaster import ParameterRaster
from processing.parameters.ParameterVector import ParameterVector
from processing.parameters.ParameterBoolean import ParameterBoolean
from processing.parameters.ParameterSelection import ParameterSelection
from processing.parameters.ParameterMultipleInput import ParameterMultipleInput
from processing.parameters.ParameterFixedTable import ParameterFixedTable
from processing.parameters.ParameterNumber import ParameterNumber
from processing.parameters.ParameterTableField import ParameterTableField
from processing.parameters.ParameterTable import ParameterTable
from processing.parameters.ParameterString import ParameterString
from processing.parameters.ParameterRange import ParameterRange
from processing.parameters.ParameterFile import ParameterFile
from processing.parameters.ParameterExtent import ParameterExtent
2013-08-12 20:44:27 +02:00
from processing.outputs.OutputRaster import OutputRaster
from processing.outputs.OutputVector import OutputVector
from processing.outputs.OutputTable import OutputTable
from processing.outputs.OutputExtent import OutputExtent
from processing.outputs.OutputString import OutputString
2013-08-12 20:44:27 +02:00
from processing.outputs.OutputNumber import OutputNumber
from processing.outputs.OutputHTML import OutputHTML
from processing.outputs.OutputFile import OutputFile
from processing.outputs.OutputDirectory import OutputDirectory
2012-09-15 18:25:25 +03:00
class ModelerParametersDialog(QtGui.QDialog):
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):
2012-09-15 18:25:25 +03:00
QtGui.QDialog.__init__(self)
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 = QtGui.QDialogButtonBox()
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel
| QtGui.QDialogButtonBox.Ok)
tooltips = self._alg.getParameterDescriptions()
self.setSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setSpacing(5)
self.verticalLayout.setMargin(20)
2014-07-02 07:46:03 +02:00
hLayout = QtGui.QHBoxLayout()
hLayout.setSpacing(5)
hLayout.setMargin(0)
descriptionLabel = QtGui.QLabel("Description")
self.descriptionBox = QtGui.QLineEdit()
self.descriptionBox.setText(self._alg.name)
hLayout.addWidget(descriptionLabel)
hLayout.addWidget(self.descriptionBox)
self.verticalLayout.addLayout(hLayout)
line = QtGui.QFrame()
line.setFrameShape(QtGui.QFrame.HLine)
line.setFrameShadow(QtGui.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 = 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
if isinstance(output, (OutputRaster, OutputVector, OutputTable,
OutputHTML, OutputFile, OutputDirectory)):
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
label = QtGui.QLabel(' ')
2013-02-03 10:26:43 +01:00
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
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 = 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)
self.paramPanel = QtGui.QWidget()
self.paramPanel.setLayout(self.verticalLayout)
2012-12-10 00:12:07 +01:00
self.scrollArea = QtGui.QScrollArea()
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()
2014-04-19 22:04:24 +02:00
2012-09-15 18:25:25 +03:00
html = None
url = None
2012-09-15 18:25:25 +03:00
try:
isText, help = self._alg.help()
2014-04-19 22:04:24 +02:00
if help is not None:
if isText:
html = help;
else:
2014-04-19 22:04:24 +02:00
url = QtCore.QUrl(help)
2012-09-15 18:25:25 +03:00
else:
html = '<h2>Sorry, no help is available for this \
algorithm.</h2>'
2012-09-15 18:25:25 +03:00
except WrongHelpFileException, e:
2014-04-19 22:04:24 +02:00
html = e.args[0]
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)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL('accepted()'),
self.okPressed)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL('rejected()'),
self.cancelPressed)
2012-09-15 18:25:25 +03:00
QtCore.QMetaObject.connectSlotsByName(self)
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 = QtGui.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 = QtGui.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 = QtGui.QComboBox()
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 = QtGui.QComboBox()
item.addItem('Yes')
item.addItem('No')
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 = 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.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 = QtGui.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 = QtGui.QComboBox()
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 = QtGui.QComboBox()
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 = QtGui.QComboBox()
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 = QtGui.QComboBox()
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 = QtGui.QLineEdit()
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 = 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)
2014-07-02 07:46:03 +02:00
for i, output in visibleOutputs:
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)
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] = Output(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()