%PDF- %PDF-
| Direktori : /lib/calibre/calibre/gui2/preferences/ |
| Current File : //lib/calibre/calibre/gui2/preferences/ignored_devices.py |
#!/usr/bin/env python3
# License: GPLv3 Copyright: 2012, Kovid Goyal <kovid at kovidgoyal.net>
import textwrap
from qt.core import (
QIcon, QLabel, QListWidget, QListWidgetItem, QPushButton, Qt, QVBoxLayout
)
from calibre.customize.ui import enable_plugin
from calibre.gui2 import gprefs
from calibre.gui2.preferences import ConfigWidgetBase, test_widget
from polyglot.builtins import iteritems
class ConfigWidget(ConfigWidgetBase):
restart_critical = False
def genesis(self, gui):
self.gui = gui
self.l = l = QVBoxLayout()
self.setLayout(l)
self.confirms_reset = False
self.la = la = QLabel(_(
'The list of devices that you have asked calibre to ignore. '
'Uncheck a device to have calibre stop ignoring it.'))
la.setWordWrap(True)
l.addWidget(la)
self.devices = f = QListWidget(self)
l.addWidget(f)
f.itemChanged.connect(self.changed_signal)
f.itemDoubleClicked.connect(self.toggle_item)
self.la2 = la = QLabel(_(
'The list of device plugins you have disabled. Uncheck an entry '
'to enable the plugin. calibre cannot detect devices that are '
'managed by disabled plugins.'))
la.setWordWrap(True)
l.addWidget(la)
self.device_plugins = f = QListWidget(f)
l.addWidget(f)
f.itemChanged.connect(self.changed_signal)
f.itemDoubleClicked.connect(self.toggle_item)
self.reset_confirmations_button = b = QPushButton(_('Reset allowed devices'))
b.setToolTip(textwrap.fill(_(
'This will erase the list of devices that calibre knows about'
' causing it to ask you for permission to manage them again,'
' the next time they connect')))
b.clicked.connect(self.reset_confirmations)
l.addWidget(b)
def reset_confirmations(self):
self.confirms_reset = True
self.changed_signal.emit()
def toggle_item(self, item):
item.setCheckState(Qt.CheckState.Checked if item.checkState() == Qt.CheckState.Unchecked else
Qt.CheckState.Unchecked)
def initialize(self):
self.confirms_reset = False
self.devices.blockSignals(True)
self.devices.clear()
for dev in self.gui.device_manager.devices:
for d, name in iteritems(dev.get_user_blacklisted_devices()):
item = QListWidgetItem('%s [%s]'%(name, d), self.devices)
item.setData(Qt.ItemDataRole.UserRole, (dev, d))
item.setFlags(Qt.ItemFlag.ItemIsEnabled|Qt.ItemFlag.ItemIsUserCheckable|Qt.ItemFlag.ItemIsSelectable)
item.setCheckState(Qt.CheckState.Checked)
self.devices.blockSignals(False)
self.device_plugins.blockSignals(True)
for dev in self.gui.device_manager.disabled_device_plugins:
n = dev.get_gui_name()
item = QListWidgetItem(n, self.device_plugins)
item.setData(Qt.ItemDataRole.UserRole, dev)
item.setFlags(Qt.ItemFlag.ItemIsEnabled|Qt.ItemFlag.ItemIsUserCheckable|Qt.ItemFlag.ItemIsSelectable)
item.setCheckState(Qt.CheckState.Checked)
item.setIcon(QIcon(I('plugins.png')))
self.device_plugins.sortItems()
self.device_plugins.blockSignals(False)
def restore_defaults(self):
if self.devices.count() > 0:
self.devices.clear()
def commit(self):
devs = {}
for i in range(0, self.devices.count()):
e = self.devices.item(i)
dev, uid = e.data(Qt.ItemDataRole.UserRole)
if dev not in devs:
devs[dev] = []
if e.checkState() == Qt.CheckState.Checked:
devs[dev].append(uid)
for dev, bl in iteritems(devs):
dev.set_user_blacklisted_devices(bl)
for i in range(self.device_plugins.count()):
e = self.device_plugins.item(i)
dev = e.data(Qt.ItemDataRole.UserRole)
if e.checkState() == Qt.CheckState.Unchecked:
enable_plugin(dev)
if self.confirms_reset:
gprefs['ask_to_manage_device'] = []
return True # Restart required
if __name__ == '__main__':
from calibre.gui2 import Application
app = Application([])
test_widget('Sharing', 'Ignored Devices')