added eviction, attached it to list changes signal
This commit is contained in:
@ -14,8 +14,12 @@ class DictListWidget(QListWidget):
|
|||||||
self.setSelectionMode(QListWidget.ExtendedSelection)
|
self.setSelectionMode(QListWidget.ExtendedSelection)
|
||||||
self.items = {}
|
self.items = {}
|
||||||
self._add_menu()
|
self._add_menu()
|
||||||
|
|
||||||
shortcut(self, "Del", self.delete_selected, context=Qt.WidgetShortcut)
|
shortcut(self, "Del", self.delete_selected, context=Qt.WidgetShortcut)
|
||||||
|
|
||||||
|
self.nkeep = None
|
||||||
|
self.model().rowsInserted.connect(self.on_evict)
|
||||||
|
|
||||||
|
|
||||||
def _add_menu(self):
|
def _add_menu(self):
|
||||||
self.menu = menu = RClickMenu(self)
|
self.menu = menu = RClickMenu(self)
|
||||||
@ -100,6 +104,7 @@ class DictListWidget(QListWidget):
|
|||||||
|
|
||||||
|
|
||||||
def enable_sort_by_timestamp(self):
|
def enable_sort_by_timestamp(self):
|
||||||
|
# fall back to name for identical timestamps
|
||||||
self.set_sort_key(lambda x: (x.timestamps.max(), x.text()))
|
self.set_sort_key(lambda x: (x.timestamps.max(), x.text()))
|
||||||
|
|
||||||
|
|
||||||
@ -107,4 +112,33 @@ class DictListWidget(QListWidget):
|
|||||||
self.set_sort_key(None)
|
self.set_sort_key(None)
|
||||||
|
|
||||||
|
|
||||||
|
def set_nkeep(self, n):
|
||||||
|
self.nkeep = n
|
||||||
|
self.on_evict()
|
||||||
|
|
||||||
|
|
||||||
|
def on_evict(self):
|
||||||
|
if self.nkeep:
|
||||||
|
self.evict(self.nkeep)
|
||||||
|
|
||||||
|
|
||||||
|
def evict(self, nkeep):
|
||||||
|
items = self.items.values()
|
||||||
|
|
||||||
|
# map order in dict to indices
|
||||||
|
mapping = enumerate(items)
|
||||||
|
mapping = {item.text(): index for index, item in mapping}
|
||||||
|
|
||||||
|
def sk(x):
|
||||||
|
# fall back to insertion order for identical timestamps
|
||||||
|
return (x.timestamps.max(), mapping[x.text()])
|
||||||
|
|
||||||
|
items = sorted(items, key=sk, reverse=True)
|
||||||
|
items_to_evict = items[nkeep:]
|
||||||
|
|
||||||
|
for i in items_to_evict:
|
||||||
|
self.items.pop(i.key)
|
||||||
|
self.deleteItem(i)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user