Fix reselect after bulk edit very slow

This commit is contained in:
Kovid Goyal 2010-09-29 12:49:52 -06:00
parent 462e670727
commit 2f6fa5c8a8
2 changed files with 27 additions and 26 deletions

View File

@ -188,8 +188,9 @@ class EditMetadataAction(InterfaceAction):
finally: finally:
self.gui.tags_view.blockSignals(False) self.gui.tags_view.blockSignals(False)
if changed: if changed:
self.gui.library_view.model().resort(reset=False) m = self.gui.library_view.model()
self.gui.library_view.model().research() m.resort(reset=False)
m.research()
self.gui.tags_view.recount() self.gui.tags_view.recount()
if self.gui.cover_flow: if self.gui.cover_flow:
self.gui.cover_flow.dataChanged() self.gui.cover_flow.dataChanged()

View File

@ -9,7 +9,7 @@ import os
from functools import partial from functools import partial
from PyQt4.Qt import QTableView, Qt, QAbstractItemView, QMenu, pyqtSignal, \ from PyQt4.Qt import QTableView, Qt, QAbstractItemView, QMenu, pyqtSignal, \
QModelIndex, QIcon QModelIndex, QIcon, QItemSelection
from calibre.gui2.library.delegates import RatingDelegate, PubDateDelegate, \ from calibre.gui2.library.delegates import RatingDelegate, PubDateDelegate, \
TextDelegate, DateDelegate, TagsDelegate, CcTextDelegate, \ TextDelegate, DateDelegate, TagsDelegate, CcTextDelegate, \
@ -488,29 +488,29 @@ class BooksView(QTableView): # {{{
Select rows identified by identifiers. identifiers can be a set of ids, Select rows identified by identifiers. identifiers can be a set of ids,
row numbers or QModelIndexes. row numbers or QModelIndexes.
''' '''
selmode = self.selectionMode()
self.setSelectionMode(QAbstractItemView.MultiSelection)
try:
rows = set([x.row() if hasattr(x, 'row') else x for x in rows = set([x.row() if hasattr(x, 'row') else x for x in
identifiers]) identifiers])
if using_ids: if using_ids:
rows = set([]) rows = set([])
identifiers = set(identifiers) identifiers = set(identifiers)
m = self.model() m = self.model()
for row in range(m.rowCount(QModelIndex())): for row in xrange(m.rowCount(QModelIndex())):
if m.id(row) in identifiers: if m.id(row) in identifiers:
rows.add(row) rows.add(row)
rows = list(sorted(rows))
if rows: if rows:
row = list(sorted(rows))[0] row = rows[0]
if change_current: if change_current:
self.set_current_row(row, select=False) self.set_current_row(row, select=False)
if scroll: if scroll:
self.scroll_to_row(row) self.scroll_to_row(row)
self.clearSelection() sm = self.selectionModel()
for r in rows: sel = QItemSelection()
self.selectRow(r) m = self.model()
finally: max_col = m.columnCount(QModelIndex()) - 1
self.setSelectionMode(selmode) for row in rows:
sel.select(m.index(row, 0), m.index(row, max_col))
sm.select(sel, sm.ClearAndSelect)
def close(self): def close(self):
self._model.close() self._model.close()