aboutsummaryrefslogtreecommitdiffstats
path: root/sb_builder/packages.py
diff options
context:
space:
mode:
Diffstat (limited to 'sb_builder/packages.py')
-rw-r--r--sb_builder/packages.py12
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"])