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
QgsFields fields() const
Returns the list of fields of this layer.
QgsVectorLayer * referencedLayer() const
Access the referenced (parent) layer.
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.
const QString displayExpression()
Get the preview expression, used to create a human readable preview string.
QString id() const
A (project-wide) unique id for this relation.
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...
QgsRelation relation(const QString &id) const
Get access to a relation by its id.
QString name() const
Gets the name of the field.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
int count() const
Return number of items.
QString attributeAlias(int attributeIndex) const
Returns the alias of an attribute name or an empty string if there is no alias.
const QgsField & at(int i) const
Get field at particular index (must be in range 0..N-1)
QString referencedLayerId() const
Access the referenced (parent) layer's id.
bool hasGeometryType() const
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
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.
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.
QgsRelationManager * relationManager() const
QgsRelationReferenceConfigDlg(QgsVectorLayer *vl, int fieldIdx, QWidget *parent)