Device interfaces can be configured in GUI.

This commit is contained in:
John Schember 2009-05-02 14:57:19 -04:00
parent a0d9b093da
commit bf6ed98e35
3 changed files with 27 additions and 8 deletions

View File

@ -16,18 +16,19 @@ class DeviceConfig(object):
c.add_opt('format_map', default=cls.FORMATS, help=cls.HELP_MESSAGE) c.add_opt('format_map', default=cls.FORMATS, help=cls.HELP_MESSAGE)
return c return c
@classmethod
def _configProxy(cls): def _configProxy(cls):
return ConfigProxy(cls._config()) return ConfigProxy(cls._config())
@classmethod @classmethod
def config_widget(cls): def config_widget(cls):
from calibre.gui2.device_drivers.configwidget import ConfigWidget from calibre.gui2.device_drivers.configwidget import ConfigWidget
cw = ConfigWidget(cls.configProxy(cls._config()), cls.FORMATS) cw = ConfigWidget(cls._configProxy(), cls.FORMATS)
return cw return cw
@classmethod @classmethod
def save_settings(cls, config_widget): def save_settings(cls, config_widget):
cls.configProxy(cls._config())['format_map'] = config_widget.format_map() cls._configProxy()['format_map'] = config_widget.format_map()
@classmethod @classmethod
def settings(cls): def settings(cls):

View File

@ -7,7 +7,8 @@ from PyQt4.Qt import QDialog, QMessageBox, QListWidgetItem, QIcon, \
QDesktopServices, QVBoxLayout, QLabel, QPlainTextEdit, \ QDesktopServices, QVBoxLayout, QLabel, QPlainTextEdit, \
QStringListModel, QAbstractItemModel, QFont, \ QStringListModel, QAbstractItemModel, QFont, \
SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, \ SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, \
QModelIndex, QInputDialog, QAbstractTableModel QModelIndex, QInputDialog, QAbstractTableModel, \
QDialogButtonBox
from calibre.constants import islinux, iswindows from calibre.constants import islinux, iswindows
from calibre.gui2.dialogs.config_ui import Ui_Dialog from calibre.gui2.dialogs.config_ui import Ui_Dialog
@ -540,11 +541,28 @@ class ConfigDialog(QDialog, Ui_Dialog):
info_dialog(self, _('Plugin not customizable'), info_dialog(self, _('Plugin not customizable'),
_('Plugin: %s does not need customization')%plugin.name).exec_() _('Plugin: %s does not need customization')%plugin.name).exec_()
return return
help = plugin.customization_help() if hasattr(plugin, 'config_widget'):
text, ok = QInputDialog.getText(self, _('Customize %s')%plugin.name, config_dialog = QDialog(self)
help) button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
if ok:
customize_plugin(plugin, unicode(text)) config_dialog.connect(button_box, SIGNAL('accepted()'), config_dialog.accept)
config_dialog.connect(button_box, SIGNAL('rejected()'), config_dialog.reject)
config_widget = plugin.config_widget()
v = QVBoxLayout(config_dialog)
v.addWidget(config_widget)
v.addWidget(button_box)
config_dialog.exec_()
if config_dialog.result() == QDialog.Accepted:
plugin.save_settings(config_widget)
self._plugin_model.refresh_plugin(plugin)
else:
help = plugin.customization_help()
text, ok = QInputDialog.getText(self, _('Customize %s')%plugin.name,
help)
if ok:
customize_plugin(plugin, unicode(text))
self._plugin_model.refresh_plugin(plugin) self._plugin_model.refresh_plugin(plugin)
if op == 'remove': if op == 'remove':
if remove_plugin(plugin): if remove_plugin(plugin):