QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgscheckboxsearchwidgetwrapper.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgscheckboxsearchwidgetwrapper.cpp
3  ---------------------------------
4  Date : 2016-05-23
5  Copyright : (C) 2016 Nyall Dawson
6  Email : nyall dot dawson 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 
17 
18 #include "qgsfields.h"
20 #include "qgsvectorlayer.h"
21 
22 #include <QSettings>
23 #include <QCheckBox>
24 
26  : QgsSearchWidgetWrapper( vl, fieldIdx, parent )
27 
28 {
29 }
30 
32 {
33  return true;
34 }
35 
37 {
38  return mExpression;
39 }
40 
42 {
43  QVariant v;
44 
45  if ( mCheckBox )
46  v = mCheckBox->isChecked() ? config( QStringLiteral( "CheckedState" ) ) : config( QStringLiteral( "UncheckedState" ) );
47 
48  return v;
49 }
50 
51 QgsSearchWidgetWrapper::FilterFlags QgsCheckboxSearchWidgetWrapper::supportedFlags() const
52 {
53  return EqualTo | IsNull | IsNotNull;
54 }
55 
56 QgsSearchWidgetWrapper::FilterFlags QgsCheckboxSearchWidgetWrapper::defaultFlags() const
57 {
58  return EqualTo;
59 }
60 
61 QString QgsCheckboxSearchWidgetWrapper::createExpression( QgsSearchWidgetWrapper::FilterFlags flags ) const
62 {
63  QVariant::Type fldType = layer()->fields().at( mFieldIdx ).type();
64  QString fieldName = createFieldIdentifier();
65 
66  //clear any unsupported flags
67  flags &= supportedFlags();
68  if ( flags & IsNull )
69  return fieldName + " IS NULL";
70 
71  if ( flags & IsNotNull )
72  return fieldName + " IS NOT NULL";
73 
74  QVariant v = value();
75  if ( !v.isValid() )
76  return QString();
77 
78  switch ( fldType )
79  {
80  case QVariant::Int:
81  case QVariant::UInt:
82  case QVariant::Double:
83  case QVariant::LongLong:
84  case QVariant::ULongLong:
85  {
86  if ( flags & EqualTo )
87  return fieldName + '=' + v.toString();
88  else if ( flags & NotEqualTo )
89  return fieldName + "<>" + v.toString();
90  break;
91  }
92 
93  default:
94  {
95  if ( flags & EqualTo )
96  return fieldName + "='" + v.toString() + '\'';
97  else if ( flags & NotEqualTo )
98  return fieldName + "<>'" + v.toString() + '\'';
99  break;
100  }
101  }
102 
103  return QString();
104 }
105 
107 {
108  if ( mCheckBox )
109  {
110  whileBlocking( mCheckBox )->setCheckState( Qt::PartiallyChecked );
111  }
112 }
113 
115 {
116  if ( mCheckBox )
117  {
118  mCheckBox->setEnabled( enabled );
119  }
120 }
121 
123 {
124  return true;
125 }
126 
127 void QgsCheckboxSearchWidgetWrapper::setExpression( const QString &expression )
128 {
129  QString exp = expression;
130  QString fieldName = layer()->fields().at( mFieldIdx ).name();
131 
132  QString str = QStringLiteral( "%1 = '%3'" )
133  .arg( QgsExpression::quotedColumnRef( fieldName ),
134  exp.replace( '\'', QLatin1String( "''" ) )
135  );
136  mExpression = str;
137 }
138 
139 void QgsCheckboxSearchWidgetWrapper::stateChanged( int )
140 {
141  if ( mCheckBox )
142  {
143  mCheckBox->setTristate( false );
144  QString exp = value().toString();
145  setExpression( exp );
146  emit valueChanged();
148  }
149 }
150 
152 {
153  QCheckBox *c = new QCheckBox( parent );
154  c->setChecked( Qt::PartiallyChecked );
155  return c;
156 }
157 
159 {
160  mCheckBox = qobject_cast<QCheckBox *>( editor );
161 
162  if ( mCheckBox )
163  {
164  mCheckBox->setChecked( Qt::PartiallyChecked );
165  connect( mCheckBox, &QCheckBox::stateChanged, this, &QgsCheckboxSearchWidgetWrapper::stateChanged );
166  }
167 }
168 
169 
qgsfields.h
QgsSearchWidgetWrapper::expressionChanged
void expressionChanged(const QString &exp)
Emitted whenever the expression changes.
QgsSearchWidgetWrapper::valueChanged
void valueChanged()
Emitted when a user changes the value of the search widget.
qgscheckboxsearchwidgetwrapper.h
QgsSearchWidgetWrapper::NotEqualTo
@ NotEqualTo
Supports not equal to.
Definition: qgssearchwidgetwrapper.h:97
QgsCheckboxSearchWidgetWrapper::value
QVariant value() const
Returns a variant representing the current state of the widget.
Definition: qgscheckboxsearchwidgetwrapper.cpp:41
QgsCheckboxSearchWidgetWrapper::supportedFlags
QgsSearchWidgetWrapper::FilterFlags supportedFlags() const override
Returns filter flags supported by the search widget.
Definition: qgscheckboxsearchwidgetwrapper.cpp:51
QgsSearchWidgetWrapper
Shows a search widget on a filter form.
Definition: qgssearchwidgetwrapper.h:86
QgsField::name
QString name
Definition: qgsfield.h:59
QgsCheckboxSearchWidgetWrapper::createExpression
QString createExpression(QgsSearchWidgetWrapper::FilterFlags flags) const override
Definition: qgscheckboxsearchwidgetwrapper.cpp:61
QgsCheckboxSearchWidgetWrapper::clearWidget
void clearWidget() override
Definition: qgscheckboxsearchwidgetwrapper.cpp:106
QgsCheckboxSearchWidgetWrapper::QgsCheckboxSearchWidgetWrapper
QgsCheckboxSearchWidgetWrapper(QgsVectorLayer *vl, int fieldIdx, QWidget *parent=nullptr)
Constructor for QgsCheckboxSearchWidgetWrapper.
Definition: qgscheckboxsearchwidgetwrapper.cpp:25
QgsVectorLayer::fields
QgsFields fields() const FINAL
Returns the list of fields of this layer.
Definition: qgsvectorlayer.cpp:3283
QgsWidgetWrapper::layer
QgsVectorLayer * layer() const
Returns the vector layer associated with the widget.
Definition: qgswidgetwrapper.cpp:91
QgsSearchWidgetWrapper::mFieldIdx
int mFieldIdx
Definition: qgssearchwidgetwrapper.h:266
whileBlocking
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition: qgis.h:262
QgsCheckboxSearchWidgetWrapper::setEnabled
void setEnabled(bool enabled) override
Definition: qgscheckboxsearchwidgetwrapper.cpp:114
QgsCheckboxSearchWidgetWrapper::expression
QString expression() const override
Will be used to access the widget's value.
Definition: qgscheckboxsearchwidgetwrapper.cpp:36
QgsSearchWidgetWrapper::mExpression
QString mExpression
Definition: qgssearchwidgetwrapper.h:265
QgsSearchWidgetWrapper::IsNull
@ IsNull
Supports searching for null values.
Definition: qgssearchwidgetwrapper.h:106
qgsvectorlayer.h
qgscheckboxwidgetfactory.h
QgsWidgetWrapper::config
QVariantMap config() const
Returns the whole config.
Definition: qgswidgetwrapper.cpp:81
c
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
Definition: porting_processing.dox:1
QgsVectorLayer
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:387
QgsCheckboxSearchWidgetWrapper::createWidget
QWidget * createWidget(QWidget *parent) override
This method should create a new widget with the provided parent.
Definition: qgscheckboxsearchwidgetwrapper.cpp:151
QgsExpression::quotedColumnRef
static QString quotedColumnRef(QString name)
Returns a quoted column reference (in double quotes)
Definition: qgsexpression.cpp:65
QgsCheckboxSearchWidgetWrapper::setExpression
void setExpression(const QString &expression) override
Definition: qgscheckboxsearchwidgetwrapper.cpp:127
QgsCheckboxSearchWidgetWrapper::defaultFlags
QgsSearchWidgetWrapper::FilterFlags defaultFlags() const override
Returns the filter flags which should be set by default for the search widget.
Definition: qgscheckboxsearchwidgetwrapper.cpp:56
QgsCheckboxSearchWidgetWrapper::valid
bool valid() const override
Returns true if the widget has been properly initialized.
Definition: qgscheckboxsearchwidgetwrapper.cpp:122
QgsCheckboxSearchWidgetWrapper::initWidget
void initWidget(QWidget *editor) override
This method should initialize the editor widget with runtime data.
Definition: qgscheckboxsearchwidgetwrapper.cpp:158
QgsSearchWidgetWrapper::createFieldIdentifier
QString createFieldIdentifier() const
Gets a field name or expression to use as field comparison.
Definition: qgssearchwidgetwrapper.cpp:104
QgsSearchWidgetWrapper::EqualTo
@ EqualTo
Supports equal to.
Definition: qgssearchwidgetwrapper.h:96
QgsFields::at
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
Definition: qgsfields.cpp:163
QgsSearchWidgetWrapper::IsNotNull
@ IsNotNull
Supports searching for non-null values.
Definition: qgssearchwidgetwrapper.h:108
QgsCheckboxSearchWidgetWrapper::applyDirectly
bool applyDirectly() override
If this is true, then this search widget should take effect directly when its expression changes.
Definition: qgscheckboxsearchwidgetwrapper.cpp:31
QgsField::type
QVariant::Type type
Definition: qgsfield.h:57