[sextante] improved handling of ParameterCrs

This commit is contained in:
Victor Olaya 2013-02-23 16:18:22 +01:00
parent 7e1f58fca9
commit 10999cfa0e
4 changed files with 28 additions and 7 deletions

View File

@ -29,7 +29,7 @@ from sextante.gui.CrsSelectionDialog import CrsSelectionDialog
class CrsSelectionPanel(QtGui.QWidget):
def __init__(self, default):
super(CrsSelectionPanel, self).__init__(None)
super(CrsSelectionPanel, self).__init__(None)
self.authid = default
self.horizontalLayout = QtGui.QHBoxLayout(self)
self.horizontalLayout.setSpacing(2)
@ -44,6 +44,10 @@ class CrsSelectionPanel(QtGui.QWidget):
self.horizontalLayout.addWidget(self.pushButton)
self.setLayout(self.horizontalLayout)
self.setText()
def setAuthid(self, authid):
self.authid = authid
self.setText()
def showSelectionDialog(self):
dialog = CrsSelectionDialog()
@ -53,7 +57,8 @@ class CrsSelectionPanel(QtGui.QWidget):
self.setText()
def setText(self):
self.text.setText(str(self.authid))
if self.authid is not None:
self.text.setText(str(self.authid))
def getValue(self):
return self.authid

View File

@ -128,7 +128,6 @@ class ModelerAlgorithm(GeoAlgorithm):
elif line.startswith("VALUE:"):
valueLine = line[len("VALUE:"):]
tokens = valueLine.split("===")
self.paramValues[tokens[0]] = tokens[1].replace(ModelerAlgorithm.LINE_BREAK_STRING, '\n')
elif line.startswith("NAME:"):
self.name = line[len("NAME:"):]
@ -221,7 +220,7 @@ class ModelerAlgorithm(GeoAlgorithm):
for paramValues in self.algParameters:
index += 1
newValues = []
for name, value in paramValues:
for name, value in paramValues[index]:
if value:
if value.alg > index:
newValues[name] = AlgorithmAndParameter(value.alg - 1, value.param, value.algName, value.paramName)

View File

@ -16,7 +16,7 @@
* *
***************************************************************************
"""
from sextante.modeler.MultilineTextPanel import MultilineTextPanel
__author__ = 'Victor Olaya'
__date__ = 'August 2012'
__copyright__ = '(C) 2012, Victor Olaya'
@ -26,6 +26,8 @@ __revision__ = '$Format:%H$'
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore, QtGui, QtWebKit
from sextante.modeler.MultilineTextPanel import MultilineTextPanel
from sextante.gui.CrsSelectionPanel import CrsSelectionPanel
from sextante.parameters.ParameterCrs import ParameterCrs
from sextante.outputs.OutputString import OutputString
from sextante.parameters.ParameterRaster import ParameterRaster
@ -437,6 +439,8 @@ class ModelerParametersDialog(QtGui.QDialog):
for n in numbers:
item.addItem(n.name(), n)
item.setEditText(str(param.default))
elif isinstance(param, ParameterCrs):
item = CrsSelectionPanel(param.default)
elif isinstance(param, ParameterExtent):
item = QtGui.QComboBox()
item.setEditable(True)
@ -548,7 +552,7 @@ class ModelerParametersDialog(QtGui.QDialog):
self.setComboBoxValue(widget, value, param)
elif isinstance(param, ParameterCrs):
value = self.model.getValueFromAlgorithmAndParameter(value)
widget.setText(unicode(value))
widget.setAuthid(value)
elif isinstance(param, ParameterFixedTable):
pass
elif isinstance(param, ParameterMultipleInput):
@ -766,6 +770,16 @@ class ModelerParametersDialog(QtGui.QDialog):
self.params[param.name] = value
self.values[name] = str(widget.getValue())
return True
elif isinstance(param, ParameterCrs):
authid = widget.getValue()
if authid is None:
self.params[param.name] = None
else:
name = self.getSafeNameForHarcodedParameter(param)
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)
self.params[param.name] = value
self.values[name] = authid
return True
elif isinstance(param, ParameterFixedTable):
name = self.getSafeNameForHarcodedParameter(param)
value = AlgorithmAndParameter(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM, name)

View File

@ -37,6 +37,7 @@ class ParameterCrs(Parameter):
if value is None:
self.value = self.default
return True
#TODO: check it is a valid authid
self.value = str(value)
return True
@ -48,7 +49,9 @@ class ParameterCrs(Parameter):
"|" + str(self.default)
def deserialize(self, s):
tokens = s.split("|")
tokens = s.split("|")
if tokens[2]==str(None):
tokens[2] = None
return ParameterCrs(tokens[0], tokens[1], tokens[2])
def getAsScriptCode(self):