aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sb_builder/hints_tab.py10
-rw-r--r--tests/test_gui.py7
2 files changed, 15 insertions, 2 deletions
diff --git a/sb_builder/hints_tab.py b/sb_builder/hints_tab.py
index 2956abc..bf2011a 100644
--- a/sb_builder/hints_tab.py
+++ b/sb_builder/hints_tab.py
@@ -71,6 +71,7 @@ class HintsTab(QWidget):
self.table.horizontalHeader().setStretchLastSection(True)
for col, width in enumerate((28, 220, 110, 110, 110)):
self.table.setColumnWidth(col, width)
+ self.table.cellClicked.connect(self._toggle)
self.status = QLabel()
self.check_btn = QPushButton("Check upstream")
@@ -122,7 +123,7 @@ class HintsTab(QWidget):
for i, r in enumerate(self.rows):
r["state"] = upstream.state(r, self.names, self.versions, self.errors)
box = QTableWidgetItem()
- box.setFlags(Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsUserCheckable)
+ box.setFlags(Qt.ItemFlag.ItemIsEnabled) # not user-checkable: _toggle owns every click
on = r["state"] == "outdated" if check_outdated else r["name"] in checked
box.setCheckState(Qt.CheckState.Checked if on else Qt.CheckState.Unchecked)
box.setData(Qt.ItemDataRole.UserRole, r["name"])
@@ -153,6 +154,13 @@ class HintsTab(QWidget):
n = len(self.checked())
self.status.setText(f"{shown} shown · {n} selected" + (f" · {self.failure}" if self.failure else ""))
+ def _toggle(self, row, _col):
+ """A click anywhere on a row, its box included, ticks or unticks it."""
+ box = self.table.item(row, 0)
+ box.setCheckState(Qt.CheckState.Unchecked if box.checkState() == Qt.CheckState.Checked
+ else Qt.CheckState.Checked)
+ self.refilter()
+
def check_rows(self, on):
"""Tick every visible row (on), or untick every row."""
state = Qt.CheckState.Checked if on else Qt.CheckState.Unchecked
diff --git a/tests/test_gui.py b/tests/test_gui.py
index 8a5b6e3..8353441 100644
--- a/tests/test_gui.py
+++ b/tests/test_gui.py
@@ -491,7 +491,12 @@ class SmokeTest(unittest.TestCase):
self.assertEqual(len(tab.checked()), 3)
tab.check_rows(False)
tab.select("nuclei")
- tab.table.item(tab.table.currentRow(), 0).setCheckState(Qt.CheckState.Checked)
+ tab.table.cellClicked.emit(tab.table.currentRow(), 2) # a click on the row's values
+ self.assertEqual(tab.checked(), ["nuclei"])
+ tab.table.cellClicked.emit(tab.table.currentRow(), 1)
+ self.assertEqual(tab.checked(), [])
+ tab.table.cellClicked.emit(tab.table.currentRow(), 0) # the box column too
+ self.assertEqual(tab.checked(), ["nuclei"])
tab.no_dl.setChecked(True)
tab.update_selected()
self.assertIn(("job-start", "hint-update", "nuclei=3.12.0", "--no-dl"), remote.calls)