mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-10-31 16:41:27 +01:00
fix(device_manager): compare SortTableItem by text when it has no sort data
This commit is contained in:
1 parent
9c8800a8fa
commit
68d5093002
2 files changed
+22
-3
No files matched your search
@@ -148,7 +148,7 @@ class SortTableItem(QtWidgets.QTableWidgetItem):
|
||||
"""
|
||||
Table item that sorts by the value stored under the UserRole data role.
|
||||
|
||||
Items without UserRole data fall back to the QTableWidgetItem comparison.
|
||||
If either item has no UserRole data, the items are compared by their text.
|
||||
|
||||
Args:
|
||||
*args: Positional arguments forwarded to QTableWidgetItem.
|
||||
@@ -178,7 +178,7 @@ class SortTableItem(QtWidgets.QTableWidgetItem):
|
||||
values = self._sort_values(other)
|
||||
if values is not None:
|
||||
return values[0] < values[1]
|
||||
return super().__lt__(other)
|
||||
return self.text() < other.text()
|
||||
|
||||
def __gt__(self, other: QtWidgets.QTableWidgetItem) -> bool:
|
||||
"""Override greater-than operator for sorting."""
|
||||
@@ -187,7 +187,7 @@ class SortTableItem(QtWidgets.QTableWidgetItem):
|
||||
values = self._sort_values(other)
|
||||
if values is not None:
|
||||
return values[0] > values[1]
|
||||
return super().__gt__(other)
|
||||
return self.text() > other.text()
|
||||
|
||||
|
||||
class DeviceTable(BECWidget, QtWidgets.QWidget):
|
||||
|
||||
@@ -315,6 +315,25 @@ class TestSortTableItem:
|
||||
assert high > low
|
||||
assert not high < low
|
||||
|
||||
def test_falls_back_to_text_without_data(self):
|
||||
"""Items without UserRole data are compared by their text."""
|
||||
a, b = self._item(text="a"), self._item(text="b")
|
||||
assert a < b and b > a
|
||||
assert not b < a and not a > b
|
||||
assert self._item(1, text="b") > QtWidgets.QTableWidgetItem("a")
|
||||
assert self._item(1, text="b") < self._item(text="c")
|
||||
|
||||
def test_table_sorts_items_without_data(self, qtbot):
|
||||
"""A table of items without UserRole data sorts by text in both directions."""
|
||||
table = QtWidgets.QTableWidget(3, 1)
|
||||
qtbot.addWidget(table)
|
||||
for row, text in enumerate(["b", "c", "a"]):
|
||||
table.setItem(row, 0, SortTableItem(text))
|
||||
table.sortItems(0, QtCore.Qt.SortOrder.AscendingOrder)
|
||||
assert [table.item(row, 0).text() for row in range(3)] == ["a", "b", "c"]
|
||||
table.sortItems(0, QtCore.Qt.SortOrder.DescendingOrder)
|
||||
assert [table.item(row, 0).text() for row in range(3)] == ["c", "b", "a"]
|
||||
|
||||
def test_sort_key(self):
|
||||
"""A sort key maps the UserRole data before comparing."""
|
||||
|
||||
|
||||
Reference in new issue
Block a user