26#include "moc_qgsvaluerelationconfigdlg.cpp"
28using namespace Qt::StringLiterals;
35 mKeyColumn->setLayer( mLayerName->currentLayer() );
36 mValueColumn->setLayer( mLayerName->currentLayer() );
37 mGroupColumn->setLayer( mLayerName->currentLayer() );
38 mGroupColumn->setAllowEmptyFieldName(
true );
39 mDescriptionExpression->setLayer( mLayerName->currentLayer() );
40 mOrderByFieldName->setLayer( mLayerName->currentLayer() );
41 mOrderByFieldName->setAllowEmptyFieldName(
false );
48 connect( mOrderByField, &QAbstractButton::toggled, mOrderByFieldName, [
this](
bool enabled ) { mOrderByFieldName->setEnabled( enabled ); } );
50 mOrderByGroupBox->setCollapsed(
true );
52 mNofColumns->setMinimum( 1 );
53 mNofColumns->setMaximum( 10 );
54 mNofColumns->setValue( 1 );
59 connect( mGroupColumn,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, [
this](
int index ) {
60 mDisplayGroupName->setEnabled( index != 0 );
69 connect( mAllowMulti, &QAbstractButton::toggled,
this, [
this](
bool checked ) {
70 label_nofColumns->setEnabled( checked );
71 mNofColumns->setEnabled( checked );
74 connect( mUseCompleter, &QCheckBox::stateChanged,
this, [
this](
int state ) { mCompleterMatchFromStart->setEnabled(
static_cast<Qt::CheckState
>( state ) == Qt::CheckState::Checked ); } );
76 mCompleterMatchFromStart->setEnabled( mUseCompleter->isChecked() );
87 cfg.insert( u
"Layer"_s, mLayerName->currentLayer() ? mLayerName->currentLayer()->id() : QString() );
88 cfg.insert( u
"LayerName"_s, mLayerName->currentLayer() ? mLayerName->currentLayer()->name() : QString() );
89 cfg.insert( u
"LayerSource"_s, mLayerName->currentLayer() ? mLayerName->currentLayer()->publicSource() : QString() );
90 cfg.insert( u
"LayerProviderName"_s, ( mLayerName->currentLayer() && mLayerName->currentLayer()->dataProvider() ) ? mLayerName->currentLayer()->providerType() : QString() );
91 cfg.insert( u
"Key"_s, mKeyColumn->currentField() );
92 cfg.insert( u
"Value"_s, mValueColumn->currentField() );
93 cfg.insert( u
"Group"_s, mGroupColumn->currentField() );
94 cfg.insert( u
"DisplayGroupName"_s, mDisplayGroupName->isChecked() );
95 cfg.insert( u
"Description"_s, mDescriptionExpression->expression() );
96 cfg.insert( u
"AllowMulti"_s, mAllowMulti->isChecked() );
97 cfg.insert( u
"NofColumns"_s, mNofColumns->value() );
98 cfg.insert( u
"AllowNull"_s, mAllowNull->isChecked() );
99 cfg.insert( u
"OrderByValue"_s, mOrderByValue->isChecked() );
100 cfg.insert( u
"OrderByKey"_s, mOrderByKey->isChecked() );
101 cfg.insert( u
"OrderByField"_s, mOrderByField->isChecked() );
102 cfg.insert( u
"OrderByFieldName"_s, mOrderByFieldName->currentField() );
103 cfg.insert( u
"OrderByDescending"_s, mOrderByDescending->isChecked() );
104 cfg.insert( u
"FilterExpression"_s, mFilterExpression->toPlainText() );
105 cfg.insert( u
"UseCompleter"_s, mUseCompleter->isChecked() );
106 const Qt::MatchFlags completerMatchFlags { mCompleterMatchFromStart->isChecked() ? Qt::MatchFlag::MatchStartsWith : Qt::MatchFlag::MatchContains };
107 cfg.insert( u
"CompleterMatchFlags"_s,
static_cast<int>( completerMatchFlags ) );
115 mLayerName->setLayer( lyr );
116 mOrderByFieldName->setLayer( lyr );
117 mKeyColumn->setField(
config.value( u
"Key"_s ).toString() );
118 mValueColumn->setField(
config.value( u
"Value"_s ).toString() );
119 mGroupColumn->setField(
config.value( u
"Group"_s ).toString() );
120 mDisplayGroupName->setChecked(
config.value( u
"DisplayGroupName"_s ).toBool() );
121 mDescriptionExpression->setField(
config.value( u
"Description"_s ).toString() );
122 mAllowMulti->setChecked(
config.value( u
"AllowMulti"_s ).toBool() );
123 mNofColumns->setValue(
config.value( u
"NofColumns"_s, 1 ).toInt() );
124 if ( !mAllowMulti->isChecked() )
126 label_nofColumns->setEnabled(
false );
127 mNofColumns->setEnabled(
false );
129 mAllowNull->setChecked(
config.value( u
"AllowNull"_s ).toBool() );
130 mOrderByValue->setChecked(
config.value( u
"OrderByValue"_s ).toBool() );
131 mOrderByField->setChecked(
config.value( u
"OrderByField"_s ).toBool() );
132 mOrderByKey->setChecked(
config.value( u
"OrderByKey"_s ).toBool() );
133 mOrderByFieldName->setField(
config.value( u
"OrderByFieldName"_s ).toString() );
134 mOrderByDescending->setChecked(
config.value( u
"OrderByDescending"_s ).toBool() );
136 if ( !mOrderByField->isChecked() && !mOrderByValue->isChecked() && !mOrderByKey->isChecked() )
138 mOrderByKey->setChecked(
true );
142 if ( !mOrderByKey->isChecked() )
144 mOrderByGroupBox->setCollapsed(
false );
147 mFilterExpression->setPlainText(
config.value( u
"FilterExpression"_s ).toString() );
148 mUseCompleter->setChecked(
config.value( u
"UseCompleter"_s ).toBool() );
150 const Qt::MatchFlags completerMatchFlags {
151 config.contains( u
"CompleterMatchFlags"_s ) ?
static_cast<Qt::MatchFlags
>(
config.value( u
"CompleterMatchFlags"_s, Qt::MatchFlag::MatchStartsWith ).toInt() ) : Qt::MatchFlag::MatchStartsWith
153 mCompleterMatchFromStart->setChecked( completerMatchFlags.testFlag( Qt::MatchFlag::MatchStartsWith ) );
156void QgsValueRelationConfigDlg::layerChanged()
158 mFilterExpression->setEnabled( qobject_cast<QgsVectorLayer *>( mLayerName->currentLayer() ) );
159 mEditExpression->setEnabled( qobject_cast<QgsVectorLayer *>( mLayerName->currentLayer() ) );
160 mOrderByFieldName->setLayer( mLayerName->currentLayer() );
165 QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( mLayerName->currentLayer() );
174 context.
setHighlightedVariables( QStringList() << u
"current_geometry"_s << u
"current_feature"_s << u
"form_mode"_s << u
"current_parent_geometry"_s << u
"current_parent_feature"_s );
177 dlg.setWindowTitle( tr(
"Edit Filter Expression" ) );
179 if ( dlg.exec() == QDialog::Accepted )
A generic dialog for building expression strings.
QgsExpressionBuilderWidget * expressionBuilder()
The builder widget that is used by the dialog.
static QgsExpressionContextScope * parentFormScope(const QgsFeature &formFeature=QgsFeature(), const QString &formMode=QString())
Creates a new scope which contains functions and variables from the current parent attribute form/tab...
static QgsExpressionContextScope * formScope(const QgsFeature &formFeature=QgsFeature(), const QString &formMode=QString())
Creates a new scope which contains functions and variables from the current attribute form/table form...
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setHighlightedFunctions(const QStringList &names)
Sets the list of function names intended to be highlighted to the user.
void setHighlightedVariables(const QStringList &variableNames)
Sets the list of variable names within the context intended to be highlighted to the user.
void setLayer(QgsMapLayer *layer)
Sets the layer for which fields are listed in the combobox.
void layerChanged(QgsMapLayer *layer)
Emitted whenever the currently selected layer changes.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsValueRelationConfigDlg(QgsVectorLayer *vl, int fieldIdx, QWidget *parent=nullptr)
void setConfig(const QVariantMap &config) override
Update the configuration widget to represent the given configuration.
QVariantMap config() override
Create a configuration from the current GUI state.
Represents a vector layer which manages a vector based dataset.