diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-20 11:24:11 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-20 11:24:11 +0200 |
| commit | e6f90eb9ff852d8279485b7c8a68ef316ba0ae6e (patch) | |
| tree | 79462f1403238a207c656e08364ba40509ea38b0 | |
| parent | d548e6c7f9d6cdc84f0f019c27b3abeb7419e042 (diff) | |
| download | sb-builder-e6f90eb9ff852d8279485b7c8a68ef316ba0ae6e.tar.gz sb-builder-e6f90eb9ff852d8279485b7c8a68ef316ba0ae6e.zip | |
Hints tab: Select visible and Clear
Same pair as the Packages tab: tick every row the chips and search leave
visible, untick every row.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| -rw-r--r-- | sb_builder/hints_tab.py | 12 | ||||
| -rw-r--r-- | tests/test_gui.py | 12 |
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) |
