Skip to content

Commit

Permalink
Merge pull request #5287 from pblottiere/null
Browse files Browse the repository at this point in the history
[bugfix] Properly update filter comboboxes of relation reference widget
  • Loading branch information
pblottiere committed Oct 10, 2017
2 parents 61dcba4 + fc876fe commit e6dcfa4
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/gui/editorwidgets/qgsrelationreferencewidget.cpp
Expand Up @@ -300,6 +300,15 @@ void QgsRelationReferenceWidget::setForeignKey( const QVariant &value )
void QgsRelationReferenceWidget::deleteForeignKey()
{
QVariant nullValue = QgsApplication::nullRepresentation();

// deactivate filter comboboxes
if ( mChainFilters && !mFilterComboBoxes.isEmpty() )
{
QComboBox *cb = mFilterComboBoxes.first();
cb->setCurrentIndex( 0 );
disableChainedComboBoxes( cb );
}

if ( mReadOnlySelector )
{
QString nullText;
Expand Down Expand Up @@ -511,6 +520,13 @@ void QgsRelationReferenceWidget::init()
mFilterCache[mFilterFields[i]][cf] << nf;
}
}

if ( !mFilterComboBoxes.isEmpty() )
{
QComboBox *cb = mFilterComboBoxes.first();
cb->setCurrentIndex( 0 );
disableChainedComboBoxes( cb );
}
}
}
else
Expand Down
44 changes: 44 additions & 0 deletions tests/src/gui/testqgsrelationreferencewidget.cpp
Expand Up @@ -40,6 +40,7 @@ class TestQgsRelationReferenceWidget : public QObject

void testChainFilter();
void testChainFilterRefreshed();
void testChainFilterDeleteForeignKey();

private:
std::unique_ptr<QgsVectorLayer> mLayer1;
Expand Down Expand Up @@ -222,5 +223,48 @@ void TestQgsRelationReferenceWidget::testChainFilterRefreshed()
QCOMPARE( cbs[2]->currentText(), QString( "sleeve" ) );
}

void TestQgsRelationReferenceWidget::testChainFilterDeleteForeignKey()
{
// init a relation reference widget
QStringList filterFields = { "material", "diameter", "raccord" };

QgsRelationReferenceWidget w( new QWidget() );
w.setChainFilters( true );
w.setFilterFields( filterFields );
w.setRelation( *mRelation, true );
w.init();

// check the default status of filter comboboxes
QList<QComboBox *> cbs = w.mFilterComboBoxes;

QCOMPARE( cbs[0]->currentText(), QString( "material" ) );
QCOMPARE( cbs[0]->isEnabled(), true );

QCOMPARE( cbs[1]->currentText(), QString( "diameter" ) );
QCOMPARE( cbs[1]->isEnabled(), false );

QCOMPARE( cbs[2]->currentText(), QString( "raccord" ) );
QCOMPARE( cbs[2]->isEnabled(), false );

// set a foreign key
w.setForeignKey( QVariant( 11 ) );

QCOMPARE( cbs[0]->currentText(), QString( "iron" ) );
QCOMPARE( cbs[1]->currentText(), QString( "120" ) );
QCOMPARE( cbs[2]->currentText(), QString( "sleeve" ) );

// delete the foreign key
w.deleteForeignKey();

QCOMPARE( cbs[0]->currentText(), QString( "material" ) );
QCOMPARE( cbs[0]->isEnabled(), true );

QCOMPARE( cbs[1]->currentText(), QString( "diameter" ) );
QCOMPARE( cbs[1]->isEnabled(), false );

QCOMPARE( cbs[2]->currentText(), QString( "raccord" ) );
QCOMPARE( cbs[2]->isEnabled(), false );
}

QGSTEST_MAIN( TestQgsRelationReferenceWidget )
#include "testqgsrelationreferencewidget.moc"

0 comments on commit e6dcfa4

Please sign in to comment.