17 #include <QHBoxLayout>
27 , mExpressionDialogTitle(
tr(
"Expression dialog" ) )
30 QHBoxLayout* layout =
new QHBoxLayout(
this );
31 layout->setContentsMargins( 0, 0, 0, 0 );
32 mCombo =
new QComboBox(
this );
33 mCombo->setEditable(
true );
34 mCombo->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Minimum );
39 mButton =
new QToolButton(
this );
40 mButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
43 layout->addWidget(
mCombo );
71 QHBoxLayout* layout =
dynamic_cast<QHBoxLayout*
>( this->layout() );
74 QLayoutItem* item = layout->takeAt( 1 );
75 layout->insertWidget( 0, item->widget() );
78 layout->addWidget(
mCombo );
88 return mCombo->currentText();
138 if ( fieldName.isEmpty() )
142 if ( !idx.isValid() )
145 QString simpleFieldName = fieldName.trimmed();
146 if ( simpleFieldName.startsWith(
'"' ) && simpleFieldName.endsWith(
'"' ) )
148 simpleFieldName.remove( 0, 1 ).chop( 1 );
152 if ( !idx.isValid() )
160 mCombo->setCurrentIndex( proxyIndex.row() );
192 const QString expression =
mCombo->lineEdit()->text();
196 mCombo->setCurrentIndex( proxyIndex.row() );
202 if ( event->type() == QEvent::EnabledChange )
213 QString fieldName =
currentField( &isExpression, &isValid );
216 QFontMetrics metrics(
mCombo->lineEdit()->font() );
217 if ( metrics.width( fieldName ) >
mCombo->lineEdit()->width() )
219 mCombo->setToolTip( fieldName );
235 palette.setColor( QPalette::Text, Qt::gray );
240 if ( !expression.isEmpty() )
249 QFont font =
mCombo->lineEdit()->font();
250 font.setItalic( isExpression );
251 mCombo->lineEdit()->setFont( font );
253 if ( isExpression && !isValid )
255 palette.setColor( QPalette::Text, Qt::red );
259 palette.setColor( QPalette::Text, Qt::black );
262 mCombo->lineEdit()->setPalette( palette );
Class for parsing and evaluation of expressions (formerly called "search strings").
Base class for all map layer types.
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
QgsFieldModel * sourceFieldModel()
sourceFieldModel returns the QgsFieldModel used in this QSortFilterProxyModel
bool prepare(const QgsFields &fields)
Get the expression ready for evaluation - find out column indexes.
static QIcon getThemeIcon(const QString &theName)
Helper to get a theme icon.
void setExpression(const QString &expression)
setExpression sets a single expression to be added after the fields at the end of the model ...
Container of fields for a vector layer.
static bool isValid(const QString &text, const QgsFields &fields, QString &errorMessage)
QgsVectorLayer * layer()
returns the currently used layer
bool isField(const QString &expression)
The QgsFieldProxyModel class provides an easy to use model to display the list of fields of a layer...
QgsFieldProxyModel * setFilters(Filters filters)
setFilters set flags that affect how fields are filtered
void setLayer(QgsVectorLayer *layer)
set the layer of whch fields are displayed
void setGeomCalculator(const QgsDistanceArea &da)
Sets geometry calculator used in distance/area calculations.
void setAllowExpression(bool allowExpression)
returns the currently used layer
General purpose distance and area calculator.
const QgsFields & pendingFields() const
returns field list in the to-be-committed state
QModelIndex indexFromName(const QString &fieldName)
return the index corresponding to a given fieldName
Represents a vector layer which manages a vector based data sets.
A generic dialog for building expression strings.