diff --git a/python/plugins/processing/gui/wrappers.py b/python/plugins/processing/gui/wrappers.py index c518fe09a2a..134d8ef252d 100755 --- a/python/plugins/processing/gui/wrappers.py +++ b/python/plugins/processing/gui/wrappers.py @@ -901,6 +901,7 @@ class MapLayerWidgetWrapper(WidgetWrapper): self.combo.setCurrentIndex(self.combo.findText(filename)) else: self.combo.setEditText(filename) + self.widgetValueHasChanged.emit(self) def setValue(self, value): if value is None or value == NULL: @@ -918,6 +919,7 @@ class MapLayerWidgetWrapper(WidgetWrapper): self.widget.setText(value) else: self.setComboValue(value, combobox=self.combo) + self.widgetValueHasChanged.emit(self) def value(self): if self.dialogType == DIALOG_STANDARD: @@ -962,6 +964,7 @@ class RasterWidgetWrapper(MapLayerWidgetWrapper): self.combo.setCurrentIndex(self.combo.findText(filename)) else: self.combo.setEditText(filename) + self.widgetValueHasChanged.emit(self) class EnumWidgetWrapper(WidgetWrapper): @@ -1136,6 +1139,7 @@ class FeatureSourceWidgetWrapper(WidgetWrapper): self.combo.setCurrentIndex(self.combo.findText(filename)) else: self.combo.setEditText(filename) + self.widgetValueHasChanged.emit(self) def setValue(self, value): if value is None or value == NULL: @@ -1153,6 +1157,7 @@ class FeatureSourceWidgetWrapper(WidgetWrapper): self.widget.setValue(value) else: self.setComboValue(value, combobox=self.combo) + self.widgetValueHasChanged.emit(self) def value(self): if self.dialogType == DIALOG_STANDARD: @@ -1280,6 +1285,10 @@ class StringWidgetWrapper(WidgetWrapper): class ExpressionWidgetWrapper(WidgetWrapper): + def __init__(self, param, dialog, row=0, col=0, **kwargs): + super().__init__(param, dialog, row, col, **kwargs) + self.context = dataobjects.createContext() + def createWidget(self): if self.dialogType in (DIALOG_STANDARD, DIALOG_BATCH): if self.param.parentLayerParameterName(): @@ -1312,11 +1321,10 @@ class ExpressionWidgetWrapper(WidgetWrapper): self.setLayer(wrapper.value()) def setLayer(self, layer): - context = dataobjects.createContext() if isinstance(layer, QgsProcessingFeatureSourceDefinition): - layer, ok = layer.source.valueAsString(context.expressionContext()) + layer, ok = layer.source.valueAsString(self.context.expressionContext()) if isinstance(layer, str): - layer = QgsProcessingUtils.mapLayerFromString(layer, context) + layer = QgsProcessingUtils.mapLayerFromString(layer, self.context) self.widget.setLayer(layer) def setValue(self, value): @@ -1433,6 +1441,7 @@ class VectorLayerWidgetWrapper(WidgetWrapper): self.combo.setCurrentIndex(self.combo.findText(filename)) else: self.combo.setEditText(filename) + self.widgetValueHasChanged.emit(self) def setValue(self, value): if value is None or value == NULL: @@ -1450,6 +1459,7 @@ class VectorLayerWidgetWrapper(WidgetWrapper): return self.widget.setText(value) else: self.setComboValue(value, combobox=self.combo) + self.widgetValueHasChanged.emit(self) def value(self): if self.dialogType == DIALOG_STANDARD: @@ -1473,6 +1483,10 @@ class VectorLayerWidgetWrapper(WidgetWrapper): class TableFieldWidgetWrapper(WidgetWrapper): NOT_SET = '[Not set]' + def __init__(self, param, dialog, row=0, col=0, **kwargs): + super().__init__(param, dialog, row, col, **kwargs) + self.context = dataobjects.createContext() + def createWidget(self): self._layer = None @@ -1516,11 +1530,10 @@ class TableFieldWidgetWrapper(WidgetWrapper): self.setLayer(wrapper.value()) def setLayer(self, layer): - context = dataobjects.createContext() if isinstance(layer, QgsProcessingFeatureSourceDefinition): - layer, ok = layer.source.valueAsString(context.expressionContext()) + layer, ok = layer.source.valueAsString(self.context.expressionContext()) if isinstance(layer, str): - layer = QgsProcessingUtils.mapLayerFromString(layer, context) + layer = QgsProcessingUtils.mapLayerFromString(layer, self.context) self._layer = layer self.refreshItems() @@ -1595,6 +1608,10 @@ class TableFieldWidgetWrapper(WidgetWrapper): class BandWidgetWrapper(WidgetWrapper): NOT_SET = '[Not set]' + def __init__(self, param, dialog, row=0, col=0, **kwargs): + super().__init__(param, dialog, row, col, **kwargs) + self.context = dataobjects.createContext() + def createWidget(self): self._layer = None @@ -1626,11 +1643,10 @@ class BandWidgetWrapper(WidgetWrapper): self.setLayer(wrapper.value()) def setLayer(self, layer): - context = dataobjects.createContext() if isinstance(layer, QgsProcessingParameterRasterLayer): - layer, ok = layer.source.valueAsString(context.expressionContext()) + layer, ok = layer.source.valueAsString(self.context.expressionContext()) if isinstance(layer, str): - layer = QgsProcessingUtils.mapLayerFromString(layer, context) + layer = QgsProcessingUtils.mapLayerFromString(layer, self.context) self._layer = layer self.refreshItems()