QGIS API Documentation  3.23.0-Master (dd0cd13a00)
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 
24 class QgsVectorLayer;
25 class 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 
85 class GUI_EXPORT QgsSearchWidgetWrapper : public QgsWidgetWrapper
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 
243  void valueChanged();
244 
250  void valueCleared();
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 
275 Q_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_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
Q_DECLARE_METATYPE(QgsMeshTimeSettings)