diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-20 11:39:21 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-20 11:39:21 +0200 |
| commit | 48cbd81a2c674b7d65a82f986ed7ad12e2f6869f (patch) | |
| tree | 818fbfb1bfe628d9b06c9a9a98a7aec257ddf94f /sb_builder/packages.py | |
| parent | 867e21f99361c0c566b268006b558ab08256824b (diff) | |
| download | sb-builder-48cbd81a2c674b7d65a82f986ed7ad12e2f6869f.tar.gz sb-builder-48cbd81a2c674b7d65a82f986ed7ad12e2f6869f.zip | |
Packages tab: a click anywhere on a row ticks or unticks it
Same as the Hints tab: the box is no longer user-checkable on its own and
one clicked handler toggles the row, so no click counts twice.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'sb_builder/packages.py')
| -rw-r--r-- | sb_builder/packages.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sb_builder/packages.py b/sb_builder/packages.py index 3ccbf40..72b5f93 100644 --- a/sb_builder/packages.py +++ b/sb_builder/packages.py @@ -117,8 +117,8 @@ class Model(QAbstractTableModel): return None def flags(self, index): - f = Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable - return f | Qt.ItemFlag.ItemIsUserCheckable if index.column() == 0 else f + # not user-checkable: PackagesTab._toggle owns every click, the box's included + return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable def data(self, index, role=Qt.ItemDataRole.DisplayRole): row, col = self.rows[index.row()], index.column() @@ -243,6 +243,7 @@ class PackagesTab(QWidget): for col, width in enumerate((28, 220, 110, 120, 120, 80)): self.table.setColumnWidth(col, width) self.table.selectionModel().currentRowChanged.connect(self.show_detail) + self.table.clicked.connect(self._toggle) self.detail = QLabel(textFormat=Qt.TextFormat.RichText, wordWrap=True, alignment=Qt.AlignmentFlag.AlignTop) self.detail.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) @@ -317,6 +318,13 @@ class PackagesTab(QWidget): def update_count(self): self.count.setText(f"{self.proxy.rowCount():,} shown · {len(self.model.checked)} selected") + def _toggle(self, index): + """A click anywhere on a row ticks or unticks it.""" + box = index.siblingAtColumn(0) + on = box.data(Qt.ItemDataRole.CheckStateRole) == Qt.CheckState.Checked + self.proxy.setData(box, Qt.CheckState.Unchecked if on else Qt.CheckState.Checked, + Qt.ItemDataRole.CheckStateRole) + def select_visible(self): for i in range(self.proxy.rowCount()): self.model.checked.add(self.proxy.index(i, 0).data(Qt.ItemDataRole.UserRole)["name"]) |
