Skip to content

Commit a38c13d

Browse files
arnaud-morvanvolaya
authored andcommittedOct 5, 2016
Create FieldMappingWrapper
1 parent affc8f7 commit a38c13d

File tree

4 files changed

+40
-154
lines changed

4 files changed

+40
-154
lines changed
 

‎python/plugins/processing/algs/qgis/FieldsMapper.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
from processing.tools import dataobjects, vector
3838

3939
from .fieldsmapping import ParameterFieldsMapping
40-
from .ui.FieldsMapperDialogs import (FieldsMapperParametersDialog,
41-
FieldsMapperModelerParametersDialog)
4240

4341

4442
class FieldsMapper(GeoAlgorithm):
@@ -151,9 +149,3 @@ def processAlgorithm(self, progress):
151149
raise GeoAlgorithmExecutionException(
152150
self.tr('An error occurred while evaluating the calculation'
153151
' string:\n') + error)
154-
155-
def getCustomParametersDialog(self):
156-
return FieldsMapperParametersDialog(self)
157-
158-
def getCustomModelerParametersDialog(self, modelAlg, algName=None):
159-
return FieldsMapperModelerParametersDialog(self, modelAlg, algName)

‎python/plugins/processing/algs/qgis/fieldsmapping.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333

3434
class ParameterFieldsMapping(Parameter):
3535

36+
default_metadata = {
37+
'widget_wrapper': 'processing.algs.qgis.ui.FieldsMappingPanel.FieldsMappingWidgetWrapper'
38+
}
39+
3640
def __init__(self, name='', description='', parent=None):
3741
Parameter.__init__(self, name, description)
3842
self.parent = parent

‎python/plugins/processing/algs/qgis/ui/FieldsMapperDialogs.py

Lines changed: 0 additions & 143 deletions
This file was deleted.

‎python/plugins/processing/algs/qgis/ui/FieldsMappingPanel.py

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@
3131
from collections import OrderedDict
3232

3333
from qgis.PyQt import uic
34-
from qgis.PyQt.QtGui import QBrush, QIcon
34+
from qgis.PyQt.QtGui import QBrush, QIcon, QSpacerItem
3535
from qgis.PyQt.QtWidgets import QComboBox, QHeaderView, QLineEdit, QMessageBox, QSpinBox, QStyledItemDelegate
3636
from qgis.PyQt.QtCore import QItemSelectionModel, QAbstractTableModel, QModelIndex, QVariant, Qt, pyqtSlot
3737

38-
from qgis.core import QgsExpression, QgsExpressionContextUtils, QgsApplication
38+
from qgis.core import QgsExpression, QgsExpressionContextUtils, QgsApplication, QgsFeature
3939
from qgis.gui import QgsFieldExpressionWidget
4040

41+
from processing.gui.wrappers import WidgetWrapper, DIALOG_STANDARD, DIALOG_MODELER
4142
from processing.tools import dataobjects
4243

4344
pluginPath = os.path.dirname(__file__)
@@ -93,7 +94,7 @@ def testExpression(self, row):
9394
if self._layer is None:
9495
return
9596
context = QgsExpressionContextUtils.createFeatureBasedContext(QgsFeature(), self._layer.fields())
96-
for feature in dp.getFeatures():
97+
for feature in self._layer.getFeatures():
9798
context.setFeature(feature)
9899
expression.evaluate(context)
99100
if expression.hasEvalError():
@@ -473,3 +474,35 @@ def on_loadLayerFieldsButton_clicked(self, checked=False):
473474
if layer is None:
474475
return
475476
self.model.loadLayerFields(layer)
477+
478+
479+
class FieldsMappingWidgetWrapper(WidgetWrapper):
480+
481+
def createWidget(self):
482+
return FieldsMappingPanel()
483+
484+
def postInitialize(self, wrappers):
485+
for wrapper in wrappers:
486+
if wrapper.param.name == self.param.parent:
487+
wrapper.widgetValueHasChanged.connect(self.parentLayerChanged)
488+
break
489+
layers = dataobjects.getTables()
490+
if len(layers) > 0:
491+
# as first item in combobox is already selected
492+
self.widget.setLayer(layers[0])
493+
494+
# remove exiting spacers to get FieldsMappingPanel fully expanded
495+
if self.dialogType in (DIALOG_STANDARD, DIALOG_MODELER):
496+
layout = self.widget.parent().layout()
497+
spacer = layout.itemAt(layout.count() - 1)
498+
if isinstance(spacer, QSpacerItem):
499+
layout.removeItem(spacer)
500+
501+
def parentLayerChanged(self):
502+
self.widget.setLayer(self.sender().value())
503+
504+
def setValue(self, value):
505+
self.widget.setValue(value)
506+
507+
def value(self):
508+
return self.widget.value()

0 commit comments

Comments
 (0)
Please sign in to comment.