QGIS API Documentation  3.14.0-Pi (9f7028fd23)
qgsfilterlineedit.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsfilterlineedit.h
3  ------------------------
4  begin : October 27, 2012
5  copyright : (C) 2012 by Alexander Bruy
6  email : alexander dot bruy at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSFILTERLINEEDIT_H
19 #define QGSFILTERLINEEDIT_H
20 
21 #include <QLineEdit>
22 #include <QIcon>
23 #include "qgis_sip.h"
24 #include "qgis_gui.h"
25 
26 class QToolButton;
27 class QgsAnimatedIcon;
28 
39 class GUI_EXPORT QgsFilterLineEdit : public QLineEdit
40 {
41 
42 #ifdef SIP_RUN
44  if ( qobject_cast<QgsFilterLineEdit *>( sipCpp ) )
45  sipType = sipType_QgsFilterLineEdit;
46  else
47  sipType = NULL;
48  SIP_END
49 #endif
50 
51  Q_OBJECT
52  Q_PROPERTY( ClearMode clearMode READ clearMode WRITE setClearMode )
53  Q_PROPERTY( QString nullValue READ nullValue WRITE setNullValue )
54  Q_PROPERTY( QString defaultValue READ defaultValue WRITE setDefaultValue )
55  Q_PROPERTY( QString value READ value WRITE setValue NOTIFY valueChanged )
56  Q_PROPERTY( bool showClearButton READ showClearButton WRITE setShowClearButton )
57  Q_PROPERTY( bool showSearchIcon READ showSearchIcon WRITE setShowSearchIcon )
58  Q_PROPERTY( bool showSpinner READ showSpinner WRITE setShowSpinner NOTIFY showSpinnerChanged )
59 
60  public:
61 
63  enum ClearMode
64  {
65  ClearToNull = 0,
67  };
68  Q_ENUM( ClearMode )
69 
70 
75  QgsFilterLineEdit( QWidget *parent SIP_TRANSFERTHIS = nullptr, const QString &nullValue = QString() );
76 
82  bool showClearButton() const { return mClearButtonVisible; }
83 
90  void setShowClearButton( bool visible );
91 
98  ClearMode clearMode() const { return mClearMode; }
99 
106  void setClearMode( ClearMode mode ) { mClearMode = mode; }
107 
115  void setNullValue( const QString &nullValue ) { mNullValue = nullValue; }
116 
122  QString nullValue() const { return mNullValue; }
123 
130  void setShowSearchIcon( bool visible );
131 
137  bool showSearchIcon() const { return static_cast< bool >( mSearchAction ); }
138 
148  void setDefaultValue( const QString &defaultValue ) { mDefaultValue = defaultValue; }
149 
158  QString defaultValue() const { return mDefaultValue; }
159 
167  void setValue( const QString &value ) { setText( value.isNull() ? mNullValue : value ); }
168 
177  QString value() const { return isNull() ? QString() : text(); }
178 
185  inline bool isNull() const { return text() == mNullValue; }
186 
193  bool showSpinner() const;
194 
201  void setShowSpinner( bool showSpinner );
202 
208  bool selectOnFocus() const;
209 
215  void setSelectOnFocus( bool selectOnFocus );
216 
223  bool event( QEvent *event ) override;
224 
229  bool hasStateStored() const {return mLineEditState.hasStateStored;}
230 
231  public slots:
232 
238  virtual void clearValue();
239 
244  void storeState();
245 
250  void restoreState();
251 
252  signals:
253 
258  void cleared();
259 
265  void valueChanged( const QString &value );
266 
273  void showSpinnerChanged();
274 
275 
281  void selectOnFocusChanged();
282 
283  protected:
284  void focusInEvent( QFocusEvent *e ) override;
285  void mouseReleaseEvent( QMouseEvent *e ) override;
286 
287  private slots:
288  void onTextChanged( const QString &text );
289  void updateBusySpinner();
290  void updateClearIcon();
291 
292  private:
293  struct LineEditState
294  {
295  bool hasStateStored = false;
296  QString text;
297  int selectionStart;
298  int selectionLength;
299  int cursorPosition;
300  };
301 
302  QIcon mClearIcon;
303  QAction *mClearAction = nullptr;
304  QAction *mSearchAction = nullptr;
305  QAction *mBusySpinnerAction = nullptr;
306 
307  bool mClearButtonVisible = true;
308  bool mShowSpinner = false;
309 
310  ClearMode mClearMode = ClearToNull;
311 
312  QString mNullValue;
313  QString mDefaultValue;
314  QString mStyleSheet;
315  bool mWaitingForMouseRelease = false;
316  bool mSelectOnFocus = false;
317 
318  LineEditState mLineEditState;
319 
320  QgsAnimatedIcon *mBusySpinnerAnimatedIcon = nullptr;
321 
323  bool shouldShowClear() const;
324 
325  friend class TestQgsFeatureListComboBox;
326 };
327 
329 
336 class SIP_SKIP QgsSpinBoxLineEdit : public QgsFilterLineEdit
337 {
338  Q_OBJECT
339 
340  public:
341 
342  QgsSpinBoxLineEdit( QWidget *parent = nullptr )
343  : QgsFilterLineEdit( parent )
344  {}
345 
346  public slots:
347 
348  void clearValue() override
349  {
350  // don't change the value - let spin boxes handle that by detecting cleared() signal
351  setCursor( Qt::IBeamCursor );
352  setModified( true );
353  emit cleared();
354  }
355 
356  protected:
357  void focusInEvent( QFocusEvent *e ) override;
358 };
360 
361 #endif // QGSFILTERLINEEDIT_H
QgsFilterLineEdit::setValue
void setValue(const QString &value)
Sets the current text for the widget with support for handling null values.
Definition: qgsfilterlineedit.h:167
QgsFilterLineEdit::showClearButton
bool showClearButton() const
Returns true if the widget's clear button is visible.
Definition: qgsfilterlineedit.h:82
QgsFilterLineEdit::defaultValue
QString defaultValue() const
Returns the default value for the widget.
Definition: qgsfilterlineedit.h:158
QgsFilterLineEdit::setDefaultValue
void setDefaultValue(const QString &defaultValue)
Sets the default value for the widget.
Definition: qgsfilterlineedit.h:148
QgsFilterLineEdit
Definition: qgsfilterlineedit.h:39
QgsFilterLineEdit::showSearchIcon
bool showSearchIcon() const
Returns if a search icon shall be shown on the left of the image when no text is entered.
Definition: qgsfilterlineedit.h:137
QgsFilterLineEdit::setClearMode
void setClearMode(ClearMode mode)
Sets the clear mode for the widget.
Definition: qgsfilterlineedit.h:106
QgsFilterLineEdit::hasStateStored
bool hasStateStored() const
Returns if a state is already saved.
Definition: qgsfilterlineedit.h:229
SIP_CONVERT_TO_SUBCLASS_CODE
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:172
QgsFilterLineEdit::nullValue
QString nullValue() const
Returns the string used for representing null values in the widget.
Definition: qgsfilterlineedit.h:122
SIP_SKIP
#define SIP_SKIP
Definition: qgis_sip.h:126
QgsFilterLineEdit::ClearToDefault
@ ClearToDefault
Reset value to default value (see defaultValue() )
Definition: qgsfilterlineedit.h:66
QgsFilterLineEdit::clearValue
virtual void clearValue()
Clears the widget and resets it to the null value.
Definition: qgsfilterlineedit.cpp:107
qgis_sip.h
QgsFilterLineEdit::ClearMode
ClearMode
Behavior when clearing value of widget.
Definition: qgsfilterlineedit.h:63
QgsAnimatedIcon
Definition: qgsanimatedicon.h:30
QgsFilterLineEdit::focusInEvent
void focusInEvent(QFocusEvent *e) override
Definition: qgsfilterlineedit.cpp:88
QgsFilterLineEdit::isNull
bool isNull() const
Determine if the current text represents null.
Definition: qgsfilterlineedit.h:185
QgsFilterLineEdit::cleared
void cleared()
Emitted when the widget is cleared.
QgsFilterLineEdit::setNullValue
void setNullValue(const QString &nullValue)
Sets the string representation for null values in the widget.
Definition: qgsfilterlineedit.h:115
SIP_END
#define SIP_END
Definition: qgis_sip.h:189
SIP_TRANSFERTHIS
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
QgsFilterLineEdit::value
QString value() const
Returns the text of this edit with support for handling null values.
Definition: qgsfilterlineedit.h:177
QgsFilterLineEdit::clearMode
ClearMode clearMode() const
Returns the clear mode for the widget.
Definition: qgsfilterlineedit.h:98