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 );
}
Beispiel #3
0
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 );
  }
}
Beispiel #6
0
void QgsFieldComboBox::indexChanged( int i )
{
  Q_UNUSED( i );
  QString name = currentField();
  emit fieldChanged( name );
}