From 3a8c4945448a159759938a3d1d88fa0909185353 Mon Sep 17 00:00:00 2001 From: RumovZ Date: Sat, 25 Sep 2021 15:32:22 +0200 Subject: [PATCH] Only check flags of cached rows Speeds up the selection process (esp. Ctrl+A) by avoiding to fetch rows. Co-authored-by: BlueGreenMagick --- qt/aqt/browser/table/model.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/qt/aqt/browser/table/model.py b/qt/aqt/browser/table/model.py index 8e9a17ac8..22f64b0a4 100644 --- a/qt/aqt/browser/table/model.py +++ b/qt/aqt/browser/table/model.py @@ -119,6 +119,10 @@ class DataModel(QAbstractTableModel): ) return row + def get_cached_row(self, index: QModelIndex) -> Optional[CellRow]: + """Get row if it is cached, regardless of staleness.""" + return self._rows.get(self.get_item(index)) + # Reset def mark_cache_stale(self) -> None: @@ -326,8 +330,10 @@ class DataModel(QAbstractTableModel): return None def flags(self, index: QModelIndex) -> Qt.ItemFlags: - if self.get_row(index).is_deleted: - return Qt.ItemFlags(Qt.NoItemFlags) + # shortcut for large selections (Ctrl+A) to avoid fetching large numbers of rows at once + if row := self.get_cached_row(index): + if row.is_deleted: + return Qt.ItemFlags(Qt.NoItemFlags) return cast(Qt.ItemFlags, Qt.ItemIsEnabled | Qt.ItemIsSelectable)