Skip to content

Commit ff20d18

Browse files
authored
Merge pull request #8925 from signedav/basic-values
Enable/disable value relation widget
2 parents b5febe5 + 237e0bc commit ff20d18

2 files changed

Lines changed: 23 additions & 6 deletions

File tree

src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ void QgsValueRelationWidgetWrapper::setValue( const QVariant &value )
193193
if ( item )
194194
{
195195
item->setCheckState( checkList.contains( item->data( Qt::UserRole ).toString() ) ? Qt::Checked : Qt::Unchecked );
196+
//re-set enabled state because it's lost after reloading items
197+
item->setFlags( mEnabled ? item->flags() | Qt::ItemIsEnabled : item->flags() & ~Qt::ItemIsEnabled );
196198
lastChangedItem = item;
197199
}
198200
}
@@ -399,10 +401,7 @@ void QgsValueRelationWidgetWrapper::setEnabled( bool enabled )
399401
QTableWidgetItem *item = mTableWidget->item( j, i );
400402
if ( item )
401403
{
402-
if ( enabled )
403-
item->setFlags( item->flags() | Qt::ItemIsEnabled );
404-
else
405-
item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
404+
item->setFlags( enabled ? item->flags() | Qt::ItemIsEnabled : item->flags() & ~Qt::ItemIsEnabled );
406405
}
407406
}
408407
}

tests/src/python/test_qgseditwidgets.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
from qgis.gui import QgsGui
1919

2020
from qgis.testing import start_app, unittest
21-
from qgis.PyQt.QtCore import QVariant
22-
from qgis.PyQt.QtWidgets import QTextEdit
21+
from qgis.PyQt.QtCore import Qt, QVariant
22+
from qgis.PyQt.QtWidgets import QTextEdit, QTableWidgetItem
2323

2424
start_app()
2525

@@ -108,6 +108,24 @@ def test_enableDisable(self):
108108
wrapper.setEnabled(True)
109109
self.assertTrue(widget.isEnabled())
110110

111+
def test_enableDisableOnTableWidget(self):
112+
reg = QgsGui.editorWidgetRegistry()
113+
layer = QgsVectorLayer("none?field=number:integer", "layer", "memory")
114+
wrapper = reg.create('ValueRelation', layer, 0, {'AllowMulti': 'True'}, None, None)
115+
116+
widget = wrapper.widget()
117+
item = QTableWidgetItem('first item')
118+
widget.setItem(0, 0, item)
119+
120+
# does not change the state the whole widget but the single items instead
121+
wrapper.setEnabled(False)
122+
# widget still true, but items false
123+
self.assertTrue(widget.isEnabled())
124+
self.assertNotEqual(widget.item(0, 0).flags(), widget.item(0, 0).flags() | Qt.ItemIsEnabled)
125+
wrapper.setEnabled(True)
126+
self.assertTrue(widget.isEnabled())
127+
self.assertEqual(widget.item(0, 0).flags(), widget.item(0, 0).flags() | Qt.ItemIsEnabled)
128+
111129

112130
class TestQgsValueMapEditWidget(unittest.TestCase):
113131
VALUEMAP_NULL_TEXT = "{2839923C-8B7D-419E-B84B-CA2FE9B80EC7}"

0 commit comments

Comments
 (0)