void QgsFieldExpressionWidget::updateLineEditStyle( const QString& expression ) { QPalette palette; if ( !isEnabled() ) { palette.setColor( QPalette::Text, Qt::gray ); } else { bool isExpression, isValid; if ( !expression.isEmpty() ) { isExpression = true; isValid = isExpressionValid( expression ); } else { currentField( &isExpression, &isValid ); } QFont font = mCombo->lineEdit()->font(); font.setItalic( isExpression ); mCombo->lineEdit()->setFont( font ); if ( isExpression && !isValid ) { palette.setColor( QPalette::Text, Qt::red ); } else { palette.setColor( QPalette::Text, Qt::black ); } } mCombo->lineEdit()->setPalette( palette ); }
void QgsFieldExpressionWidget::currentFieldChanged( int i /* =0 */ ) { Q_UNUSED( i ); updateLineEditStyle(); bool isExpression, isValid; QString fieldName = currentField( &isExpression, &isValid ); emit fieldChanged( fieldName ); emit fieldChanged( fieldName, isValid ); }
void QgsFieldComboBox::setField( const QString& fieldName ) { QModelIndex idx = mFieldProxyModel->sourceFieldModel()->indexFromName( fieldName ); if ( idx.isValid() ) { QModelIndex proxyIdx = mFieldProxyModel->mapFromSource( idx ); if ( proxyIdx.isValid() ) { setCurrentIndex( idx.row() ); emit fieldChanged( currentField() ); return; } } setCurrentIndex( -1 ); }
void QgsFieldExpressionWidget::currentFieldChanged() { updateLineEditStyle(); bool isExpression, isValid; QString fieldName = currentField( &isExpression, &isValid ); // display tooltip if widget is shorter than expression QFontMetrics metrics( mCombo->lineEdit()->font() ); if ( metrics.width( fieldName ) > mCombo->lineEdit()->width() ) { mCombo->setToolTip( fieldName ); } else { mCombo->setToolTip( "" ); } emit fieldChanged( fieldName ); emit fieldChanged( fieldName, isValid ); }
void QgsFieldExpressionWidget::editExpression() { QString currentExpression = currentField(); QgsVectorLayer* vl = layer(); if ( !vl ) return; QgsExpressionBuilderDialog dlg( vl, currentExpression ); if ( !mDa.isNull() ) { dlg.setGeomCalculator( *mDa ); } dlg.setWindowTitle( mExpressionDialogTitle ); if ( dlg.exec() ) { QString newExpression = dlg.expressionText(); setField( newExpression ); } }
void QgsFieldComboBox::indexChanged( int i ) { Q_UNUSED( i ); QString name = currentField(); emit fieldChanged( name ); }