Processing - Adapt RefactorFields to work on tables as well as vector layers

This commit is contained in:
arnaud.morvan@camptocamp.com 2016-04-28 14:14:01 +02:00
parent afbe914114
commit 7847f971d4
3 changed files with 17 additions and 11 deletions

View File

@ -30,7 +30,7 @@ from qgis.core import QgsField, QgsExpression, QgsExpressionContext, QgsExpressi
from qgis.utils import iface
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from processing.core.parameters import ParameterVector
from processing.core.parameters import ParameterTable
from processing.core.outputs import OutputVector
from processing.tools import dataobjects, vector
@ -52,13 +52,15 @@ class FieldsMapper(GeoAlgorithm):
def defineCharacteristics(self):
self.name, self.i18n_name = self.trAlgorithm('Refactor fields')
self.group, self.i18n_group = self.trAlgorithm('Vector table tools')
self.addParameter(ParameterVector(self.INPUT_LAYER,
self.tr('Input layer'),
[ParameterVector.VECTOR_TYPE_ANY], False))
self.addParameter(ParameterTable(self.INPUT_LAYER,
self.tr('Input layer'),
False))
self.addParameter(ParameterFieldsMapping(self.FIELDS_MAPPING,
self.tr('Fields mapping'), self.INPUT_LAYER))
self.tr('Fields mapping'),
self.INPUT_LAYER))
self.addOutput(OutputVector(self.OUTPUT_LAYER,
self.tr('Refactored')))
self.tr('Refactored'),
base_input=self.INPUT_LAYER))
def processAlgorithm(self, progress):
layer = self.getParameterValue(self.INPUT_LAYER)
@ -120,7 +122,9 @@ class FieldsMapper(GeoAlgorithm):
for current, inFeat in enumerate(features):
rownum = current + 1
outFeat.setGeometry(inFeat.geometry())
geometry = inFeat.geometry()
if geometry is not None:
outFeat.setGeometry(geometry)
attrs = []
for i in xrange(0, len(mapping)):

View File

@ -56,7 +56,8 @@ class FieldsMapperParametersPanel(ParametersPanel):
else:
items = []
self.dependentItems[param.parent] = items
items.append(param.name)
items.append(param)
parent = self.alg.getParameterFromName(param.parent)
if isinstance(parent, ParameterVector):
layers = dataobjects.getVectorLayers(parent.shapetype)
@ -76,16 +77,17 @@ class FieldsMapperParametersPanel(ParametersPanel):
layer = sender.itemData(sender.currentIndex())
children = self.dependentItems[sender.name]
for child in children:
widget = self.valueItems[child]
widget = self.valueItems[child.name]
if isinstance(widget, FieldsMappingPanel):
widget.setLayer(layer)
ParametersPanel.updateDependentFields(self)
def somethingDependsOnThisParameter(self, parent):
for param in self.alg.parameters:
if isinstance(param, ParameterFieldsMapping):
if param.parent == parent.name:
return True
return False
return ParametersPanel.somethingDependsOnThisParameter(self, parent)
class FieldsMapperParametersDialog(AlgorithmDialog):

View File

@ -463,7 +463,7 @@ class FieldsMappingPanel(BASE, WIDGET):
self.model.index(end, self.model.columnCount() - 1))
def updateLayerCombo(self):
layers = dataobjects.getVectorLayers()
layers = dataobjects.getTables()
layers.sort(key=lambda lay: lay.name())
for layer in layers:
self.layerCombo.addItem(layer.name(), layer)