|
31 | 31 | from collections import OrderedDict
|
32 | 32 |
|
33 | 33 | from qgis.PyQt import uic
|
34 |
| -from qgis.PyQt.QtGui import QBrush, QIcon |
| 34 | +from qgis.PyQt.QtGui import QBrush, QIcon, QSpacerItem |
35 | 35 | from qgis.PyQt.QtWidgets import QComboBox, QHeaderView, QLineEdit, QMessageBox, QSpinBox, QStyledItemDelegate
|
36 | 36 | from qgis.PyQt.QtCore import QItemSelectionModel, QAbstractTableModel, QModelIndex, QVariant, Qt, pyqtSlot
|
37 | 37 |
|
38 |
| -from qgis.core import QgsExpression, QgsExpressionContextUtils, QgsApplication |
| 38 | +from qgis.core import QgsExpression, QgsExpressionContextUtils, QgsApplication, QgsFeature |
39 | 39 | from qgis.gui import QgsFieldExpressionWidget
|
40 | 40 |
|
| 41 | +from processing.gui.wrappers import WidgetWrapper, DIALOG_STANDARD, DIALOG_MODELER |
41 | 42 | from processing.tools import dataobjects
|
42 | 43 |
|
43 | 44 | pluginPath = os.path.dirname(__file__)
|
@@ -93,7 +94,7 @@ def testExpression(self, row):
|
93 | 94 | if self._layer is None:
|
94 | 95 | return
|
95 | 96 | context = QgsExpressionContextUtils.createFeatureBasedContext(QgsFeature(), self._layer.fields())
|
96 |
| - for feature in dp.getFeatures(): |
| 97 | + for feature in self._layer.getFeatures(): |
97 | 98 | context.setFeature(feature)
|
98 | 99 | expression.evaluate(context)
|
99 | 100 | if expression.hasEvalError():
|
@@ -473,3 +474,35 @@ def on_loadLayerFieldsButton_clicked(self, checked=False):
|
473 | 474 | if layer is None:
|
474 | 475 | return
|
475 | 476 | 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