aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sb_builder/hints_tab.py12
-rw-r--r--tests/test_gui.py12
2 files changed, 23 insertions, 1 deletions
diff --git a/sb_builder/hints_tab.py b/sb_builder/hints_tab.py
index 6be57fc..f4bc378 100644
--- a/sb_builder/hints_tab.py
+++ b/sb_builder/hints_tab.py
@@ -81,6 +81,10 @@ class HintsTab(QWidget):
self.no_dl.setToolTip('Write DOWNLOAD="no": slackrepo uses the source already in its cache')
bar = QHBoxLayout()
bar.addWidget(self.status)
+ for label, on in (("Select visible", True), ("Clear", False)):
+ b = QPushButton(label)
+ b.clicked.connect(lambda _c, on=on: self.check_rows(on))
+ bar.addWidget(b)
bar.addStretch()
for w in (self.check_btn, self.update_btn, self.no_dl):
bar.addWidget(w)
@@ -145,6 +149,14 @@ class HintsTab(QWidget):
n = len(self.checked())
self.status.setText(f"{shown} shown · {n} selected" + (f" · {self.failure}" if self.failure else ""))
+ def check_rows(self, on):
+ """Tick every visible row (on), or untick every row."""
+ state = Qt.CheckState.Checked if on else Qt.CheckState.Unchecked
+ for i in range(self.table.rowCount()):
+ if not on or not self.table.isRowHidden(i):
+ self.table.item(i, 0).setCheckState(state)
+ self.refilter()
+
def checked(self):
return [self.table.item(i, 0).data(Qt.ItemDataRole.UserRole)
for i in range(self.table.rowCount())
diff --git a/tests/test_gui.py b/tests/test_gui.py
index aa9c03b..69f3a69 100644
--- a/tests/test_gui.py
+++ b/tests/test_gui.py
@@ -29,7 +29,7 @@ import unittest # noqa: E402
ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
sys.path.insert(0, ROOT)
-from PyQt6.QtCore import QCoreApplication, QEvent, QObject, QPointF, QProcess, pyqtSignal # noqa: E402
+from PyQt6.QtCore import QCoreApplication, QEvent, QObject, QPointF, QProcess, Qt, pyqtSignal # noqa: E402
from PyQt6.QtGui import QColor # noqa: E402
from PyQt6.QtWidgets import QApplication # noqa: E402
@@ -475,6 +475,16 @@ class SmokeTest(unittest.TestCase):
tab.chips["current"].setChecked(True)
visible = [tab.table.item(i, 1).text() for i in range(3) if not tab.table.isRowHidden(i)]
self.assertEqual(visible, ["curl"])
+ tab.check_rows(True) # visible only: curl, under the "current" chip
+ self.assertEqual(sorted(tab.checked()), ["curl", "nuclei"])
+ tab.check_rows(False)
+ self.assertEqual(tab.checked(), [])
+ tab.chips["current"].setChecked(False)
+ tab.check_rows(True)
+ 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.no_dl.setChecked(True)
tab.update_selected()
self.assertIn(("job-start", "hint-update", "nuclei=3.12.0", "--no-dl"), remote.calls)