mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-01-22 14:41:39 +00:00
Finish moving all qtlib py files to qt
This commit is contained in:
94
qt/recent.py
Normal file
94
qt/recent.py
Normal file
@@ -0,0 +1,94 @@
|
||||
# Created By: Virgil Dupras
|
||||
# Created On: 2009-11-12
|
||||
# Copyright 2015 Hardcoded Software (http://www.hardcoded.net)
|
||||
#
|
||||
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
|
||||
# which should be included with this package. The terms are also available at
|
||||
# http://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
from PyQt5.QtCore import pyqtSignal, QObject
|
||||
from PyQt5.QtWidgets import QAction
|
||||
|
||||
from hscommon.trans import trget
|
||||
from hscommon.util import dedupe
|
||||
|
||||
tr = trget("qtlib") # TODO move to ui
|
||||
|
||||
MenuEntry = namedtuple("MenuEntry", "menu fixedItemCount")
|
||||
|
||||
|
||||
class Recent(QObject):
|
||||
def __init__(self, app, pref_name, max_item_count=10, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self._app = app
|
||||
self._menuEntries = []
|
||||
self._prefName = pref_name
|
||||
self._maxItemCount = max_item_count
|
||||
self._items = []
|
||||
self._loadFromPrefs()
|
||||
|
||||
self._app.willSavePrefs.connect(self._saveToPrefs)
|
||||
|
||||
# --- Private
|
||||
def _loadFromPrefs(self):
|
||||
items = getattr(self._app.prefs, self._prefName)
|
||||
if not isinstance(items, list):
|
||||
items = []
|
||||
self._items = items
|
||||
|
||||
def _insertItem(self, item):
|
||||
self._items = dedupe([item] + self._items)[: self._maxItemCount]
|
||||
|
||||
def _refreshMenu(self, menu_entry):
|
||||
menu, fixed_item_count = menu_entry
|
||||
for action in menu.actions()[fixed_item_count:]:
|
||||
menu.removeAction(action)
|
||||
for item in self._items:
|
||||
action = QAction(item, menu)
|
||||
action.setData(item)
|
||||
action.triggered.connect(self.menuItemWasClicked)
|
||||
menu.addAction(action)
|
||||
menu.addSeparator()
|
||||
action = QAction(tr("Clear List"), menu)
|
||||
action.triggered.connect(self.clear)
|
||||
menu.addAction(action)
|
||||
|
||||
def _refreshAllMenus(self):
|
||||
for menu_entry in self._menuEntries:
|
||||
self._refreshMenu(menu_entry)
|
||||
|
||||
def _saveToPrefs(self):
|
||||
setattr(self._app.prefs, self._prefName, self._items)
|
||||
|
||||
# --- Public
|
||||
def addMenu(self, menu):
|
||||
menu_entry = MenuEntry(menu, len(menu.actions()))
|
||||
self._menuEntries.append(menu_entry)
|
||||
self._refreshMenu(menu_entry)
|
||||
|
||||
def clear(self):
|
||||
self._items = []
|
||||
self._refreshAllMenus()
|
||||
self.itemsChanged.emit()
|
||||
|
||||
def insertItem(self, item):
|
||||
self._insertItem(str(item))
|
||||
self._refreshAllMenus()
|
||||
self.itemsChanged.emit()
|
||||
|
||||
def isEmpty(self):
|
||||
return not bool(self._items)
|
||||
|
||||
# --- Event Handlers
|
||||
def menuItemWasClicked(self):
|
||||
action = self.sender()
|
||||
if action is not None:
|
||||
item = action.data()
|
||||
self.mustOpenItem.emit(item)
|
||||
self._refreshAllMenus()
|
||||
|
||||
# --- Signals
|
||||
mustOpenItem = pyqtSignal(str)
|
||||
itemsChanged = pyqtSignal()
|
||||
Reference in New Issue
Block a user