From ea64d94084821fefcd9f44025d651ff19bc0d183 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 Jun 2011 10:10:21 -0600 Subject: [PATCH] Fix #792191 (Search-while-typing of authors in Edit Metadata takes a long time) --- src/calibre/gui2/complete.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/complete.py b/src/calibre/gui2/complete.py index c99cd47373..60700c65cc 100644 --- a/src/calibre/gui2/complete.py +++ b/src/calibre/gui2/complete.py @@ -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):