QGIS API Documentation 3.29.0-Master (006c3c0232)
qgsfieldexpressionwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfieldexpressionwidget.h
3 --------------------------------------
4 Date : 01.04.2014
5 Copyright : (C) 2014 Denis Rouzaud
6 Email : [email protected]om
7***************************************************************************
8* *
9* This program is free software; you can redistribute it and/or modify *
10* it under the terms of the GNU General Public License as published by *
11* the Free Software Foundation; either version 2 of the License, or *
12* (at your option) any later version. *
13* *
14***************************************************************************/
15
16#ifndef QGSFIELDEXPRESSIONWIDGET_H
17#define QGSFIELDEXPRESSIONWIDGET_H
18
19#include <QColor>
20#include <QComboBox>
21#include <QToolButton>
22#include <QWidget>
23#include <memory>
24
25#include "qgis_gui.h"
26#include "qgis_sip.h"
27#include "qgsdistancearea.h"
29#include "qgsfieldproxymodel.h"
30
31
32class QgsMapLayer;
33class QgsVectorLayer;
35
36
46class GUI_EXPORT QgsFieldExpressionWidget : public QWidget
47{
48 Q_OBJECT
49 Q_PROPERTY( QString expressionDialogTitle READ expressionDialogTitle WRITE setExpressionDialogTitle )
50 Q_PROPERTY( QgsFieldProxyModel::Filters filters READ filters WRITE setFilters )
51 Q_PROPERTY( bool allowEmptyFieldName READ allowEmptyFieldName WRITE setAllowEmptyFieldName )
52 Q_PROPERTY( bool allowEvalErrors READ allowEvalErrors WRITE setAllowEvalErrors NOTIFY allowEvalErrorsChanged )
53
54 public:
55
59 explicit QgsFieldExpressionWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr );
60
62 void setExpressionDialogTitle( const QString &title );
63
71 void appendScope( QgsExpressionContextScope *scope SIP_TRANSFER );
72
74 const QString expressionDialogTitle() { return mExpressionDialogTitle; }
75
77 void setFilters( QgsFieldProxyModel::Filters filters );
78
84 void setAllowEmptyFieldName( bool allowEmpty );
85
91 bool allowEmptyFieldName() const;
92
93 void setLeftHandButtonStyle( bool isLeft );
94
96 QgsFieldProxyModel::Filters filters() const { return mFieldProxyModel->filters(); }
97
99 void setGeomCalculator( const QgsDistanceArea &da );
100
106 QString currentField( bool *isExpression = nullptr, bool *isValid = nullptr ) const;
107
111 bool isValidExpression( QString *expressionError = nullptr ) const;
112
116 bool isExpression() const;
117
121 QString currentText() const;
122
129 QString asExpression() const;
130
140 QString expression() const;
141
146 QgsVectorLayer *layer() const;
147
155 void registerExpressionContextGenerator( const QgsExpressionContextGenerator *generator );
156
163 bool allowEvalErrors() const;
164
171 void setAllowEvalErrors( bool allowEvalErrors );
172
173 signals:
175 void fieldChanged( const QString &fieldName );
176
178 void fieldChanged( const QString &fieldName, bool isValid );
179
187
188 public slots:
189
194 void setLayer( QgsMapLayer *layer );
195
197 void setRow( int row ) { mCombo->setCurrentIndex( row ); }
198
200 void setField( const QString &fieldName );
201
206 void setFields( const QgsFields &fields );
207
214 void setExpression( const QString &expression );
215
216 protected slots:
218 void editExpression();
219
221 void expressionEdited( const QString &expression );
222
224 void expressionEditingFinished();
225
226 void currentFieldChanged();
227
233 void updateLineEditStyle( const QString &expression = QString() );
234
235 bool isExpressionValid( const QString &expressionStr );
236
237 protected:
238 void changeEvent( QEvent *event ) override;
239
240 bool eventFilter( QObject *watched, QEvent *event ) override;
241
242 private slots:
243 void reloadLayer();
244
245 void beforeResetModel();
246 void afterResetModel();
247
248 private:
249 QComboBox *mCombo = nullptr;
250 QToolButton *mButton = nullptr;
251 QgsFieldProxyModel *mFieldProxyModel = nullptr;
252 QString mExpressionDialogTitle;
253 std::shared_ptr<const QgsDistanceArea> mDistanceArea;
254 QgsExpressionContext mExpressionContext;
255 const QgsExpressionContextGenerator *mExpressionContextGenerator = nullptr;
256 QString mBackupExpression;
257 bool mAllowEvalErrors = false;
258
259 friend class TestQgsFieldExpressionWidget;
260};
261
262#endif // QGSFIELDEXPRESSIONWIDGET_H
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
Abstract interface for generating an expression context.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
The QgsFieldExpressionWidget class reates a widget to choose fields and edit expressions It contains ...
const QString expressionDialogTitle()
Returns the title used for the expression dialog.
QgsFieldProxyModel::Filters filters() const
currently used filter on list of fields
void setRow(int row)
sets the current row in the widget
void fieldChanged(const QString &fieldName, bool isValid)
fieldChanged signal with indication of the validity of the expression
void fieldChanged(const QString &fieldName)
Emitted when the currently selected field changes.
void allowEvalErrorsChanged()
Allow accepting expressions with evaluation errors.
The QgsFieldProxyModel class provides an easy to use model to display the list of fields of a layer.
Container of fields for a vector layer.
Definition: qgsfields.h:45
Base class for all map layer types.
Definition: qgsmaplayer.h:73
Represents a vector layer which manages a vector based data sets.
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_TRANSFER
Definition: qgis_sip.h:36