diff --git a/src/calibre/ebooks/metadata/sources/base.py b/src/calibre/ebooks/metadata/sources/base.py index 5089d8951b..d9144fdf34 100644 --- a/src/calibre/ebooks/metadata/sources/base.py +++ b/src/calibre/ebooks/metadata/sources/base.py @@ -181,6 +181,10 @@ class Source(Plugin): #: construct the configuration widget for this plugin options = () + #: A string that is displayed at the top of the config widget for this + #: plugin + config_help_message = None + def __init__(self, *args, **kwargs): Plugin.__init__(self, *args, **kwargs) diff --git a/src/calibre/ebooks/metadata/sources/isbndb.py b/src/calibre/ebooks/metadata/sources/isbndb.py index a2a10708fb..b8deea56df 100644 --- a/src/calibre/ebooks/metadata/sources/isbndb.py +++ b/src/calibre/ebooks/metadata/sources/isbndb.py @@ -39,6 +39,12 @@ class ISBNDB(Source): 'at isbndb.com and get an access key.')), ) + config_help_message = '
'+_('To use metadata from isbndb.com you must sign'
+ ' up for a free account and get an isbndb key and enter it below.'
+ ' Instructions to get the key are '
+ 'here.')
+
+
def __init__(self, *args, **kwargs):
Source.__init__(self, *args, **kwargs)
diff --git a/src/calibre/gui2/metadata/config.py b/src/calibre/gui2/metadata/config.py
index 68c935061d..abb45faa46 100644
--- a/src/calibre/gui2/metadata/config.py
+++ b/src/calibre/gui2/metadata/config.py
@@ -56,7 +56,12 @@ class ConfigWidget(QWidget):
self.setLayout(l)
self.gb = QGroupBox(_('Downloaded metadata fields'), self)
- l.addWidget(self.gb, 0, 0, 1, 2)
+ if plugin.config_help_message:
+ self.pchm = QLabel(plugin.config_help_message)
+ self.pchm.setWordWrap(True)
+ self.pchm.setOpenExternalLinks(True)
+ l.addWidget(self.pchm, 0, 0, 1, 2)
+ l.addWidget(self.gb, l.rowCount(), 0, 1, 2)
self.gb.l = QGridLayout()
self.gb.setLayout(self.gb.l)
self.fields_view = v = QListView(self)
@@ -81,7 +86,7 @@ class ConfigWidget(QWidget):
widget.setValue(val)
elif opt.type == 'string':
widget = QLineEdit(self)
- widget.setText(val)
+ widget.setText(val if val else '')
elif opt.type == 'bool':
widget = QCheckBox(opt.label, self)
widget.setChecked(bool(val))
diff --git a/src/calibre/gui2/preferences/metadata_sources.py b/src/calibre/gui2/preferences/metadata_sources.py
index 4500a03b30..17a70bcc33 100644
--- a/src/calibre/gui2/preferences/metadata_sources.py
+++ b/src/calibre/gui2/preferences/metadata_sources.py
@@ -10,7 +10,7 @@ __docformat__ = 'restructuredtext en'
from operator import attrgetter
from PyQt4.Qt import (QAbstractTableModel, Qt, QAbstractListModel, QWidget,
- pyqtSignal, QVBoxLayout, QDialogButtonBox, QFrame, QLabel)
+ pyqtSignal, QVBoxLayout, QDialogButtonBox, QFrame, QLabel, QIcon)
from calibre.gui2.preferences import ConfigWidgetBase, test_widget
from calibre.gui2.preferences.metadata_sources_ui import Ui_Form
@@ -67,6 +67,13 @@ class SourcesModel(QAbstractTableModel): # {{{
return self.enabled_overrides.get(plugin, orig)
elif role == Qt.UserRole:
return plugin
+ elif (role == Qt.DecorationRole and col == 0 and not
+ plugin.is_configured()):
+ return QIcon(I('list_remove.png'))
+ elif role == Qt.ToolTipRole:
+ if plugin.is_configured():
+ return _('This source is configured and ready to go')
+ return _('This source needs configuration')
return NONE
def setData(self, index, val, role):
diff --git a/src/calibre/gui2/preferences/metadata_sources.ui b/src/calibre/gui2/preferences/metadata_sources.ui
index 546120f628..b515f13ba1 100644
--- a/src/calibre/gui2/preferences/metadata_sources.ui
+++ b/src/calibre/gui2/preferences/metadata_sources.ui
@@ -48,6 +48,16 @@
+