QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
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
94 {
95 EqualTo = 1 << 1,
96 NotEqualTo = 1 << 2,
97 GreaterThan = 1 << 3,
98 LessThan = 1 << 4,
99 GreaterThanOrEqualTo = 1 << 5,
100 LessThanOrEqualTo = 1 << 6,
101 Between = 1 << 7,
102 CaseInsensitive = 1 << 8,
103 Contains = 1 << 9,
104 DoesNotContain = 1 << 10,
105 IsNull = 1 << 11,
106 IsNotBetween = 1 << 12,
107 IsNotNull = 1 << 13,
108 StartsWith = 1 << 14,
109 EndsWith = 1 << 15,
110 };
111 Q_DECLARE_FLAGS( FilterFlags, FilterFlag )
112
113
117 static QList< QgsSearchWidgetWrapper::FilterFlag > exclusiveFilterFlags();
118
123 static QList< QgsSearchWidgetWrapper::FilterFlag > nonExclusiveFilterFlags();
124
129 static QString toString( QgsSearchWidgetWrapper::FilterFlag flag );
130
138 explicit QgsSearchWidgetWrapper( QgsVectorLayer *vl, int fieldIdx, QWidget *parent SIP_TRANSFERTHIS = nullptr );
139
144 virtual FilterFlags supportedFlags() const;
145
150 virtual FilterFlags defaultFlags() const;
151
161 virtual QString expression() const = 0;
162
167 virtual bool applyDirectly() = 0;
168
169 // TODO QGIS 4.0 - make pure virtual
170
177 virtual QString createExpression( FilterFlags flags ) const { Q_UNUSED( flags ) return QStringLiteral( "TRUE" ); }
178
185 QString createFieldIdentifier() const;
186
192 QString aggregate() const;
193
199 void setAggregate( const QString &aggregate );
200
205 int fieldIndex() const;
206
207 public slots:
208
212 virtual void clearWidget() {}
213
218 void setEnabled( bool enabled ) override { Q_UNUSED( enabled ) }
219
220 signals:
221
226 void expressionChanged( const QString &exp );
227
232
238
239 protected slots:
240
244 virtual void setExpression( const QString &expression ) = 0;
245
246 void setFeature( const QgsFeature &feature ) override;
247
248 protected:
250 void clearExpression();
251
252 QString mExpression;
254
255 private:
256 QString mAggregate;
257 QgsRelation mAggregateRelation;
258};
259// We'll use this class inside a QVariant in the widgets properties
261
263
264#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:53
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.
QFlags< FilterFlag > FilterFlags
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
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)