Skip to content

Commit

Permalink
Fix missing signals, duplicate signals sent by QgsFieldComboBox
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jan 4, 2020
1 parent f8e5861 commit f961449
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 4 deletions.
15 changes: 12 additions & 3 deletions src/gui/qgsfieldcombobox.cpp
Expand Up @@ -56,18 +56,27 @@ QgsVectorLayer *QgsFieldComboBox::layer() const

void QgsFieldComboBox::setField( const QString &fieldName )
{
const QString prevField = currentField();
QModelIndex idx = mFieldProxyModel->sourceFieldModel()->indexFromName( fieldName );
if ( idx.isValid() )
{
QModelIndex proxyIdx = mFieldProxyModel->mapFromSource( idx );
if ( proxyIdx.isValid() )
{
setCurrentIndex( proxyIdx.row() );
emit fieldChanged( currentField() );
return;
}
else
{
setCurrentIndex( -1 );
}
}
setCurrentIndex( -1 );
else
{
setCurrentIndex( -1 );
}

if ( prevField != currentField() )
emit fieldChanged( currentField() );
}

QString QgsFieldComboBox::currentField() const
Expand Down
24 changes: 23 additions & 1 deletion tests/src/python/test_qgsfieldcombobox.py
Expand Up @@ -15,9 +15,9 @@
from qgis.core import QgsFields, QgsVectorLayer, QgsFieldProxyModel
from qgis.gui import QgsFieldComboBox
from qgis.PyQt.QtCore import QVariant, Qt
from qgis.PyQt.QtTest import QSignalSpy

from qgis.testing import start_app, unittest

start_app()


Expand Down Expand Up @@ -58,6 +58,28 @@ def testFilter(self):
w.setField('fldint')
self.assertEqual(w.currentField(), 'fldint')

def testSignals(self):
l = create_layer()
w = QgsFieldComboBox()
w.setLayer(l)

spy = QSignalSpy(w.fieldChanged)
w.setField('fldint2')
self.assertEqual(len(spy), 1)
self.assertEqual(spy[-1][0], 'fldint2')
w.setField('fldint2')
self.assertEqual(len(spy), 1)
self.assertEqual(spy[-1][0], 'fldint2')
w.setField('fldint')
self.assertEqual(len(spy), 2)
self.assertEqual(spy[-1][0], 'fldint')
w.setField(None)
self.assertEqual(len(spy), 3)
self.assertEqual(spy[-1][0], None)
w.setField(None)
self.assertEqual(len(spy), 3)
self.assertEqual(spy[-1][0], None)


if __name__ == '__main__':
unittest.main()

0 comments on commit f961449

Please sign in to comment.