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):
|
class CompleteModel(QAbstractListModel):
|
||||||
|
|
||||||
|
MAX_LEX_SORT_ITEMS = 5000
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
QAbstractListModel.__init__(self, parent)
|
QAbstractListModel.__init__(self, parent)
|
||||||
self.items = []
|
self.items = []
|
||||||
|
self.sorting = QCompleter.UnsortedModel
|
||||||
|
|
||||||
def set_items(self, items):
|
def set_items(self, items):
|
||||||
items = [unicode(x.strip()) for x in 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.lowered_items = [lower(x) for x in self.items]
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
@ -62,7 +70,7 @@ class MultiCompleteLineEdit(QLineEdit, LineEditECM):
|
|||||||
c.setWidget(self)
|
c.setWidget(self)
|
||||||
c.setCompletionMode(QCompleter.PopupCompletion)
|
c.setCompletionMode(QCompleter.PopupCompletion)
|
||||||
c.setCaseSensitivity(Qt.CaseInsensitive)
|
c.setCaseSensitivity(Qt.CaseInsensitive)
|
||||||
c.setModelSorting(QCompleter.UnsortedModel)
|
c.setModelSorting(self._model.sorting)
|
||||||
c.setCompletionRole(Qt.DisplayRole)
|
c.setCompletionRole(Qt.DisplayRole)
|
||||||
p = c.popup()
|
p = c.popup()
|
||||||
p.setMouseTracking(True)
|
p.setMouseTracking(True)
|
||||||
@ -146,6 +154,7 @@ class MultiCompleteLineEdit(QLineEdit, LineEditECM):
|
|||||||
return self._model.items
|
return self._model.items
|
||||||
def fset(self, items):
|
def fset(self, items):
|
||||||
self._model.set_items(items)
|
self._model.set_items(items)
|
||||||
|
self._completer.setModelSorting(self._model.sorting)
|
||||||
return property(fget=fget, fset=fset)
|
return property(fget=fget, fset=fset)
|
||||||
|
|
||||||
class MultiCompleteComboBox(EnComboBox):
|
class MultiCompleteComboBox(EnComboBox):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user