Improved parametertablefield with datatype options

git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@304 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
This commit is contained in:
volayaf 2012-07-21 12:23:38 +00:00
parent 8175f515d1
commit aa3d766b88
3 changed files with 38 additions and 17 deletions

View File

@ -6,7 +6,6 @@ from PyQt4.QtGui import *
from qgis.core import *
from sextante.parameters.ParameterVector import ParameterVector
from sextante.core.QGisLayers import QGisLayers
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from sextante.outputs.OutputVector import OutputVector
from sextante.ftools import ftools_utils
from sextante.core.SextanteLog import SextanteLog
@ -33,10 +32,10 @@ class Clip(GeoAlgorithm):
vlayerB = QGisLayers.getObjectFromUri(self.getParameterValue(Clip.INPUT2))
GEOS_EXCEPT = True
FEATURE_EXCEPT = True
vproviderA = self.vlayerA.dataProvider()
vproviderA = vlayerA.dataProvider()
allAttrsA = vproviderA.attributeIndexes()
vproviderA.select( allAttrsA )
vproviderB = self.vlayerB.dataProvider()
vproviderB = vlayerB.dataProvider()
allAttrsB = vproviderB.attributeIndexes()
vproviderB.select( allAttrsB )
# check for crs compatibility
@ -59,10 +58,10 @@ class Clip(GeoAlgorithm):
# there is selection in input layer
if useSelection:
nFeat = vlayerA.selectedFeatureCount()
selectionA = self.vlayerA.selectedFeatures()
selectionA = vlayerA.selectedFeatures()
# we have selection in overlay layer
if useSelection2:
selectionB = self.vlayerB.selectedFeaturesIds()
selectionB = vlayerB.selectedFeaturesIds()
for inFeatA in selectionA:
nElement += 1
progress.setPercentage(int(nElement/nFeat * 100))
@ -156,7 +155,7 @@ class Clip(GeoAlgorithm):
nFeat = vproviderA.featureCount()
# we have selection in overlay layer
if useSelection2:
selectionB = self.vlayerB.selectedFeaturesIds()
selectionB = vlayerB.selectedFeaturesIds()
while vproviderA.nextFeature( inFeatA ):
nElement += 1
progress.setPercentage(int(nElement/nFeat * 100))

View File

@ -1,4 +1,5 @@
import os
import locale
from PyQt4 import QtCore, QtGui
from sextante.gui.OutputSelectionPanel import OutputSelectionPanel
from sextante.core.QGisLayers import QGisLayers
@ -219,9 +220,7 @@ class ParametersPanel(QtGui.QWidget):
else:
layers = QGisLayers.getTables()
if len(layers)>0:
fields = self.getFields(layers[0])
for i in fields:
item.addItem(fields[i].name())
item.addItems(self.getFields(layers[0], param.datatype))
elif isinstance(param, ParameterSelection):
item = QtGui.QComboBox()
item.addItems(param.options)
@ -266,12 +265,26 @@ class ParametersPanel(QtGui.QWidget):
for child in children:
widget = self.valueItems[child]
widget.clear()
fields = self.getFields(layer)
for i in fields:
widget.addItem(fields[i].name())
widget.addItems(self.getFields(layer, self.alg.getParameterFromName(child).datatype))
def getFields(self, layer):
return layer.dataProvider().fields()
def getFields(self, layer, datatype):
fieldTypes = []
if datatype == ParameterTableField.DATA_TYPE_STRING:
fieldTypes = [QVariant.String]
elif datatype == ParameterTableField.DATA_TYPE_NUMBER:
fieldTypes = [QVariant.Int, QVariant.Double]
fieldNames = []
fieldMap = layer.pendingFields()
if len(fieldTypes) == 0:
for idx, field in fieldMap.iteritems():
if not field.name() in fieldNames:
fieldNames.append( unicode( field.name() ) )
else:
for idx, field in fieldMap.iteritems():
if field.type() in fieldTypes and not field.name() in fieldNames:
fieldNames.append( unicode( field.name() ) )
return sorted( fieldNames, cmp=locale.strcoll )
def somethingDependsOnThisParameter(self, parent):
for param in self.alg.parameters:

View File

@ -2,10 +2,15 @@ from sextante.parameters.Parameter import Parameter
class ParameterTableField(Parameter):
def __init__(self, name="", description="", parent=None):
DATA_TYPE_NUMBER = 0
DATA_TYPE_STRING = 1
DATA_TYPE_ANY = -1
def __init__(self, name="", description="", parent=None, datatype=-1):
Parameter.__init__(self, name, description)
self.parent = parent
self.value = None
self.datatype = datatype
def getValueAsCommandLineParameter(self):
return "\"" + str(self.value) + "\""
@ -15,11 +20,15 @@ class ParameterTableField(Parameter):
def serialize(self):
return self.__module__.split(".")[-1] + "|" + self.name + "|" + self.description +\
"|" + str(self.parent)
"|" + str(self.parent) + "|" + str(self.datatype)
def deserialize(self, s):
tokens = s.split("|")
return ParameterTableField(tokens[0], tokens[1], tokens[2])
if len(tokens) == 4:
return ParameterTableField(tokens[0], tokens[1], tokens[2], int(tokens[3]))
else:
return ParameterTableField(tokens[0], tokens[1], tokens[2])
def __str__(self):
return self.name + " <" + self.__module__.split(".")[-1] +" from " + self.value + ">"