2828import os
2929
3030from qgis .PyQt import uic
31- from qgis .PyQt .QtWidgets import QTreeWidgetItem
32- from qgis .PyQt .QtCore import Qt
3331
34- from qgis .core import (QgsApplication ,
35- QgsExpressionContextScope ,
32+ from qgis .core import (QgsExpressionContextScope ,
3633 QgsProcessingParameterString ,
3734 QgsProcessingParameterNumber ,
3835 QgsExpression ,
39- QgsProcessingModelChildParameterSource ,
40- QgsProcessingParameterFile ,
41- QgsProcessingParameterField ,
42- QgsProcessingOutputString ,
43- QgsProcessingParameterExpression ,
44- QgsProcessingOutputFile )
36+ QgsProcessingModelChildParameterSource )
4537
4638from qgis .gui import QgsFieldExpressionWidget
4739
@@ -82,7 +74,7 @@ def __init__(self, dialog):
8274
8375 def insert (self ):
8476 if self .mExpressionWidget .currentText ():
85- exp = '[% {} %]' .format (self .mExpressionWidget .currentText ())
77+ exp = '[%{} %]' .format (self .mExpressionWidget .currentText ())
8678 self .mText .insertPlainText (exp )
8779
8880 def setValue (self , value ):
@@ -95,6 +87,17 @@ def setValue(self, value):
9587 and v .source () == QgsProcessingModelChildParameterSource .ExpressionText :
9688 text = v .expressionText ()
9789
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+
98101 self .mText .setPlainText (text )
99102
100103 def value (self ):
@@ -113,8 +116,19 @@ def _expressionValues(self, text):
113116 model_params = [(self .dialog .resolveValueDescription (s ), s ) for s in strings ]
114117
115118 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
116130 expression_values = []
117- expression_values .append (QgsProcessingModelChildParameterSource . fromExpressionText ( text ) )
131+ expression_values .append (src )
118132
119133 for k , v in model_params :
120134 if k in variables :
0 commit comments