mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #792191 (Search-while-typing of authors in Edit Metadata takes a long time)
This commit is contained in:
parent
3048729e8c
commit
ea64d94084
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user