Skip to content

Commit 7527651

Browse files
committed
Fix RelationReference widget
previously it would not return any value when the content changed since 868eeb2
1 parent d79268c commit 7527651

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

src/gui/editorwidgets/qgsrelationreferencewidget.cpp

+14-12
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ QVariant QgsRelationReferenceWidget::foreignKey()
364364
}
365365
else
366366
{
367-
return mFidFkMap.value( varFid.value<QgsFeatureId>() );
367+
return mFeature.attribute( mFkeyFieldIdx );
368368
}
369369
}
370370
}
@@ -510,8 +510,12 @@ void QgsRelationReferenceWidget::init()
510510
mFeatureListModel->setInjectNull( mAllowNull );
511511
if ( mOrderByValue )
512512
{
513-
int sortIdx = mReferencedLayer->fieldNameIndex( QgsExpression( mReferencedLayer->displayExpression() ).referencedColumns().first() );
514-
mFilterModel->sort( sortIdx );
513+
const QStringList referencedColumns = QgsExpression( mReferencedLayer->displayExpression() ).referencedColumns();
514+
if ( referencedColumns.size() > 0 )
515+
{
516+
int sortIdx = mReferencedLayer->fieldNameIndex( referencedColumns.first() );
517+
mFilterModel->sort( sortIdx );
518+
}
515519
}
516520

517521
mComboBox->setModel( mFeatureListModel );
@@ -531,7 +535,7 @@ void QgsRelationReferenceWidget::init()
531535
mComboBox->setCurrentIndex( mComboBox->findData( mFeature.id(), QgsAttributeTableModel::FeatureIdRole ) );
532536

533537
// Only connect after iterating, to have only one iterator on the referenced table at once
534-
connect( mComboBox, SIGNAL( activated( int ) ), this, SLOT( comboReferenceChanged( int ) ) );
538+
connect( mComboBox, SIGNAL( currentIndexChanged(int) ), this, SLOT( comboReferenceChanged( int ) ) );
535539
QApplication::restoreOverrideCursor();
536540
}
537541
}
@@ -671,12 +675,11 @@ void QgsRelationReferenceWidget::mapIdentification()
671675

672676
void QgsRelationReferenceWidget::comboReferenceChanged( int index )
673677
{
674-
QgsFeatureId fid = mComboBox->itemData( index ).value<QgsFeatureId>();
675-
QgsFeature feat;
676-
mReferencedLayer->getFeatures( QgsFeatureRequest().setFilterFid( fid ) ).nextFeature( feat );
677-
highlightFeature( feat );
678-
updateAttributeEditorFrame( feat );
679-
emit foreignKeyChanged( mFidFkMap.value( fid ) );
678+
QgsFeatureId fid = mComboBox->itemData( index, QgsAttributeTableModel::FeatureIdRole ).value<QgsFeatureId>();
679+
mReferencedLayer->getFeatures( QgsFeatureRequest().setFilterFid( fid ) ).nextFeature( mFeature );
680+
highlightFeature( mFeature );
681+
updateAttributeEditorFrame( mFeature );
682+
emit foreignKeyChanged( mFeature.attribute( mFkeyFieldIdx ) );
680683
}
681684

682685
void QgsRelationReferenceWidget::updateAttributeEditorFrame( const QgsFeature feature )
@@ -708,6 +711,7 @@ void QgsRelationReferenceWidget::featureIdentified( const QgsFeature& feature )
708711
else
709712
{
710713
mComboBox->setCurrentIndex( mComboBox->findData( feature.attribute( mFkeyFieldIdx ), QgsAttributeTableModel::FeatureIdRole ) );
714+
mFeature = feature;
711715
}
712716

713717
mRemoveFKButton->setEnabled( mIsEditable );
@@ -802,8 +806,6 @@ void QgsRelationReferenceWidget::filterChanged()
802806
{
803807
const QString fieldName = cb->property( "Field" ).toString();
804808

805-
cb->itemData( cb->currentIndex() );
806-
807809
if ( cb->currentText() == nullValue.toString() )
808810
{
809811
filters << QString( "\"%1\" IS NULL" ).arg( fieldName );

src/gui/editorwidgets/qgsrelationreferencewidget.h

-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,6 @@ class GUI_EXPORT QgsRelationReferenceWidget : public QWidget
176176

177177
// UI
178178
QVBoxLayout* mTopLayout;
179-
QHash<QgsFeatureId, QVariant> mFidFkMap; // Mapping from feature id => foreign key
180179
QToolButton* mMapIdentificationButton;
181180
QToolButton* mRemoveFKButton;
182181
QToolButton* mOpenFormButton;

0 commit comments

Comments
 (0)