Skip to content
Permalink
Browse files

Merge pull request #38968 from 3nids/rel-ref-fix-ps

fix edge case where fkey is 0 in relation reference widget
  • Loading branch information
nyalldawson committed Sep 24, 2020
2 parents 94fd3d9 + 72fa037 commit c7633874aa3a4069746b14633cdd86eff343b834
@@ -151,6 +151,6 @@ void QgsFeatureFilterModel::setExtraIdentifierValues( const QVariantList &extraI

void QgsFeatureFilterModel::setExtraIdentifierValueToNull()
{
setExtraIdentifierValue( QVariantList() );
setExtraIdentifierValue( nullIdentifier() );
}

@@ -612,7 +612,7 @@ void QgsFeaturePickerModelBase::reload()

void QgsFeaturePickerModelBase::setExtraIdentifierValue( const QVariant &extraIdentifierValue )
{
if ( extraIdentifierValue == mExtraIdentifierValue && !identifierIsNull( extraIdentifierValue ) )
if ( extraIdentifierValue == mExtraIdentifierValue && !identifierIsNull( extraIdentifierValue ) && !identifierIsNull( mExtraIdentifierValue ) )
return;

if ( mIsSettingExtraIdentifierValue )
@@ -599,7 +599,7 @@ void QgsRelationReferenceWidget::init()
}

// Only connect after iterating, to have only one iterator on the referenced table at once
connect( mComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsRelationReferenceWidget::comboReferenceChanged );
connect( mComboBox, qgis::overload<int>::of( &QComboBox::currentIndexChanged ), this, &QgsRelationReferenceWidget::comboReferenceChanged );

QApplication::restoreOverrideCursor();

@@ -1074,7 +1074,7 @@ void QgsRelationReferenceWidget::disableChainedComboBoxes( const QComboBox *scb

void QgsRelationReferenceWidget::emitForeignKeysChanged( const QVariantList &foreignKeys, bool force )
{
if ( foreignKeys == mForeignKeys && force == false )
if ( foreignKeys == mForeignKeys && force == false && qVariantListIsNull( foreignKeys ) == qVariantListIsNull( mForeignKeys ) )
return;

mForeignKeys = foreignKeys;
@@ -518,22 +518,27 @@ void TestQgsRelationReferenceWidget::testSetGetForeignKey()
w.setRelation( *mRelation, true );
w.init();

QSignalSpy spy( &w, SIGNAL( foreignKeyChanged( QVariant ) ) );
QSignalSpy spy( &w, &QgsRelationReferenceWidget::foreignKeysChanged );

w.setForeignKeys( QVariantList() << 0 );
QCOMPARE( w.foreignKeys().at( 0 ), QVariant( 0 ) );
QCOMPARE( w.mComboBox->currentText(), QStringLiteral( "(0)" ) );
QCOMPARE( spy.count(), 1 );

w.setForeignKeys( QVariantList() << 11 );
QCOMPARE( w.foreignKeys().at( 0 ), QVariant( 11 ) );
QCOMPARE( w.mComboBox->currentText(), QStringLiteral( "(11)" ) );
QCOMPARE( spy.count(), 1 );
QCOMPARE( spy.count(), 2 );

w.setForeignKeys( QVariantList() << 12 );
QCOMPARE( w.foreignKeys().at( 0 ), QVariant( 12 ) );
QCOMPARE( w.mComboBox->currentText(), QStringLiteral( "(12)" ) );
QCOMPARE( spy.count(), 2 );
QCOMPARE( spy.count(), 3 );

w.setForeignKeys( QVariantList() << QVariant() );
QVERIFY( w.foreignKeys().at( 0 ).isNull() );
QVERIFY( w.foreignKeys().at( 0 ).isValid() );
QCOMPARE( spy.count(), 3 );
QCOMPARE( spy.count(), 4 );
}

// Test issue https://github.com/qgis/QGIS/issues/29884

0 comments on commit c763387

Please sign in to comment.
You can’t perform that action at this time.