mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Sort items in completion popups for history by MRU
This commit is contained in:
parent
16c3101490
commit
c53e46512e
@ -24,15 +24,16 @@ def containsq(x, prefix):
|
|||||||
|
|
||||||
class CompleteModel(QAbstractListModel): # {{{
|
class CompleteModel(QAbstractListModel): # {{{
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None, sort_func=sort_key):
|
||||||
QAbstractListModel.__init__(self, parent)
|
QAbstractListModel.__init__(self, parent)
|
||||||
|
self.sort_func = sort_func
|
||||||
self.all_items = self.current_items = ()
|
self.all_items = self.current_items = ()
|
||||||
self.current_prefix = ''
|
self.current_prefix = ''
|
||||||
|
|
||||||
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]
|
||||||
items = [x for x in items if x]
|
items = [x for x in items if x]
|
||||||
items = tuple(sorted(items, key=sort_key))
|
items = tuple(sorted(items, key=self.sort_func))
|
||||||
self.all_items = self.current_items = items
|
self.all_items = self.current_items = items
|
||||||
self.current_prefix = ''
|
self.current_prefix = ''
|
||||||
self.reset()
|
self.reset()
|
||||||
@ -74,7 +75,7 @@ class Completer(QListView): # {{{
|
|||||||
item_selected = pyqtSignal(object)
|
item_selected = pyqtSignal(object)
|
||||||
relayout_needed = pyqtSignal()
|
relayout_needed = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, completer_widget, max_visible_items=7):
|
def __init__(self, completer_widget, max_visible_items=7, sort_func=sort_key):
|
||||||
QListView.__init__(self)
|
QListView.__init__(self)
|
||||||
self.disable_popup = False
|
self.disable_popup = False
|
||||||
self.completer_widget = weakref.ref(completer_widget)
|
self.completer_widget = weakref.ref(completer_widget)
|
||||||
@ -85,7 +86,7 @@ class Completer(QListView): # {{{
|
|||||||
self.setSelectionBehavior(self.SelectRows)
|
self.setSelectionBehavior(self.SelectRows)
|
||||||
self.setSelectionMode(self.SingleSelection)
|
self.setSelectionMode(self.SingleSelection)
|
||||||
self.setAlternatingRowColors(True)
|
self.setAlternatingRowColors(True)
|
||||||
self.setModel(CompleteModel(self))
|
self.setModel(CompleteModel(self, sort_func=sort_func))
|
||||||
self.setMouseTracking(True)
|
self.setMouseTracking(True)
|
||||||
self.entered.connect(self.item_entered)
|
self.entered.connect(self.item_entered)
|
||||||
self.activated.connect(self.item_chosen)
|
self.activated.connect(self.item_chosen)
|
||||||
@ -256,7 +257,7 @@ class LineEdit(QLineEdit, LineEditECM):
|
|||||||
to complete non multiple fields as well.
|
to complete non multiple fields as well.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def __init__(self, parent=None, completer_widget=None):
|
def __init__(self, parent=None, completer_widget=None, sort_func=sort_key):
|
||||||
QLineEdit.__init__(self, parent)
|
QLineEdit.__init__(self, parent)
|
||||||
|
|
||||||
self.sep = ','
|
self.sep = ','
|
||||||
@ -266,7 +267,7 @@ class LineEdit(QLineEdit, LineEditECM):
|
|||||||
completer_widget = (self if completer_widget is None else
|
completer_widget = (self if completer_widget is None else
|
||||||
completer_widget)
|
completer_widget)
|
||||||
|
|
||||||
self.mcompleter = Completer(completer_widget)
|
self.mcompleter = Completer(completer_widget, sort_func=sort_func)
|
||||||
self.mcompleter.item_selected.connect(self.completion_selected,
|
self.mcompleter.item_selected.connect(self.completion_selected,
|
||||||
type=Qt.QueuedConnection)
|
type=Qt.QueuedConnection)
|
||||||
self.mcompleter.relayout_needed.connect(self.relayout)
|
self.mcompleter.relayout_needed.connect(self.relayout)
|
||||||
|
@ -13,6 +13,9 @@ class HistoryLineEdit2(LineEdit):
|
|||||||
|
|
||||||
max_history_items = None
|
max_history_items = None
|
||||||
|
|
||||||
|
def __init__(self, parent=None, completer_widget=None, sort_func=lambda x:None):
|
||||||
|
LineEdit.__init__(self, parent=parent, completer_widget=completer_widget, sort_func=sort_func)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def store_name(self):
|
def store_name(self):
|
||||||
return 'lineedit_history_'+self._name
|
return 'lineedit_history_'+self._name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user