QGIS API Documentation  3.6.0-Noosa (5873452)
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 
182  // TODO QGIS 4.0 - make pure virtual
183  virtual QString createExpression( FilterFlags flags ) const { Q_UNUSED( flags ); return QStringLiteral( "TRUE" ); }
184 
192  QString createFieldIdentifier() const;
193 
200  QString aggregate() const;
201 
208  void setAggregate( const QString &aggregate );
209 
210  public slots:
211 
216  virtual void clearWidget() {}
217 
222  void setEnabled( bool enabled ) override { Q_UNUSED( enabled ); }
223 
224  signals:
225 
230  void expressionChanged( const QString &exp );
231 
236  void valueChanged();
237 
243  void valueCleared();
244 
245  protected slots:
246 
250  virtual void setExpression( const QString &expression ) = 0;
251 
252  void setFeature( const QgsFeature &feature ) override;
253 
254  protected:
256  void clearExpression();
257 
258  QString mExpression;
260 
261  private:
262  QString mAggregate;
263  QgsRelation mAggregateRelation;
264 };
265 // We'll use this class inside a QVariant in the widgets properties
267 
268 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsSearchWidgetWrapper::FilterFlags )
269 
270 #endif // QGSSEARCHWIDGETWRAPPER_H
Shows a search widget on a filter form.
virtual QString createExpression(FilterFlags flags) const
Creates a filter expression based on the current state of the search widget and the specified filter ...
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:46
void setEnabled(bool enabled) override
Toggles whether the search widget is enabled or disabled.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
FilterFlag
Flags which indicate what types of filtering and searching is possible using the widget.
Q_DECLARE_METATYPE(QModelIndex)
virtual void setFeature(const QgsFeature &feature)=0
Is called, when the value of the widget needs to be changed.
virtual void clearWidget()
Clears the widget&#39;s current value and resets it back to the default state.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:48
Represents a vector layer which manages a vector based data sets.
Manages an editor widget Widget and wrapper share the same parent.