28
28
import os
29
29
30
30
from qgis .PyQt import uic
31
- from qgis .PyQt .QtWidgets import QTreeWidgetItem
32
- from qgis .PyQt .QtCore import Qt
33
31
34
- from qgis .core import (QgsApplication ,
35
- QgsExpressionContextScope ,
32
+ from qgis .core import (QgsExpressionContextScope ,
36
33
QgsProcessingParameterString ,
37
34
QgsProcessingParameterNumber ,
38
35
QgsExpression ,
39
- QgsProcessingModelChildParameterSource ,
40
- QgsProcessingParameterFile ,
41
- QgsProcessingParameterField ,
42
- QgsProcessingOutputString ,
43
- QgsProcessingParameterExpression ,
44
- QgsProcessingOutputFile )
36
+ QgsProcessingModelChildParameterSource )
45
37
46
38
from qgis .gui import QgsFieldExpressionWidget
47
39
@@ -82,7 +74,7 @@ def __init__(self, dialog):
82
74
83
75
def insert (self ):
84
76
if self .mExpressionWidget .currentText ():
85
- exp = '[% {} %]' .format (self .mExpressionWidget .currentText ())
77
+ exp = '[%{} %]' .format (self .mExpressionWidget .currentText ())
86
78
self .mText .insertPlainText (exp )
87
79
88
80
def setValue (self , value ):
@@ -95,6 +87,17 @@ def setValue(self, value):
95
87
and v .source () == QgsProcessingModelChildParameterSource .ExpressionText :
96
88
text = v .expressionText ()
97
89
90
+ # replace parameter's name by expression (diverging after model save)
91
+ names = QgsExpression .referencedVariables (text )
92
+
93
+ strings = self .dialog .getAvailableValuesOfType (
94
+ [QgsProcessingParameterString , QgsProcessingParameterNumber ], [])
95
+ model_params = [(self .dialog .resolveValueDescription (s ), s ) for s in strings ]
96
+
97
+ for k , v in model_params :
98
+ if v .parameterName () in names :
99
+ text = text .replace ('[% @{} %]' .format (v .parameterName ()), '[% @{} %]' .format (k ))
100
+
98
101
self .mText .setPlainText (text )
99
102
100
103
def value (self ):
@@ -113,8 +116,19 @@ def _expressionValues(self, text):
113
116
model_params = [(self .dialog .resolveValueDescription (s ), s ) for s in strings ]
114
117
115
118
variables = QgsExpression .referencedVariables (text )
119
+
120
+ # replace description by parameter's name (diverging after model save)
121
+ descriptions = QgsExpression .referencedVariables (text )
122
+
123
+ for k , v in model_params :
124
+ if k in descriptions :
125
+ text = text .replace ('[% @{} %]' .format (k ), '[% @{} %]' .format (v .parameterName ()))
126
+
127
+ src = QgsProcessingModelChildParameterSource .fromExpressionText (text )
128
+
129
+ # add parameters currently used by the expression
116
130
expression_values = []
117
- expression_values .append (QgsProcessingModelChildParameterSource . fromExpressionText ( text ) )
131
+ expression_values .append (src )
118
132
119
133
for k , v in model_params :
120
134
if k in variables :
0 commit comments