void QgsExpressionLineEdit::setMultiLine( bool multiLine ) { QString exp = expression(); if ( multiLine && !mCodeEditor ) { mCodeEditor = new QgsCodeEditorSQL(); mCodeEditor->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); delete mLineEdit; mLineEdit = nullptr; QHBoxLayout* newLayout = new QHBoxLayout(); newLayout->setContentsMargins( 0, 0, 0, 0 ); newLayout->addWidget( mCodeEditor ); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget( mButton ); vLayout->addStretch(); newLayout->addLayout( vLayout ); delete layout(); setLayout( newLayout ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); setFocusProxy( mCodeEditor ); connect( mCodeEditor, SIGNAL( textChanged() ), this, SLOT( expressionEdited() ) ); setExpression( exp ); } else if ( !multiLine && !mLineEdit ) { delete mCodeEditor; mCodeEditor = nullptr; mLineEdit = new QgsFilterLineEdit(); mLineEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); QHBoxLayout* newLayout = new QHBoxLayout(); newLayout->setContentsMargins( 0, 0, 0, 0 ); newLayout->addWidget( mLineEdit ); newLayout->addWidget( mButton ); delete layout(); setLayout( newLayout ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); setFocusProxy( mLineEdit ); connect( mLineEdit, SIGNAL( textChanged( QString ) ), this, SLOT( expressionEdited( QString ) ) ); setExpression( exp ); } }
QgsFieldExpressionWidget::QgsFieldExpressionWidget( QWidget *parent ) : QWidget( parent ) , mExpressionDialogTitle( tr( "Expression dialog" ) ) , mDa( 0 ) { QHBoxLayout* layout = new QHBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); mCombo = new QComboBox( this ); mCombo->setEditable( true ); mCombo->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Minimum ); mFieldProxyModel = new QgsFieldProxyModel( mCombo ); mFieldProxyModel->sourceFieldModel()->setAllowExpression( true ); mCombo->setModel( mFieldProxyModel ); mButton = new QToolButton( this ); mButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); mButton->setIcon( QgsApplication::getThemeIcon( "/mIconExpression.svg" ) ); layout->addWidget( mCombo ); layout->addWidget( mButton ); // give focus to the combo // hence if the widget is used as a delegate // it will allow pressing on the expression dialog button setFocusProxy( mCombo ); connect( mCombo->lineEdit(), SIGNAL( textEdited( QString ) ), this, SLOT( expressionEdited( QString ) ) ); connect( mCombo->lineEdit(), SIGNAL( editingFinished() ), this, SLOT( expressionEditingFinished() ) ); connect( mCombo, SIGNAL( activated( int ) ), this, SLOT( currentFieldChanged() ) ); connect( mButton, SIGNAL( clicked() ), this, SLOT( editExpression() ) ); connect( mCombo->lineEdit(), SIGNAL( returnPressed() ), this, SIGNAL( returnPressed() ) ); }
QgsFieldExpressionWidget::QgsFieldExpressionWidget( QWidget *parent ) : QWidget( parent ) , mExpressionDialogTitle( tr( "Expression dialog" ) ) , mDa( nullptr ) , mExpressionContextCallback( nullptr ) , mExpressionContextCallbackContext( nullptr ) { QHBoxLayout* layout = new QHBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); mCombo = new QComboBox( this ); mCombo->setEditable( true ); mCombo->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Minimum ); int width = mCombo->minimumSizeHint().width(); mCombo->setMinimumWidth( width ); mFieldProxyModel = new QgsFieldProxyModel( mCombo ); mFieldProxyModel->sourceFieldModel()->setAllowExpression( true ); mCombo->setModel( mFieldProxyModel ); mButton = new QToolButton( this ); mButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); mButton->setIcon( QgsApplication::getThemeIcon( "/mIconExpression.svg" ) ); layout->addWidget( mCombo ); layout->addWidget( mButton ); // give focus to the combo // hence if the widget is used as a delegate // it will allow pressing on the expression dialog button setFocusProxy( mCombo ); connect( mCombo->lineEdit(), SIGNAL( textEdited( QString ) ), this, SLOT( expressionEdited( QString ) ) ); connect( mCombo->lineEdit(), SIGNAL( editingFinished() ), this, SLOT( expressionEditingFinished() ) ); connect( mCombo, SIGNAL( activated( int ) ), this, SLOT( currentFieldChanged() ) ); connect( mButton, SIGNAL( clicked() ), this, SLOT( editExpression() ) ); connect( mFieldProxyModel, SIGNAL( modelAboutToBeReset() ), this, SLOT( beforeResetModel() ) ); connect( mFieldProxyModel, SIGNAL( modelReset() ), this, SLOT( afterResetModel() ) ); // NW TODO - Fix in 2.6 // connect( mCombo->lineEdit(), SIGNAL( returnPressed() ), this, SIGNAL( returnPressed() ) ); mExpressionContext.reset( new QgsExpressionContext() ); mExpressionContext->appendScope( QgsExpressionContextUtils::globalScope() ); mExpressionContext->appendScope( QgsExpressionContextUtils::projectScope() ); }