29#include "moc_qgsdefaultsearchwidgetwrapper.cpp"
31using namespace Qt::StringLiterals;
35 , mCaseString( u
"LIKE"_s )
44void QgsDefaultSearchWidgetWrapper::setCaseString(
int caseSensitiveCheckState )
46 if ( caseSensitiveCheckState == Qt::Checked )
48 mCaseString = u
"LIKE"_s;
52 mCaseString = u
"ILIKE"_s;
82 exp = QString::number( doubleValue );
86 .arg(
QgsExpression::quotedColumnRef( fieldName ), isNumeric ? u
"="_s : mCaseString, isNumeric ? exp.replace(
'\'',
"''"_L1 ) :
'%' + exp.replace(
'\'',
"''"_L1 ) +
'%' );
93 return new QWidget( parent );
108 case QMetaType::Type::Int:
109 case QMetaType::Type::UInt:
110 case QMetaType::Type::Double:
111 case QMetaType::Type::LongLong:
112 case QMetaType::Type::ULongLong:
113 case QMetaType::Type::QDate:
114 case QMetaType::Type::QDateTime:
115 case QMetaType::Type::QTime:
119 case QMetaType::Type::QString:
135 case QMetaType::Type::Int:
136 case QMetaType::Type::UInt:
137 case QMetaType::Type::Double:
138 case QMetaType::Type::LongLong:
139 case QMetaType::Type::ULongLong:
142 case QMetaType::Type::QDate:
143 case QMetaType::Type::QDateTime:
144 case QMetaType::Type::QTime:
147 case QMetaType::Type::QString:
165 return fieldName +
" IS NULL";
167 return fieldName +
" IS NOT NULL";
169 QString text = mLineEdit->text();
177 text = QString::number( doubleValue );
184 case QMetaType::Type::Int:
185 case QMetaType::Type::UInt:
186 case QMetaType::Type::Double:
187 case QMetaType::Type::LongLong:
188 case QMetaType::Type::ULongLong:
191 return fieldName +
'=' + text;
193 return fieldName +
"<>" + text;
195 return fieldName +
'>' + text;
197 return fieldName +
'<' + text;
199 return fieldName +
">=" + text;
201 return fieldName +
"<=" + text;
205 case QMetaType::Type::QDate:
206 case QMetaType::Type::QDateTime:
207 case QMetaType::Type::QTime:
210 return fieldName +
"='" + text +
'\'';
212 return fieldName +
"<>'" + text +
'\'';
214 return fieldName +
">'" + text +
'\'';
216 return fieldName +
"<'" + text +
'\'';
218 return fieldName +
">='" + text +
'\'';
220 return fieldName +
"<='" + text +
'\'';
224 case QMetaType::Type::QString:
229 if ( mCheckbox && mCheckbox->isChecked() )
230 return fieldName + ( ( flags &
EqualTo ) ?
"=" :
"<>" )
233 return u
"lower(%1)"_s.arg( fieldName )
238 QString exp = fieldName + ( mCheckbox && mCheckbox->isChecked() ?
" LIKE " :
" ILIKE " );
241 value = value.remove( 0, 1 );
250 exp.prepend(
"NOT (" ).append(
')' );
266 mLineEdit->setText( QString() );
271 mLineEdit->setEnabled( enabled );
273 mCheckbox->setEnabled( enabled );
279 mContainer->setLayout(
new QHBoxLayout() );
280 mContainer->layout()->setContentsMargins( 0, 0, 0, 0 );
283 if ( fldType == QMetaType::Type::QString )
293 mContainer->layout()->addWidget( mLineEdit );
294 mContainer->setFocusProxy( mLineEdit );
296 if ( fldType == QMetaType::Type::QString )
298 mCheckbox =
new QCheckBox( u
"Case sensitive"_s );
299 mContainer->layout()->addWidget( mCheckbox );
300 connect( mCheckbox, &QCheckBox::stateChanged,
this, &QgsDefaultSearchWidgetWrapper::setCaseString );
301 mCheckbox->setChecked( Qt::Unchecked );
304 connect( mLineEdit, &QLineEdit::textChanged,
this, &QgsDefaultSearchWidgetWrapper::textChanged );
305 connect( mLineEdit, &QLineEdit::returnPressed,
this, &QgsDefaultSearchWidgetWrapper::filterChanged );
308 mCaseString = u
"ILIKE"_s;
326void QgsDefaultSearchWidgetWrapper::filterChanged()
331void QgsDefaultSearchWidgetWrapper::textChanged(
const QString &text )
333 if ( text.isEmpty() )
static QString nullRepresentation()
Returns the string used to represent the value NULL throughout QGIS.
static double toDouble(const QString &input, bool *ok)
Converts input string to double value.
static QString quotedString(QString text)
Returns a quoted version of a string (in single quotes).
static QString quotedColumnRef(QString name)
Returns a quoted column reference (in double quotes).
A line edit with an autocompleter which takes unique values from a vector layer's fields.
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
QLineEdit subclass with built in support for clearing the widget's value and handling custom null val...
static bool isNumericType(QMetaType::Type metaType)
Returns true if the specified metaType is a numeric type.
Represents a vector layer which manages a vector based dataset.