From dda667023a6cdedb813b1926f0c3d79276255ba3 Mon Sep 17 00:00:00 2001 From: "arnaud.morvan@camptocamp.com" Date: Thu, 9 Feb 2017 16:06:34 +0100 Subject: [PATCH] [processing] Add class ExpressionEnabledWidgetWrapper --- python/plugins/processing/gui/wrappers.py | 68 +++++++++++++++++++---- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/python/plugins/processing/gui/wrappers.py b/python/plugins/processing/gui/wrappers.py index 83bab557c6c..8b318721b74 100644 --- a/python/plugins/processing/gui/wrappers.py +++ b/python/plugins/processing/gui/wrappers.py @@ -32,16 +32,34 @@ import locale import os from functools import cmp_to_key -from qgis.core import QgsCoordinateReferenceSystem, QgsApplication, QgsWkbTypes, QgsMapLayerProxyModel -from qgis.PyQt.QtWidgets import QCheckBox, QComboBox, QLineEdit, QPlainTextEdit, QWidget, QHBoxLayout, QToolButton, QFileDialog -from qgis.gui import (QgsFieldExpressionWidget, - QgsExpressionLineEdit, - QgsProjectionSelectionWidget, - QgsGenericProjectionSelector, - QgsFieldComboBox, - QgsFieldProxyModel, - QgsMapLayerComboBox - ) +from qgis.core import ( + QgsApplication, + QgsCoordinateReferenceSystem, + QgsExpression, + QgsMapLayerProxyModel, + QgsWkbTypes, +) +from qgis.PyQt.QtWidgets import ( + QCheckBox, + QComboBox, + QDialog, + QFileDialog, + QHBoxLayout, + QLineEdit, + QPlainTextEdit, + QToolButton, + QWidget, +) +from qgis.gui import ( + QgsExpressionLineEdit, + QgsExpressionBuilderDialog, + QgsFieldComboBox, + QgsFieldExpressionWidget, + QgsFieldProxyModel, + QgsGenericProjectionSelector, + QgsMapLayerComboBox, + QgsProjectionSelectionWidget, +) from qgis.PyQt.QtCore import pyqtSignal, QObject, QVariant, QSettings from processing.gui.NumberInputPanel import NumberInputPanel, ModellerNumberInputPanel @@ -175,6 +193,36 @@ class WidgetWrapper(QObject): return filename, selected_filter +class ExpressionEnabledWidgetWrapper(WidgetWrapper): + + def createWidget(self, basewidget): + expr_button = QToolButton() + expr_button.clicked.connect(self.showExpressionsBuilder) + expr_button.setText('...') + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(basewidget) + layout.addWidget(expr_button) + + widget = QWidget() + widget.setLayout(layout) + + return widget + + def showExpressionsBuilder(self): + context = self.param.expressionContext() + value = self.value() + if not isinstance(value, str): + value = '' + dlg = QgsExpressionBuilderDialog(None, value, self.widget, 'generic', context) + dlg.setWindowTitle(self.tr('Expression based input')) + if dlg.exec_() == QDialog.Accepted: + exp = QgsExpression(dlg.expressionText()) + if not exp.hasParserError(): + self.setValue(dlg.expressionText()) + + class BasicWidgetWrapper(WidgetWrapper): def createWidget(self):