Fix #792191 (Search-while-typing of authors in Edit Metadata takes a long time)

This commit is contained in:
Kovid Goyal 2011-06-03 10:10:21 -06:00
parent 3048729e8c
commit ea64d94084

View File

@ -15,13 +15,21 @@ from calibre.gui2.widgets import EnComboBox, LineEditECM
class CompleteModel(QAbstractListModel):
MAX_LEX_SORT_ITEMS = 5000
def __init__(self, parent=None):
QAbstractListModel.__init__(self, parent)
self.items = []
self.sorting = QCompleter.UnsortedModel
def set_items(self, items):
items = [unicode(x.strip()) for x in items]
self.items = list(sorted(items, key=lambda x: sort_key(x)))
if len(items) < self.MAX_LEX_SORT_ITEMS:
self.items = sorted(items, key=lambda x: sort_key(x))
self.sorting = QCompleter.UnsortedModel
else:
self.items = sorted(items, key=lambda x:x.lower())
self.sorting = QCompleter.CaseInsensitivelySortedModel
self.lowered_items = [lower(x) for x in self.items]
self.reset()
@ -62,7 +70,7 @@ class MultiCompleteLineEdit(QLineEdit, LineEditECM):
c.setWidget(self)
c.setCompletionMode(QCompleter.PopupCompletion)
c.setCaseSensitivity(Qt.CaseInsensitive)
c.setModelSorting(QCompleter.UnsortedModel)
c.setModelSorting(self._model.sorting)
c.setCompletionRole(Qt.DisplayRole)
p = c.popup()
p.setMouseTracking(True)
@ -146,6 +154,7 @@ class MultiCompleteLineEdit(QLineEdit, LineEditECM):
return self._model.items
def fset(self, items):
self._model.set_items(items)
self._completer.setModelSorting(self._model.sorting)
return property(fget=fget, fset=fset)
class MultiCompleteComboBox(EnComboBox):