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() ); }
QgsValueRelationConfigDlg::QgsValueRelationConfigDlg( QgsVectorLayer* vl, int fieldIdx, QWidget* parent ) : QgsEditorConfigWidget( vl, fieldIdx, parent ) { setupUi( this ); mLayerName->setFilters( QgsMapLayerProxyModel::VectorLayer ); connect( mLayerName, &QgsMapLayerComboBox::layerChanged, mKeyColumn, &QgsFieldComboBox::setLayer ); connect( mLayerName, &QgsMapLayerComboBox::layerChanged, mValueColumn, &QgsFieldComboBox::setLayer ); connect( mEditExpression, SIGNAL( clicked() ), this, SLOT( editExpression() ) ); connect( mLayerName, SIGNAL( layerChanged( QgsMapLayer* ) ), this, SIGNAL( changed() ) ); connect( mKeyColumn, SIGNAL( currentIndexChanged( int ) ), this, SIGNAL( changed() ) ); connect( mValueColumn, SIGNAL( currentIndexChanged( int ) ), this, SIGNAL( changed() ) ); connect( mAllowMulti, SIGNAL( toggled( bool ) ), this, SIGNAL( changed() ) ); connect( mAllowNull, SIGNAL( toggled( bool ) ), this, SIGNAL( changed() ) ); connect( mOrderByValue, SIGNAL( toggled( bool ) ), this, SIGNAL( changed() ) ); connect( mFilterExpression, SIGNAL( textChanged() ), this, SIGNAL( changed() ) ); connect( mUseCompleter, SIGNAL( toggled( bool ) ), this, SIGNAL( changed() ) ); }
QgsExpressionLineEdit::QgsExpressionLineEdit( QWidget *parent ) : QWidget( parent ) , mLineEdit( nullptr ) , mCodeEditor( nullptr ) , mExpressionDialogTitle( tr( "Expression dialog" ) ) , mDa( nullptr ) , mExpressionContextGenerator( nullptr ) , mLayer( nullptr ) { mButton = new QToolButton(); mButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); mButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpression.svg" ) ) ); connect( mButton, SIGNAL( clicked() ), this, SLOT( editExpression() ) ); //sets up layout setMultiLine( false ); mExpressionContext = QgsExpressionContext(); mExpressionContext << QgsExpressionContextUtils::globalScope() << QgsExpressionContextUtils::projectScope(); }