diff options
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"]) |
