|
45 | 45 | QgsSettings,
|
46 | 46 | QgsProject,
|
47 | 47 | QgsMapLayer,
|
| 48 | + QgsVectorLayer, |
48 | 49 | QgsProcessing,
|
49 | 50 | QgsProcessingUtils,
|
50 | 51 | QgsProcessingParameterDefinition,
|
|
78 | 79 | QgsProcessingModelChildParameterSource,
|
79 | 80 | QgsProcessingModelAlgorithm,
|
80 | 81 | QgsRasterDataProvider,
|
81 |
| - NULL) |
| 82 | + NULL, |
| 83 | + Qgis) |
82 | 84 |
|
83 | 85 | from qgis.PyQt.QtWidgets import (
|
84 | 86 | QCheckBox,
|
@@ -1049,6 +1051,7 @@ class FeatureSourceWidgetWrapper(WidgetWrapper):
|
1049 | 1051 | NOT_SELECTED = '[Not selected]'
|
1050 | 1052 |
|
1051 | 1053 | def createWidget(self):
|
| 1054 | + self.fileBasedLayers = {} |
1052 | 1055 | if self.dialogType == DIALOG_STANDARD:
|
1053 | 1056 | widget = QWidget()
|
1054 | 1057 | layout = QHBoxLayout()
|
@@ -1391,6 +1394,7 @@ class VectorLayerWidgetWrapper(WidgetWrapper):
|
1391 | 1394 | NOT_SELECTED = '[Not selected]'
|
1392 | 1395 |
|
1393 | 1396 | def createWidget(self):
|
| 1397 | + self.fileBasedLayers = {} |
1394 | 1398 | if self.dialogType == DIALOG_STANDARD:
|
1395 | 1399 | widget = QWidget()
|
1396 | 1400 | layout = QHBoxLayout()
|
@@ -1576,14 +1580,26 @@ def postInitialize(self, wrappers):
|
1576 | 1580 | break
|
1577 | 1581 |
|
1578 | 1582 | def parentValueChanged(self, wrapper):
|
1579 |
| - self.setLayer(wrapper.parameterValue()) |
| 1583 | + value = wrapper.parameterValue() |
| 1584 | + if value in wrapper.fileBasedLayers: |
| 1585 | + self.setLayer(wrapper.fileBasedLayers[value]) |
| 1586 | + else: |
| 1587 | + self.setLayer(value) |
| 1588 | + wrapper.fileBasedLayers[value] = self._layer |
1580 | 1589 |
|
1581 | 1590 | def setLayer(self, layer):
|
1582 | 1591 | if isinstance(layer, QgsProcessingFeatureSourceDefinition):
|
1583 | 1592 | layer, ok = layer.source.valueAsString(self.context.expressionContext())
|
1584 | 1593 | if isinstance(layer, str):
|
1585 | 1594 | layer = QgsProcessingUtils.mapLayerFromString(layer, self.context)
|
| 1595 | + if not isinstance(layer, QgsVectorLayer) or not layer.isValid(): |
| 1596 | + self.dialog.messageBar().clearWidgets() |
| 1597 | + self.dialog.messageBar().pushMessage("", self.tr("Could not load selected layer/table. Dependent field could not be populated"), |
| 1598 | + level=Qgis.Warning, duration=5) |
| 1599 | + return |
| 1600 | + |
1586 | 1601 | self._layer = layer
|
| 1602 | + |
1587 | 1603 | self.refreshItems()
|
1588 | 1604 |
|
1589 | 1605 | def refreshItems(self):
|
|
0 commit comments