40 , mReferencedLayer( nullptr )
46 connect( mComboRelation, SIGNAL( currentIndexChanged(
int ) ),
this, SLOT( relationChanged(
int ) ) );
60 if ( config.
contains(
"AllowNULL" ) )
62 mCbxAllowNull->setChecked( config[
"AllowNULL" ].toBool() );
65 if ( config.
contains(
"OrderByValue" ) )
67 mCbxOrderByValue->setChecked( config[
"OrderByValue" ].toBool() );
72 mCbxShowForm->setChecked( config[
"ShowForm" ].toBool() );
77 mComboRelation->setCurrentIndex( mComboRelation->findData( config[
"Relation" ].toString() ) );
78 relationChanged( mComboRelation->currentIndex() );
81 if ( config.
contains(
"MapIdentification" ) )
83 mCbxMapIdentification->setChecked( config[
"MapIdentification"].toBool() );
88 mCbxReadOnly->setChecked( config[
"ReadOnly"].toBool() );
91 if ( config.
contains(
"FilterFields" ) )
93 mFilterGroupBox->setChecked(
true );
94 Q_FOREACH (
const QString& fld, config[
"FilterFields"].toStringList() )
96 addFilterField( fld );
99 mCbxChainFilters->setChecked( config[
"ChainFilters"].toBool() );
103 void QgsRelationReferenceConfigDlg::relationChanged(
int idx )
105 QString relName = mComboRelation->itemData( idx ).toString();
109 mExpressionWidget->setLayer( mReferencedLayer );
110 if ( mReferencedLayer )
113 mCbxMapIdentification->setEnabled( mReferencedLayer->
hasGeometryType() );
119 void QgsRelationReferenceConfigDlg::on_mAddFilterButton_clicked()
121 Q_FOREACH (
QListWidgetItem* item, mAvailableFieldsList->selectedItems() )
123 addFilterField( item );
127 void QgsRelationReferenceConfigDlg::on_mRemoveFilterButton_clicked()
129 Q_FOREACH (
QListWidgetItem* item , mFilterFieldsList->selectedItems() )
131 mFilterFieldsList->takeItem( indexFromListWidgetItem( item ) );
132 mAvailableFieldsList->addItem( item );
139 myConfig.
insert(
"AllowNULL", mCbxAllowNull->isChecked() );
140 myConfig.
insert(
"OrderByValue", mCbxOrderByValue->isChecked() );
141 myConfig.
insert(
"ShowForm", mCbxShowForm->isChecked() );
142 myConfig.
insert(
"MapIdentification", mCbxMapIdentification->isEnabled() && mCbxMapIdentification->isChecked() );
143 myConfig.
insert(
"ReadOnly", mCbxReadOnly->isChecked() );
144 myConfig.
insert(
"Relation", mComboRelation->itemData( mComboRelation->currentIndex() ) );
146 if ( mFilterGroupBox->isChecked() )
149 filterFields.
reserve( mFilterFieldsList->count() );
150 for (
int i = 0; i < mFilterFieldsList->count(); i++ )
152 filterFields << mFilterFieldsList->item( i )->data( Qt::UserRole ).toString();
154 myConfig.
insert(
"FilterFields", filterFields );
156 myConfig.
insert(
"ChainFilters", mCbxChainFilters->isChecked() );
159 if ( mReferencedLayer )
167 void QgsRelationReferenceConfigDlg::loadFields()
169 mAvailableFieldsList->clear();
170 mFilterFieldsList->clear();
172 if ( mReferencedLayer )
176 for (
int i = 0; i < flds.
count(); i++ )
179 mAvailableFieldsList->item( mAvailableFieldsList->count() - 1 )->setData( Qt::UserRole, flds.
at( i ).
name() );
184 void QgsRelationReferenceConfigDlg::addFilterField(
const QString&
field )
186 for (
int i = 0; i < mAvailableFieldsList->count(); i++ )
188 if ( mAvailableFieldsList->item( i )->data( Qt::UserRole ).toString() ==
field )
190 addFilterField( mAvailableFieldsList->item( i ) );
196 void QgsRelationReferenceConfigDlg::addFilterField(
QListWidgetItem* item )
198 mAvailableFieldsList->takeItem( indexFromListWidgetItem( item ) );
199 mFilterFieldsList->addItem( item );
202 int QgsRelationReferenceConfigDlg::indexFromListWidgetItem(
QListWidgetItem* item )
206 for (
int i = 0; i < lw->
count(); i++ )
208 if ( lw->
item( i ) == item )
virtual QgsEditorWidgetConfig config() override
Create a configuration from the current GUI state.
bool contains(const Key &key) const
Container of fields for a vector layer.
void setDisplayExpression(const QString &displayExpression)
Set the preview expression, used to create a human readable preview string.
QList< QgsRelation > referencingRelations(int idx)
Get relations, where the foreign key is on this layer.
QgsRelationManager * relationManager() const
const QString displayExpression()
Get the preview expression, used to create a human readable preview string.
int count() const
Return number of items.
QString id() const
A (project-wide) unique id for this relation.
QString name() const
Gets the name of the field.
const QgsField & at(int i) const
Get field at particular index (must be in range 0..N-1)
QgsFields fields() const
Returns the list of fields of this layer.
bool hasGeometryType() const
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
virtual void setConfig(const QgsEditorWidgetConfig &config) override
Update the configuration widget to represent the given configuration.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsVectorLayer * referencedLayer() const
Access the referenced (parent) layer.
static QgsProject * instance()
access to canonical QgsProject instance
static QgsExpressionContext _getExpressionContext(const void *context)
iterator insert(const Key &key, const T &value)
static QgsExpressionContextScope * projectScope()
Creates a new scope which contains variables and functions relating to the current QGIS project...
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
QgsRelation relation(const QString &id) const
Get access to a relation by its id.
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Represents a vector layer which manages a vector based data sets.
QString referencedLayerId() const
Access the referenced (parent) layer's id.
QgsRelationReferenceConfigDlg(QgsVectorLayer *vl, int fieldIdx, QWidget *parent)
QString attributeAlias(int attributeIndex) const
Returns the alias of an attribute name or an empty string if there is no alias.