QGIS API Documentation 3.27.0-Master (1d7a28cfd2)
qgssearchwidgetwrapper.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssearchwidgetwrapper.h
3 --------------------------------------
4 Date : 31.5.2015
5 Copyright : (C) 2015 Karolina Alexiou (carolinux)
6 Email : carolinegr at gmail dot com
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 QGSSEARCHWIDGETWRAPPER_H
17#define QGSSEARCHWIDGETWRAPPER_H
18
19#include <QObject>
20#include "qgis_sip.h"
21#include <QMap>
22#include <QVariant>
23
24class QgsVectorLayer;
25class QgsField;
26
28#include "qgswidgetwrapper.h"
29#include "qgis_gui.h"
30
31#ifdef SIP_RUN
32% MappedType QList<QgsSearchWidgetWrapper::FilterFlag>
33{
34 % TypeHeaderCode
35#include <QList>
36 % End
37
38 % ConvertFromTypeCode
39 // Create the list.
40 PyObject *l;
41
42 if ( ( l = PyList_New( sipCpp->size() ) ) == NULL )
43 return NULL;
44
45 // Set the list elements.
46 QList<QgsSearchWidgetWrapper::FilterFlag>::iterator it = sipCpp->begin();
47 for ( int i = 0; it != sipCpp->end(); ++it, ++i )
48 {
49 PyObject *tobj;
50
51 if ( ( tobj = sipConvertFromEnum( *it, sipType_QgsSearchWidgetWrapper_FilterFlag ) ) == NULL )
52 {
53 Py_DECREF( l );
54 return NULL;
55 }
56 PyList_SET_ITEM( l, i, tobj );
57 }
58
59 return l;
60 % End
61
62 % ConvertToTypeCode
63 // Check the type if that is all that is required.
64 if ( sipIsErr == NULL )
65 return PyList_Check( sipPy );
66
67 QList<QgsSearchWidgetWrapper::FilterFlag> *qlist = new QList<QgsSearchWidgetWrapper::FilterFlag>;
68
69 for ( int i = 0; i < PyList_GET_SIZE( sipPy ); ++i )
70 {
71 *qlist << ( QgsSearchWidgetWrapper::FilterFlag )SIPLong_AsLong( PyList_GET_ITEM( sipPy, i ) );
72 }
73
74 *sipCppPtr = qlist;
75 return sipGetState( sipTransferObj );
76 % End
77};
78#endif
79
86{
87 Q_OBJECT
88 public:
89
95 {
96 EqualTo = 1 << 1,
97 NotEqualTo = 1 << 2,
98 GreaterThan = 1 << 3,
99 LessThan = 1 << 4,
100 GreaterThanOrEqualTo = 1 << 5,
101 LessThanOrEqualTo = 1 << 6,
102 Between = 1 << 7,
103 CaseInsensitive = 1 << 8,
104 Contains = 1 << 9,
105 DoesNotContain = 1 << 10,
106 IsNull = 1 << 11,
107 IsNotBetween = 1 << 12,
108 IsNotNull = 1 << 13,
109 StartsWith = 1 << 14,
110 EndsWith = 1 << 15,
111 };
112 Q_DECLARE_FLAGS( FilterFlags, FilterFlag )
113
114
119 static QList< QgsSearchWidgetWrapper::FilterFlag > exclusiveFilterFlags();
120
126 static QList< QgsSearchWidgetWrapper::FilterFlag > nonExclusiveFilterFlags();
127
133 static QString toString( QgsSearchWidgetWrapper::FilterFlag flag );
134
142 explicit QgsSearchWidgetWrapper( QgsVectorLayer *vl, int fieldIdx, QWidget *parent SIP_TRANSFERTHIS = nullptr );
143
149 virtual FilterFlags supportedFlags() const;
150
156 virtual FilterFlags defaultFlags() const;
157
167 virtual QString expression() const = 0;
168
173 virtual bool applyDirectly() = 0;
174
175 // TODO QGIS 4.0 - make pure virtual
176
184 virtual QString createExpression( FilterFlags flags ) const { Q_UNUSED( flags ) return QStringLiteral( "TRUE" ); }
185
193 QString createFieldIdentifier() const;
194
201 QString aggregate() const;
202
209 void setAggregate( const QString &aggregate );
210
215 int fieldIndex() const;
216
217 public slots:
218
223 virtual void clearWidget() {}
224
229 void setEnabled( bool enabled ) override { Q_UNUSED( enabled ) }
230
231 signals:
232
237 void expressionChanged( const QString &exp );
238
244
251
252 protected slots:
253
257 virtual void setExpression( const QString &expression ) = 0;
258
259 void setFeature( const QgsFeature &feature ) override;
260
261 protected:
263 void clearExpression();
264
265 QString mExpression;
267
268 private:
269 QString mAggregate;
270 QgsRelation mAggregateRelation;
271};
272// We'll use this class inside a QVariant in the widgets properties
274
275Q_DECLARE_OPERATORS_FOR_FLAGS( QgsSearchWidgetWrapper::FilterFlags )
276
277#endif // QGSSEARCHWIDGETWRAPPER_H
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:51
Shows a search widget on a filter form.
FilterFlag
Flags which indicate what types of filtering and searching is possible using the widget.
void setEnabled(bool enabled) override
Toggles whether the search widget is enabled or disabled.
virtual QString createExpression(FilterFlags flags) const
Creates a filter expression based on the current state of the search widget and the specified filter ...
virtual QString expression() const =0
Will be used to access the widget's value.
void valueChanged()
Emitted when a user changes the value of the search widget.
void valueCleared()
Emitted when a user changes the value of the search widget back to an empty, default state.
void expressionChanged(const QString &exp)
Emitted whenever the expression changes.
virtual void setExpression(const QString &expression)=0
Set the expression which is currently used as filter for this widget.
virtual bool applyDirectly()=0
If this is true, then this search widget should take effect directly when its expression changes.
virtual void clearWidget()
Clears the widget's current value and resets it back to the default state.
Represents a vector layer which manages a vector based data sets.
Manages an editor widget Widget and wrapper share the same parent.
virtual void setFeature(const QgsFeature &feature)=0
Is called when the value of the widget needs to be changed.
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.