Skip to content

Commit aa3d766

Browse files
author
volayaf
committed
fixed #6076
Improved parametertablefield with datatype options git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@304 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent 8175f51 commit aa3d766

File tree

3 files changed

+38
-17
lines changed

3 files changed

+38
-17
lines changed

src/sextante/ftools/Clip.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from qgis.core import *
77
from sextante.parameters.ParameterVector import ParameterVector
88
from sextante.core.QGisLayers import QGisLayers
9-
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
109
from sextante.outputs.OutputVector import OutputVector
1110
from sextante.ftools import ftools_utils
1211
from sextante.core.SextanteLog import SextanteLog
@@ -33,10 +32,10 @@ def processAlgorithm(self, progress):
3332
vlayerB = QGisLayers.getObjectFromUri(self.getParameterValue(Clip.INPUT2))
3433
GEOS_EXCEPT = True
3534
FEATURE_EXCEPT = True
36-
vproviderA = self.vlayerA.dataProvider()
35+
vproviderA = vlayerA.dataProvider()
3736
allAttrsA = vproviderA.attributeIndexes()
3837
vproviderA.select( allAttrsA )
39-
vproviderB = self.vlayerB.dataProvider()
38+
vproviderB = vlayerB.dataProvider()
4039
allAttrsB = vproviderB.attributeIndexes()
4140
vproviderB.select( allAttrsB )
4241
# check for crs compatibility
@@ -59,10 +58,10 @@ def processAlgorithm(self, progress):
5958
# there is selection in input layer
6059
if useSelection:
6160
nFeat = vlayerA.selectedFeatureCount()
62-
selectionA = self.vlayerA.selectedFeatures()
61+
selectionA = vlayerA.selectedFeatures()
6362
# we have selection in overlay layer
6463
if useSelection2:
65-
selectionB = self.vlayerB.selectedFeaturesIds()
64+
selectionB = vlayerB.selectedFeaturesIds()
6665
for inFeatA in selectionA:
6766
nElement += 1
6867
progress.setPercentage(int(nElement/nFeat * 100))
@@ -156,7 +155,7 @@ def processAlgorithm(self, progress):
156155
nFeat = vproviderA.featureCount()
157156
# we have selection in overlay layer
158157
if useSelection2:
159-
selectionB = self.vlayerB.selectedFeaturesIds()
158+
selectionB = vlayerB.selectedFeaturesIds()
160159
while vproviderA.nextFeature( inFeatA ):
161160
nElement += 1
162161
progress.setPercentage(int(nElement/nFeat * 100))

src/sextante/gui/ParametersPanel.py

+21-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import locale
23
from PyQt4 import QtCore, QtGui
34
from sextante.gui.OutputSelectionPanel import OutputSelectionPanel
45
from sextante.core.QGisLayers import QGisLayers
@@ -219,9 +220,7 @@ def getWidgetFromParameter(self, param):
219220
else:
220221
layers = QGisLayers.getTables()
221222
if len(layers)>0:
222-
fields = self.getFields(layers[0])
223-
for i in fields:
224-
item.addItem(fields[i].name())
223+
item.addItems(self.getFields(layers[0], param.datatype))
225224
elif isinstance(param, ParameterSelection):
226225
item = QtGui.QComboBox()
227226
item.addItems(param.options)
@@ -266,12 +265,26 @@ def updateDependentFields(self):
266265
for child in children:
267266
widget = self.valueItems[child]
268267
widget.clear()
269-
fields = self.getFields(layer)
270-
for i in fields:
271-
widget.addItem(fields[i].name())
268+
widget.addItems(self.getFields(layer, self.alg.getParameterFromName(child).datatype))
272269

273-
def getFields(self, layer):
274-
return layer.dataProvider().fields()
270+
def getFields(self, layer, datatype):
271+
fieldTypes = []
272+
if datatype == ParameterTableField.DATA_TYPE_STRING:
273+
fieldTypes = [QVariant.String]
274+
elif datatype == ParameterTableField.DATA_TYPE_NUMBER:
275+
fieldTypes = [QVariant.Int, QVariant.Double]
276+
277+
fieldNames = []
278+
fieldMap = layer.pendingFields()
279+
if len(fieldTypes) == 0:
280+
for idx, field in fieldMap.iteritems():
281+
if not field.name() in fieldNames:
282+
fieldNames.append( unicode( field.name() ) )
283+
else:
284+
for idx, field in fieldMap.iteritems():
285+
if field.type() in fieldTypes and not field.name() in fieldNames:
286+
fieldNames.append( unicode( field.name() ) )
287+
return sorted( fieldNames, cmp=locale.strcoll )
275288

276289
def somethingDependsOnThisParameter(self, parent):
277290
for param in self.alg.parameters:

src/sextante/parameters/ParameterTableField.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22

33
class ParameterTableField(Parameter):
44

5-
def __init__(self, name="", description="", parent=None):
5+
DATA_TYPE_NUMBER = 0
6+
DATA_TYPE_STRING = 1
7+
DATA_TYPE_ANY = -1
8+
9+
def __init__(self, name="", description="", parent=None, datatype=-1):
610
Parameter.__init__(self, name, description)
711
self.parent = parent
812
self.value = None
13+
self.datatype = datatype
914

1015
def getValueAsCommandLineParameter(self):
1116
return "\"" + str(self.value) + "\""
@@ -15,11 +20,15 @@ def getAsScriptCode(self):
1520

1621
def serialize(self):
1722
return self.__module__.split(".")[-1] + "|" + self.name + "|" + self.description +\
18-
"|" + str(self.parent)
23+
"|" + str(self.parent) + "|" + str(self.datatype)
24+
1925

2026
def deserialize(self, s):
2127
tokens = s.split("|")
22-
return ParameterTableField(tokens[0], tokens[1], tokens[2])
28+
if len(tokens) == 4:
29+
return ParameterTableField(tokens[0], tokens[1], tokens[2], int(tokens[3]))
30+
else:
31+
return ParameterTableField(tokens[0], tokens[1], tokens[2])
2332

2433
def __str__(self):
2534
return self.name + " <" + self.__module__.split(".")[-1] +" from " + self.value + ">"

0 commit comments

Comments
 (0)