From 69b4202ad37cd9b0d0e91a2bf11389d860f24429 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 11:37:49 -0600 Subject: [PATCH 01/28] Preferences widget for misc --- src/calibre/customize/builtins.py | 11 +- src/calibre/gui2/preferences/misc.py | 127 +++++++++++++++++++++++ src/calibre/gui2/preferences/misc.ui | 144 +++++++++++++++++++++++++++ 3 files changed, 281 insertions(+), 1 deletion(-) create mode 100644 src/calibre/gui2/preferences/misc.py create mode 100644 src/calibre/gui2/preferences/misc.ui diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 3be6661ad2..d1e5db7f6d 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -802,9 +802,18 @@ class Tweaks(PreferencesPlugin): name_order = 2 config_widget = 'calibre.gui2.preferences.tweaks' +class Misc(PreferencesPlugin): + name = 'Misc' + gui_name = _('Miscellaneous') + category = 'Advanced' + gui_category = _('Advanced') + category_order = 5 + name_order = 3 + config_widget = 'calibre.gui2.preferences.misc' + plugins += [LookAndFeel, Behavior, Columns, Toolbar, InputOptions, CommonOptions, OutputOptions, Adding, Saving, Sending, Email, Server, - Plugins, Tweaks] + Plugins, Tweaks, Misc] #}}} diff --git a/src/calibre/gui2/preferences/misc.py b/src/calibre/gui2/preferences/misc.py new file mode 100644 index 0000000000..fe79f1ec51 --- /dev/null +++ b/src/calibre/gui2/preferences/misc.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +from PyQt4.Qt import QProgressDialog, QThread, Qt, pyqtSignal + +from calibre.gui2.preferences import ConfigWidgetBase, test_widget +from calibre.gui2.preferences.misc_ui import Ui_Form +from calibre.gui2 import error_dialog, config, warning_dialog, \ + open_local_file, info_dialog +from calibre.constants import isosx + +# Check Integrity {{{ + +class VacThread(QThread): + + check_done = pyqtSignal(object, object) + callback = pyqtSignal(object, object) + + def __init__(self, parent, db): + QThread.__init__(self, parent) + self.db = db + self._parent = parent + + def run(self): + err = bad = None + try: + bad = self.db.check_integrity(self.callbackf) + except: + import traceback + err = traceback.format_exc() + self.check_done.emit(bad, err) + + def callbackf(self, progress, msg): + self.callback.emit(progress, msg) + + +class CheckIntegrity(QProgressDialog): + + def __init__(self, db, parent=None): + QProgressDialog.__init__(self, parent) + self.db = db + self.setCancelButton(None) + self.setMinimum(0) + self.setMaximum(100) + self.setWindowTitle(_('Checking database integrity')) + self.setAutoReset(False) + self.setValue(0) + + self.vthread = VacThread(self, db) + self.vthread.check_done.connect(self.check_done, + type=Qt.QueuedConnection) + self.vthread.callback.connect(self.callback, type=Qt.QueuedConnection) + self.vthread.start() + + def callback(self, progress, msg): + self.setLabelText(msg) + self.setValue(int(100*progress)) + + def check_done(self, bad, err): + if err: + error_dialog(self, _('Error'), + _('Failed to check database integrity'), + det_msg=err, show=True) + elif bad: + titles = [self.db.title(x, index_is_id=True) for x in bad] + det_msg = '\n'.join(titles) + warning_dialog(self, _('Some inconsistencies found'), + _('The following books had formats listed in the ' + 'database that are not actually available. ' + 'The entries for the formats have been removed. ' + 'You should check them manually. This can ' + 'happen if you manipulate the files in the ' + 'library folder directly.'), det_msg=det_msg, show=True) + self.reset() + +# }}} + +class ConfigWidget(ConfigWidgetBase, Ui_Form): + + def genesis(self, gui): + self.gui = gui + r = self.register + r('worker_limit', config, restart_required=True) + r('enforce_cpu_limit', config, restart_required=True) + self.device_detection_button.clicked.connect(self.debug_device_detection) + self.compact_button.clicked.connect(self.compact) + self.button_open_config_dir.clicked.connect(self.open_config_dir) + self.button_osx_symlinks.clicked.connect(self.create_symlinks) + self.button_osx_symlinks.setVisible(isosx) + + def debug_device_detection(self, *args): + from calibre.gui2.dialogs.config.device_debug import DebugDevice + d = DebugDevice(self) + d.exec_() + + def compact(self, *args): + d = CheckIntegrity(self.gui.library_view.model().db, self) + d.exec_() + + def open_config_dir(self, *args): + from calibre.utils.config import config_dir + open_local_file(config_dir) + + def create_symlinks(self): + from calibre.utils.osx_symlinks import create_symlinks + loc, paths = create_symlinks() + if loc is None: + error_dialog(self, _('Error'), + _('Failed to install command line tools.'), + det_msg=paths, show=True) + else: + info_dialog(self, _('Command line tools installed'), + '

'+_('Command line tools installed in')+' '+loc+ + '
'+ _('If you move calibre.app, you have to re-install ' + 'the command line tools.'), + det_msg='\n'.join(paths), show=True) + + +if __name__ == '__main__': + from PyQt4.Qt import QApplication + app = QApplication([]) + test_widget('Advanced', 'Misc') + diff --git a/src/calibre/gui2/preferences/misc.ui b/src/calibre/gui2/preferences/misc.ui new file mode 100644 index 0000000000..f8582a3675 --- /dev/null +++ b/src/calibre/gui2/preferences/misc.ui @@ -0,0 +1,144 @@ + + + Form + + + + 0 + 0 + 502 + 314 + + + + Form + + + + + + &Maximum number of waiting worker processes (needs restart): + + + opt_worker_limit + + + + + + + 2 + + + 10000 + + + 2 + + + + + + + Limit the max. simultaneous jobs to the available CPU &cores + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + Debug &device detection + + + + + + + Qt::Vertical + + + + 20 + 19 + + + + + + + + &Check database integrity + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + Open calibre &configuration directory + + + + + + + Qt::Vertical + + + + 20 + 19 + + + + + + + + &Install command line tools + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + + From 2e99359763161aad93f69bb9fdf990db50cacf30 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 14:25:05 -0600 Subject: [PATCH 02/28] Start implementing preferences window --- src/calibre/customize/__init__.py | 7 ++ src/calibre/customize/builtins.py | 41 ++++++- src/calibre/gui2/preferences/main.py | 159 +++++++++++++++++++++++++++ 3 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 src/calibre/gui2/preferences/main.py diff --git a/src/calibre/customize/__init__.py b/src/calibre/customize/__init__.py index 91052bbc2b..083bc03723 100644 --- a/src/calibre/customize/__init__.py +++ b/src/calibre/customize/__init__.py @@ -393,9 +393,16 @@ class PreferencesPlugin(Plugin): # {{{ #: The category name displayed to the user for this plugin gui_category = None + #: The name displayed to the user for this plugin gui_name = None + #: The icon for this plugin, should be an absolute path + icon = None + + #: The description used for tooltips and the like + description = None + def create_widget(self, parent=None): ''' Create and return the actual Qt widget used for setting this group of diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index d1e5db7f6d..d95a7d1c8a 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -678,138 +678,177 @@ plugins += [ActionAdd, ActionFetchAnnotations, ActionGenerateCatalog, class LookAndFeel(PreferencesPlugin): name = 'Look & Feel' + icon = I('lookfeel.png') gui_name = _('Look and Feel') category = 'Interface' gui_category = _('Interface') category_order = 1 name_order = 1 config_widget = 'calibre.gui2.preferences.look_feel' + description = _('Adjust the look and feel of the calibre interface' + ' to suit your tastes') class Behavior(PreferencesPlugin): name = 'Behavior' + icon = I('config.png') gui_name = _('Behavior') category = 'Interface' gui_category = _('Interface') category_order = 1 name_order = 2 config_widget = 'calibre.gui2.preferences.behavior' + description = _('Change the way calibre behaves') class Columns(PreferencesPlugin): name = 'Custom Columns' + icon = I('column.png') gui_name = _('Add your own columns') category = 'Interface' gui_category = _('Interface') category_order = 1 name_order = 3 config_widget = 'calibre.gui2.preferences.columns' + description = _('Add/remove your own columns to the calibre book list') class Toolbar(PreferencesPlugin): name = 'Toolbar' + icon = I('wizard.png') gui_name = _('Customize the toolbar') category = 'Interface' gui_category = _('Interface') category_order = 1 name_order = 4 config_widget = 'calibre.gui2.preferences.toolbar' + description = _('Customize the toolbars and context menus, changing which' + ' actions are available in each') class InputOptions(PreferencesPlugin): name = 'Input Options' + icon = I('arrow-down.png') gui_name = _('Input Options') category = 'Conversion' gui_category = _('Conversion') category_order = 2 name_order = 1 config_widget = 'calibre.gui2.preferences.conversion:InputOptions' + description = _('Set conversion options specific to each input format') class CommonOptions(PreferencesPlugin): name = 'Common Options' + icon = I('convert.png') gui_name = _('Common Options') category = 'Conversion' gui_category = _('Conversion') category_order = 2 name_order = 2 config_widget = 'calibre.gui2.preferences.conversion:CommonOptions' + description = _('Set conversion options common to all formats') class OutputOptions(PreferencesPlugin): name = 'Output Options' + icon = I('arrow-up.png') gui_name = _('Output Options') category = 'Conversion' gui_category = _('Conversion') category_order = 2 name_order = 3 config_widget = 'calibre.gui2.preferences.conversion:OutputOptions' + description = _('Set conversion options specific to each output format') class Adding(PreferencesPlugin): name = 'Adding' + icon = I('add_book.png') gui_name = _('Adding books') category = 'Import/Export' gui_category = _('Import/Export') category_order = 3 name_order = 1 config_widget = 'calibre.gui2.preferences.adding' + description = _('Control how calibre reads metadata from files when ' + 'adding books') class Saving(PreferencesPlugin): name = 'Saving' + icon = I('save.png') gui_name = _('Saving books to disk') category = 'Import/Export' gui_category = _('Import/Export') category_order = 3 name_order = 2 config_widget = 'calibre.gui2.preferences.saving' + description = _('Control how calibre exports files from its database ' + 'to disk when using Save to disk') class Sending(PreferencesPlugin): name = 'Sending' + icon = I('sync.png') gui_name = _('Sending books to devices') category = 'Import/Export' gui_category = _('Import/Export') category_order = 3 name_order = 3 config_widget = 'calibre.gui2.preferences.sending' + description = _('Control how calibre transfers files to your ' + 'ebook reader') class Email(PreferencesPlugin): name = 'Email' - gui_name = _('Sending books by email') + icon = I('mail.png') + gui_name = _('Sharing books by email') category = 'Sharing' gui_category = _('Sharing') category_order = 4 name_order = 1 config_widget = 'calibre.gui2.preferences.emailp' + description = _('Setup sharing of books via email. Can be used ' + 'for automatic sending of downloaded news to your devices') class Server(PreferencesPlugin): name = 'Server' + icon = I('network-server.png') gui_name = _('Sharing over the net') category = 'Sharing' gui_category = _('Sharing') category_order = 4 name_order = 2 config_widget = 'calibre.gui2.preferences.server' + description = _('Setup the calibre Content Server which will ' + 'give you access to your calibre library from anywhere, ' + 'on any device, over the internet') class Plugins(PreferencesPlugin): name = 'Plugins' + icon = I('plugins.png') gui_name = _('Plugins') category = 'Advanced' gui_category = _('Advanced') category_order = 5 name_order = 1 config_widget = 'calibre.gui2.preferences.plugins' + description = _('Add/remove/customize various bits of calibre ' + 'functionality') class Tweaks(PreferencesPlugin): name = 'Tweaks' + icon = I('drawer.png') gui_name = _('Tweaks') category = 'Advanced' gui_category = _('Advanced') category_order = 5 name_order = 2 config_widget = 'calibre.gui2.preferences.tweaks' + description = _('Fine tune how calibre behaves in various contexts') class Misc(PreferencesPlugin): name = 'Misc' + icon = I('exec.png') gui_name = _('Miscellaneous') category = 'Advanced' gui_category = _('Advanced') category_order = 5 name_order = 3 config_widget = 'calibre.gui2.preferences.misc' + description = _('Miscellaneous advanced configuration') plugins += [LookAndFeel, Behavior, Columns, Toolbar, InputOptions, CommonOptions, OutputOptions, Adding, Saving, Sending, Email, Server, diff --git a/src/calibre/gui2/preferences/main.py b/src/calibre/gui2/preferences/main.py new file mode 100644 index 0000000000..f75a748006 --- /dev/null +++ b/src/calibre/gui2/preferences/main.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +from functools import partial + +from PyQt4.Qt import QMainWindow, Qt, QIcon, QStatusBar, QFont, QWidget, \ + QScrollArea, QStackedWidget, QVBoxLayout, QLabel, QFrame, \ + QToolBar, QSize, pyqtSignal + +from calibre.constants import __appname__, __version__ +from calibre.gui2 import gprefs +from calibre.gui2.preferences import init_gui +from calibre.customize.ui import preferences_plugins +from calibre.utils.ordered_dict import OrderedDict + +class StatusBar(QStatusBar): # {{{ + + def __init__(self, parent=None): + QStatusBar.__init__(self, parent) + self.default_message = __appname__ + ' ' + _('version') + ' ' + \ + __version__ + ' ' + _('created by Kovid Goyal') + self.device_string = '' + self._font = QFont() + self._font.setBold(True) + self.setFont(self._font) + + self.messageChanged.connect(self.message_changed, + type=Qt.QueuedConnection) + self.message_changed('') + + def message_changed(self, msg): + if not msg or msg.isEmpty() or msg.isNull() or \ + not unicode(msg).strip(): + self.showMessage(self.default_message) + +# }}} + +class Category(QWidget): + + plugin_activated = pyqtSignal(object) + + def __init__(self, name, plugins, parent=None): + QWidget.__init__(self, parent) + self._layout = QVBoxLayout() + self.setLayout(self._layout) + self.label = QLabel(name) + self.sep = QFrame(self) + self.bf = QFont() + self.bf.setBold(True) + self.label.setFont(self.bf) + self.sep.setFrameShape(QFrame.HLine) + self._layout.addWidget(self.label) + self._layout.addWidget(self.sep) + + self.plugins = plugins + + self.bar = QToolBar(self) + self.bar.setIconSize(QSize(48, 48)) + self.bar.setMovable(False) + self.bar.setFloatable(False) + self.bar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) + self._layout.addWidget(self.bar) + self.actions = [] + for p in plugins: + target = partial(self.triggered, p) + ac = self.bar.addAction(QIcon(p.icon), p.gui_name, target) + ac.setToolTip(p.description) + ac.setWhatsThis(p.description) + ac.setStatusTip(p.description) + self.actions.append(ac) + + def triggered(self, plugin, *args): + self.plugin_activated.emit(plugin) + + +class Browser(QScrollArea): + + def __init__(self, parent=None): + QScrollArea.__init__(self, parent) + self.setWidgetResizable(True) + + category_map = {} + for plugin in preferences_plugins(): + if plugin.category not in category_map: + category_map[plugin.category] = plugin.category_order + if category_map[plugin.category] < plugin.category_order: + category_map[plugin.category] = plugin.category_order + + categories = list(category_map.keys()) + categories.sort(cmp=lambda x, y: cmp(category_map[x], category_map[y])) + + self.category_map = OrderedDict() + for c in categories: + self.category_map[c] = [] + + for plugin in preferences_plugins(): + self.category_map[plugin.category].append(plugin) + + for plugins in self.category_map.values(): + plugins.sort(cmp=lambda x, y: cmp(x.name_order, y.name_order)) + + self.widgets = [] + self._layout = QVBoxLayout() + self.container = QWidget(self) + self.container.setLayout(self._layout) + self.setWidget(self.container) + for name, plugins in self.category_map.items(): + w = Category(name, plugins, self) + self.widgets.append(w) + self._layout.addWidget(w) + + + +class Preferences(QMainWindow): + + def __init__(self, gui): + QMainWindow.__init__(self, gui) + + self.resize(780, 665) + geom = gprefs.get('preferences_window_geometry', None) + if geom is not None: + self.restoreGeometry(geom) + + self.setWindowModality(Qt.WindowModal) + self.setWindowTitle(__appname__ + ' - ' + _('Preferences')) + self.setWindowIcon(QIcon(I('config.png'))) + + self.status_bar = StatusBar(self) + self.setStatusBar(self.status_bar) + + self.stack = QStackedWidget(self) + self.setCentralWidget(self.stack) + self.browser = Browser(self) + self.stack.addWidget(self.browser) + self.scroll_area = QScrollArea(self) + self.stack.addWidget(self.scroll_area) + self.scroll_area.setWidgetResizable(True) + + self.stack.setCurrentIndex(0) + + def closeEvent(self, *args): + gprefs.set('preferences_window_geometry', + bytearray(self.saveGeometry())) + return QMainWindow.closeEvent(self, *args) + +if __name__ == '__main__': + from PyQt4.Qt import QApplication + app = QApplication([]) + app + gui = init_gui() + + p = Preferences(gui) + p.show() + app.exec_() + gui.shutdown() From 314aa5232b59ec69322f9b5645386514ad4f7287 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 14:31:09 -0600 Subject: [PATCH 03/28] ... --- src/calibre/devices/jetbook/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/jetbook/driver.py b/src/calibre/devices/jetbook/driver.py index 0d2e35e4fc..6ee1c07464 100644 --- a/src/calibre/devices/jetbook/driver.py +++ b/src/calibre/devices/jetbook/driver.py @@ -87,7 +87,7 @@ class MIBUK(USBMS): name = 'MiBuk Wolder Device Interface' description = _('Communicate with the MiBuk Wolder reader.') author = 'Kovid Goyal' - supported_platforms = ['windows', 'osx', 'linux'] + supported_platforms = ['windows'] FORMATS = ['epub', 'mobi', 'prc', 'fb2', 'txt', 'rtf', 'pdf'] From dc87322c8076e7eb4a94d67fa870a5e2eed678c7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 14:35:10 -0600 Subject: [PATCH 04/28] ... --- imgsrc/column.svg | 210 ++++++++++++++++++++++++++++++------ resources/images/column.png | Bin 27945 -> 11959 bytes 2 files changed, 180 insertions(+), 30 deletions(-) diff --git a/imgsrc/column.svg b/imgsrc/column.svg index 4d6f4b809e..ac2f026473 100644 --- a/imgsrc/column.svg +++ b/imgsrc/column.svg @@ -1,61 +1,211 @@ -Capitello modanatura modanature moulure mouluresbuildingArchitetto Francesco RollandinArchitetto Francesco RollandinArchitetto Francesco Rollandinimage/svg+xmlen - - + - - +Capitello modanatura modanature moulure mouluresbuildingArchitetto Francesco RollandinArchitetto Francesco RollandinArchitetto Francesco Rollandinimage/svg+xmlen + + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + - + \ No newline at end of file diff --git a/resources/images/column.png b/resources/images/column.png index ae26292b250ae65df8d00236d452337c7703cb41..0a5f1846012af28a3caa28c68b17814248e4a892 100644 GIT binary patch literal 11959 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 SYyjSUMrEL546o9@^Ynjai{l*t From ea4dccb6295957c63fb456e939ac1f7920e4912d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 14:44:03 -0600 Subject: [PATCH 05/28] Fix layout of new preferences window --- imgsrc/drawer.svg | 5187 +++++++++++++------------- resources/images/drawer.png | Bin 173772 -> 28781 bytes src/calibre/gui2/preferences/main.py | 3 + 3 files changed, 2511 insertions(+), 2679 deletions(-) diff --git a/imgsrc/drawer.svg b/imgsrc/drawer.svg index 679bca53b2..22e54a1537 100644 --- a/imgsrc/drawer.svg +++ b/imgsrc/drawer.svg @@ -1,2679 +1,2508 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/images/drawer.png b/resources/images/drawer.png index 356de02a88de56365aeab14a5ad583578883de85..dd33c2ad6e1356577e5c40fddeb6c6f19dc6968a 100644 GIT binary patch literal 28781 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 KL99a5An<=04#%

L^KpAZkcX>b0hC_I{2}Ac5EY!_q|K#i9al7B(H7rv&b2=50N-G564@Cxjv* zD#rxRj&5V_Mk9?>1iqS!AqkW|e~T>3k<~cl>|NI}opE)Cy9&>o&na1&2oj|{ol)}s z9$@XW)o^s;7lJdGw6^sa9XeTy!-1L+R96r+3N(H!LkoRG632r4Ae?KicOyw_C8+ln zWbbJa7s!tw78ovO-!c3dRJ=C!ij#(SFow*WNnTrP-G^16>AQx$qXg-&G- zgo>cA$k6@y;~dEZaxp*U>qnb|#~}o0?|dosVYn$ZVcaa7?`p_!kaO|=3aBN$CnJpW zb!*Xl|6cymE=M|-mxSzB$S>1`mGb zo~xWdMaK0mI>!3Pn%o!{0sXprl1_OtvLXsxsyc=7^c{!M}uP5#x@WSlp`gB zrgQ|wrd(*M%=E?`+C;zYJ|7FG2o`B6Fy&|`C`buMs&*^A)boYGe~t&SghZ!^t4Y1f zXOdGV*oxx+?~@X{7o@DUnRbi8CD9%TaQly~G^IX3)CjkC%!H?p-CH;--p85SNATxQ z$WGX&zEvOW|02(Bi5ekHlm%Bseyxi7$nespdH(?~TC?{VR)FLX)!ch>fnfP{sjV%v zM-K#8lgDs0+WgNhcPdQFc=oB^O0?x^^c(o|wG<{;iasU}NkwaZ>x+2A9zJa4_7Ri3 z-|d|=&RbaB(SzMbMH)0HiE1w4f1X$Jgi0Fk039|I^Uj|!6aT&>bnQqa!6M^3T3VG~ z-EfB%;Z?LDgXM`IIeXR!js?^AsHE)ZzXXWu7S6x_zgSdavbS$ts3UO4Bt@*p$sd-s z3yGl4)R5)V8QlC(vZUB6wHT@Q@8z!KS~O>9Q_x#0uJoB+{8qRMOdy2hgMZdtEfpLg zc&TL)^6&)4ua03@Zp=vHKDRB0mrH-R5?Nr!yx{D>aplX?T2I*itklv3)&DFT-XziL zXm3^>RNBazOjwnWtnROnc*TOIGq^Q~`iROvK6|YzTD*HCv~TXgVlIgm z@!vPi7GZ_q#;WyP4!kg{Bf)Es_?{BoVn~_Zj~jPoR}-C{6z%(2ljid`b9T064>hE` zcy|HT*b(bi0Y_;Vf|EDF!Vweh`%hMZX#AKS@qomMEGIcSF_g3xu(8D|$p3C#UOIie zj7dlJpTvulXSUw0=T4JnevPS5QaU~;&c1@r9TPfi{n8H;h5a>-)NLM2;sH^T zyw-)3P#6pirYdd?9*dl4;8Hx2ek+NxM3ht$5>n?nqnK;Vr~>mmdEZ}=p!Z|R=$$agE6JT=Bs zl7F$bZ{S%xI~&-Q(!8uGsLjHZ2H#AV9mmNi!*@C_5->uj+0B4k07IcGEtf<7?` z{@8F2l*niLZeCN17sEfi;yNLm`?l&!8LC5r{tsIo&b4FytDlk~bdiyUsnB~n2M0

Tg4 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 i`4YPn6Q)zNY+RralSg^${RK_oNypb3I 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 HH3 Date: Sun, 5 Sep 2010 15:35:24 -0600 Subject: [PATCH 06/28] New preferences windows is functional --- src/calibre/gui2/preferences/__init__.py | 2 + src/calibre/gui2/preferences/main.py | 101 +++++++++++++++++++++-- 2 files changed, 97 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/preferences/__init__.py b/src/calibre/gui2/preferences/__init__.py index cc5fa4fa8c..b070152c77 100644 --- a/src/calibre/gui2/preferences/__init__.py +++ b/src/calibre/gui2/preferences/__init__.py @@ -20,6 +20,8 @@ class ConfigWidgetInterface(object): changed_signal = None supports_restoring_to_defaults = True + restore_defaults_desc = _('Restore settings to default values. ' + 'You have to click Apply to actually save the default settings.') def genesis(self, gui): raise NotImplementedError() diff --git a/src/calibre/gui2/preferences/main.py b/src/calibre/gui2/preferences/main.py index 91c3834410..0442c3ede2 100644 --- a/src/calibre/gui2/preferences/main.py +++ b/src/calibre/gui2/preferences/main.py @@ -5,15 +5,17 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' +import textwrap from functools import partial from PyQt4.Qt import QMainWindow, Qt, QIcon, QStatusBar, QFont, QWidget, \ QScrollArea, QStackedWidget, QVBoxLayout, QLabel, QFrame, \ - QToolBar, QSize, pyqtSignal + QToolBar, QSize, pyqtSignal, QHBoxLayout from calibre.constants import __appname__, __version__ -from calibre.gui2 import gprefs -from calibre.gui2.preferences import init_gui +from calibre.gui2 import gprefs, min_available_height, available_width, \ + warning_dialog +from calibre.gui2.preferences import init_gui, AbortCommit from calibre.customize.ui import preferences_plugins from calibre.utils.ordered_dict import OrderedDict @@ -68,8 +70,8 @@ class Category(QWidget): for p in plugins: target = partial(self.triggered, p) ac = self.bar.addAction(QIcon(p.icon), p.gui_name, target) - ac.setToolTip(p.description) - ac.setWhatsThis(p.description) + ac.setToolTip(textwrap.fill(p.description)) + ac.setWhatsThis(textwrap.fill(p.description)) ac.setStatusTip(p.description) self.actions.append(ac) w = self.bar.widgetForAction(ac) @@ -82,6 +84,8 @@ class Category(QWidget): class Browser(QScrollArea): + show_plugin = pyqtSignal(object) + def __init__(self, parent=None): QScrollArea.__init__(self, parent) self.setWidgetResizable(True) @@ -115,6 +119,7 @@ class Browser(QScrollArea): w = Category(name, plugins, self) self.widgets.append(w) self._layout.addWidget(w) + w.plugin_activated.connect(self.show_plugin.emit) @@ -122,8 +127,18 @@ class Preferences(QMainWindow): def __init__(self, gui): QMainWindow.__init__(self, gui) + self.gui = gui + + self.resize(900, 700) + nh, nw = min_available_height()-25, available_width()-10 + if nh < 0: + nh = 800 + if nw < 0: + nw = 600 + nh = min(self.height(), nh) + nw = min(self.width(), nw) + self.resize(nw, nh) - self.resize(780, 665) geom = gprefs.get('preferences_window_geometry', None) if geom is not None: self.restoreGeometry(geom) @@ -138,13 +153,87 @@ class Preferences(QMainWindow): self.stack = QStackedWidget(self) self.setCentralWidget(self.stack) self.browser = Browser(self) + self.browser.show_plugin.connect(self.show_plugin) self.stack.addWidget(self.browser) self.scroll_area = QScrollArea(self) self.stack.addWidget(self.scroll_area) self.scroll_area.setWidgetResizable(True) + self.bar = QToolBar(self) + self.addToolBar(self.bar) + self.bar.setVisible(False) + self.bar.setIconSize(QSize(32, 32)) + self.bar.setMovable(False) + self.bar.setFloatable(False) + self.bar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + self.apply_action = self.bar.addAction(QIcon(I('ok.png')), _('&Apply'), + self.commit) + self.cancel_action = self.bar.addAction(QIcon(I('window-close.png')), + _('&Cancel'), self.cancel) + self.bar_filler = QWidget() + self.bar_filler_ = QHBoxLayout() + self.bar_filler.setLayout(self.bar_filler_) + self.bar_filler_.addStretch(100) + self.bar.addWidget(self.bar_filler) + self.restore_action = self.bar.addAction(QIcon(I('clear_left.png')), + _('Restore &defaults'), self.restore_defaults) + for ac, tt in [('apply', _('Save changes')), + ('cancel', _('Cancel and return to overview'))]: + ac = getattr(self, ac+'_action') + ac.setToolTip(tt) + ac.setWhatsThis(tt) + ac.setStatusTip(tt) + self.stack.setCurrentIndex(0) + def show_plugin(self, plugin): + self.showing_widget = plugin.create_widget(self.scroll_area) + self.showing_widget.genesis(self.gui) + self.showing_widget.initialize() + self.scroll_area.setWidget(self.showing_widget) + self.stack.setCurrentIndex(1) + self.showing_widget.show() + self.setWindowTitle(__appname__ + ' - ' + _('Preferences') + ' - ' + + plugin.gui_name) + self.apply_action.setEnabled(False) + self.showing_widget.changed_signal.connect(lambda : + self.apply_action.setEnabled(True)) + self.restore_action.setEnabled(self.showing_widget.supports_restoring_to_defaults) + tt = self.showing_widget.restore_defaults_desc + if not self.restore_action.isEnabled(): + tt = _('Restoring to defaults not supported for') + ' ' + \ + plugin.gui_name + self.restore_action.setToolTip(textwrap.fill(tt)) + self.restore_action.setWhatsThis(textwrap.fill(tt)) + self.restore_action.setStatusTip(tt) + self.bar.setVisible(True) + + + def hide_plugin(self): + self.showing_widget = QWidget(self.scroll_area) + self.scroll_area.setWidget(self.showing_widget) + self.setWindowTitle(__appname__ + ' - ' + _('Preferences')) + self.bar.setVisible(False) + self.stack.setCurrentIndex(0) + + def commit(self, *args): + try: + restart_needed = self.showing_widget.commit() + except AbortCommit: + return + if restart_needed: + warning_dialog(self, _('Restart needed'), + _('Some of the changes you made require a restart.' + ' Please restart calibre as soon as possible.'), + show=True) + self.hide_plugin() + + def cancel(self, *args): + self.hide_plugin() + + def restore_defaults(self, *args): + self.showing_widget.restore_defaults() + def closeEvent(self, *args): gprefs.set('preferences_window_geometry', bytearray(self.saveGeometry())) From 6f94637b250a0450d20e80e836bb71e90590c42d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 15:58:37 -0600 Subject: [PATCH 07/28] ... --- src/calibre/gui2/preferences/conversion.py | 4 +++ src/calibre/gui2/preferences/main.py | 38 +++++++++++++++++----- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/calibre/gui2/preferences/conversion.py b/src/calibre/gui2/preferences/conversion.py index 82d6f916b8..0063d4a341 100644 --- a/src/calibre/gui2/preferences/conversion.py +++ b/src/calibre/gui2/preferences/conversion.py @@ -34,6 +34,10 @@ class Model(QStringListModel): class Base(ConfigWidgetBase, Ui_Form): + restore_defaults_desc = _('Restore settings to default values. ' + 'Only settings for the currently selected section ' + 'are restored.') + def genesis(self, gui): log = Log() log.outputs = [] diff --git a/src/calibre/gui2/preferences/main.py b/src/calibre/gui2/preferences/main.py index 0442c3ede2..c53e888127 100644 --- a/src/calibre/gui2/preferences/main.py +++ b/src/calibre/gui2/preferences/main.py @@ -10,12 +10,12 @@ from functools import partial from PyQt4.Qt import QMainWindow, Qt, QIcon, QStatusBar, QFont, QWidget, \ QScrollArea, QStackedWidget, QVBoxLayout, QLabel, QFrame, \ - QToolBar, QSize, pyqtSignal, QHBoxLayout + QToolBar, QSize, pyqtSignal, QSizePolicy, QToolButton from calibre.constants import __appname__, __version__ from calibre.gui2 import gprefs, min_available_height, available_width, \ warning_dialog -from calibre.gui2.preferences import init_gui, AbortCommit +from calibre.gui2.preferences import init_gui, AbortCommit, get_plugin from calibre.customize.ui import preferences_plugins from calibre.utils.ordered_dict import OrderedDict @@ -77,6 +77,7 @@ class Category(QWidget): w = self.bar.widgetForAction(ac) w.setStyleSheet('QToolButton { margin-right: 20px; min-width: 100px }') w.setCursor(Qt.PointingHandCursor) + w.setAutoRaise(True) def triggered(self, plugin, *args): self.plugin_activated.emit(plugin) @@ -125,9 +126,10 @@ class Browser(QScrollArea): class Preferences(QMainWindow): - def __init__(self, gui): + def __init__(self, gui, initial_plugin=None): QMainWindow.__init__(self, gui) self.gui = gui + self.must_restart = False self.resize(900, 700) nh, nw = min_available_height()-25, available_width()-10 @@ -170,10 +172,12 @@ class Preferences(QMainWindow): self.commit) self.cancel_action = self.bar.addAction(QIcon(I('window-close.png')), _('&Cancel'), self.cancel) - self.bar_filler = QWidget() - self.bar_filler_ = QHBoxLayout() - self.bar_filler.setLayout(self.bar_filler_) - self.bar_filler_.addStretch(100) + self.bar_filler = QLabel('') + self.bar_filler.setSizePolicy(QSizePolicy.Expanding, + QSizePolicy.Preferred) + self.bar_filler.setStyleSheet( + 'QLabel { font-weight: bold }') + self.bar_filler.setAlignment(Qt.AlignHCenter | Qt.AlignCenter) self.bar.addWidget(self.bar_filler) self.restore_action = self.bar.addAction(QIcon(I('clear_left.png')), _('Restore &defaults'), self.restore_defaults) @@ -184,8 +188,20 @@ class Preferences(QMainWindow): ac.setWhatsThis(tt) ac.setStatusTip(tt) + for ch in self.bar.children(): + if isinstance(ch, QToolButton): + ch.setCursor(Qt.PointingHandCursor) + ch.setAutoRaise(True) + self.stack.setCurrentIndex(0) + if initial_plugin is not None: + category, name = initial_plugin + plugin = get_plugin(category, name) + if plugin is not None: + self.show_plugin(plugin) + + def show_plugin(self, plugin): self.showing_widget = plugin.create_widget(self.scroll_area) self.showing_widget.genesis(self.gui) @@ -206,6 +222,8 @@ class Preferences(QMainWindow): self.restore_action.setToolTip(textwrap.fill(tt)) self.restore_action.setWhatsThis(textwrap.fill(tt)) self.restore_action.setStatusTip(tt) + self.bar_filler.setText(plugin.gui_name) + self.setWindowIcon(QIcon(plugin.icon)) self.bar.setVisible(True) @@ -215,13 +233,15 @@ class Preferences(QMainWindow): self.setWindowTitle(__appname__ + ' - ' + _('Preferences')) self.bar.setVisible(False) self.stack.setCurrentIndex(0) + self.setWindowIcon(QIcon(I('config.png'))) def commit(self, *args): try: - restart_needed = self.showing_widget.commit() + must_restart = self.showing_widget.commit() except AbortCommit: return - if restart_needed: + if must_restart: + self.must_restart = True warning_dialog(self, _('Restart needed'), _('Some of the changes you made require a restart.' ' Please restart calibre as soon as possible.'), From 976e4e87f986c1b4f904302310715107b0033156 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 17:34:55 -0600 Subject: [PATCH 08/28] The new Preferences dialog --- src/calibre/gui2/actions/device.py | 2 +- src/calibre/gui2/actions/preferences.py | 22 +- src/calibre/gui2/dialogs/config/__init__.py | 1028 ------------ src/calibre/gui2/dialogs/config/add_save.py | 95 -- src/calibre/gui2/dialogs/config/add_save.ui | 280 ---- src/calibre/gui2/dialogs/config/config.ui | 1398 ----------------- .../dialogs/config/create_custom_column.py | 173 -- .../dialogs/config/create_custom_column.ui | 191 --- src/calibre/gui2/dialogs/config/history.py | 40 - .../gui2/dialogs/config/save_template.py | 58 - .../gui2/dialogs/config/save_template.ui | 60 - src/calibre/gui2/dialogs/config/toolbar.py | 295 ---- src/calibre/gui2/dialogs/config/toolbar.ui | 223 --- src/calibre/gui2/dialogs/metadata_single.py | 2 +- src/calibre/gui2/preferences/__init__.py | 3 + .../config => preferences}/device_debug.py | 0 src/calibre/gui2/preferences/look_feel.py | 6 +- src/calibre/gui2/preferences/main.py | 4 + src/calibre/gui2/preferences/misc.py | 2 +- src/calibre/gui2/preferences/saving.py | 4 + src/calibre/gui2/preferences/server.py | 10 +- .../{dialogs/config => preferences}/social.py | 0 22 files changed, 35 insertions(+), 3861 deletions(-) delete mode 100644 src/calibre/gui2/dialogs/config/__init__.py delete mode 100644 src/calibre/gui2/dialogs/config/add_save.py delete mode 100644 src/calibre/gui2/dialogs/config/add_save.ui delete mode 100644 src/calibre/gui2/dialogs/config/config.ui delete mode 100644 src/calibre/gui2/dialogs/config/create_custom_column.py delete mode 100644 src/calibre/gui2/dialogs/config/create_custom_column.ui delete mode 100644 src/calibre/gui2/dialogs/config/history.py delete mode 100644 src/calibre/gui2/dialogs/config/save_template.py delete mode 100644 src/calibre/gui2/dialogs/config/save_template.ui delete mode 100644 src/calibre/gui2/dialogs/config/toolbar.py delete mode 100644 src/calibre/gui2/dialogs/config/toolbar.ui rename src/calibre/gui2/{dialogs/config => preferences}/device_debug.py (100%) rename src/calibre/gui2/{dialogs/config => preferences}/social.py (100%) diff --git a/src/calibre/gui2/actions/device.py b/src/calibre/gui2/actions/device.py index 6b8c303fbe..744ab20d10 100644 --- a/src/calibre/gui2/actions/device.py +++ b/src/calibre/gui2/actions/device.py @@ -122,7 +122,7 @@ class ConnectShareAction(InterfaceAction): self.share_conn_menu.toggle_server.connect(self.toggle_content_server) self.share_conn_menu.config_email.connect(partial( self.gui.iactions['Preferences'].do_config, - initial_category='email')) + initial_plugin=('Sharing', 'Email'))) self.qaction.setMenu(self.share_conn_menu) self.share_conn_menu.connect_to_folder.connect(self.gui.connect_to_folder) self.share_conn_menu.connect_to_itunes.connect(self.gui.connect_to_itunes) diff --git a/src/calibre/gui2/actions/preferences.py b/src/calibre/gui2/actions/preferences.py index 9173cd8144..a379698140 100644 --- a/src/calibre/gui2/actions/preferences.py +++ b/src/calibre/gui2/actions/preferences.py @@ -8,8 +8,8 @@ __docformat__ = 'restructuredtext en' from PyQt4.Qt import QIcon, QMenu from calibre.gui2.actions import InterfaceAction -from calibre.gui2.dialogs.config import ConfigDialog -from calibre.gui2 import error_dialog, config +from calibre.gui2.preferences.main import Preferences +from calibre.gui2 import error_dialog class PreferencesAction(InterfaceAction): @@ -28,7 +28,7 @@ class PreferencesAction(InterfaceAction): x.triggered.connect(self.do_config) - def do_config(self, checked=False, initial_category='general'): + def do_config(self, checked=False, initial_plugin=None): if self.gui.job_manager.has_jobs(): d = error_dialog(self.gui, _('Cannot configure'), _('Cannot configure while there are running jobs.')) @@ -39,20 +39,12 @@ class PreferencesAction(InterfaceAction): _('Cannot configure before calibre is restarted.')) d.exec_() return - d = ConfigDialog(self.gui, self.gui.library_view, - server=self.gui.content_server, initial_category=initial_category) + d = Preferences(self.gui, initial_plugin=initial_plugin) + d.show() - d.exec_() - self.gui.content_server = d.server - if self.gui.content_server is not None: - self.gui.content_server.state_callback = \ - self.Dispatcher(self.gui.iactions['Connect Share'].content_server_state_changed) - self.gui.content_server.state_callback(self.gui.content_server.is_running) - - if d.result() == d.Accepted: - self.gui.search.search_as_you_type(config['search_as_you_type']) + if d.committed: + self.gui.must_restart_before_config = d.must_restart self.gui.tags_view.set_new_model() # in case columns changed - self.gui.iactions['Save To Disk'].reread_prefs() self.gui.tags_view.recount() self.gui.create_device_menu() self.gui.set_device_menu_items_state(bool(self.gui.device_connected)) diff --git a/src/calibre/gui2/dialogs/config/__init__.py b/src/calibre/gui2/dialogs/config/__init__.py deleted file mode 100644 index 067a49de2e..0000000000 --- a/src/calibre/gui2/dialogs/config/__init__.py +++ /dev/null @@ -1,1028 +0,0 @@ -__license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal ' - -import os, re, time, textwrap, copy, sys - -from PyQt4.Qt import QDialog, QListWidgetItem, QIcon, \ - QVBoxLayout, QLabel, QPlainTextEdit, \ - QStringListModel, QAbstractItemModel, QFont, \ - SIGNAL, QThread, Qt, QSize, QVariant, QUrl, \ - QModelIndex, QAbstractTableModel, \ - QDialogButtonBox, QTabWidget, QBrush, QLineEdit, \ - QProgressDialog - -from calibre.constants import iswindows, isosx -from calibre.gui2.dialogs.config.config_ui import Ui_Dialog -from calibre.gui2.dialogs.config.create_custom_column import CreateCustomColumn -from calibre.gui2.dialogs.config.toolbar import ToolbarLayout -from calibre.gui2 import error_dialog, config, gprefs, \ - open_url, open_local_file, \ - ALL_COLUMNS, NONE, info_dialog, choose_files, \ - warning_dialog, ResizableDialog, question_dialog -from calibre.utils.config import prefs, read_raw_tweaks, write_tweaks -from calibre.ebooks import BOOK_EXTENSIONS -from calibre.ebooks.oeb.iterator import is_supported -from calibre.library.server import server_config -from calibre.customize.ui import initialized_plugins, is_disabled, enable_plugin, \ - disable_plugin, customize_plugin, \ - plugin_customization, add_plugin, \ - remove_plugin, all_input_formats, \ - input_format_plugins, \ - output_format_plugins, available_output_formats -from calibre.utils.smtp import config as smtp_prefs -from calibre.gui2.convert import config_widget_for_input_plugin -from calibre.gui2.convert.look_and_feel import LookAndFeelWidget -from calibre.gui2.convert.page_setup import PageSetupWidget -from calibre.gui2.convert.structure_detection import StructureDetectionWidget -from calibre.ebooks.conversion.plumber import Plumber -from calibre.utils.logging import Log -from calibre.gui2.convert.toc import TOCWidget -from calibre.utils.search_query_parser import saved_searches - - -class ConfigTabs(QTabWidget): - - def __init__(self, parent): - QTabWidget.__init__(self, parent) - log = Log() - log.outputs = [] - - self.plumber = Plumber('dummy.epub', 'dummy.epub', log, dummy=True, - merge_plugin_recs=False) - - def widget_factory(cls): - return cls(self, self.plumber.get_option_by_name, - self.plumber.get_option_help, None, None) - - lf = widget_factory(LookAndFeelWidget) - ps = widget_factory(PageSetupWidget) - sd = widget_factory(StructureDetectionWidget) - toc = widget_factory(TOCWidget) - - self.widgets = [lf, ps, sd, toc] - - for plugin in input_format_plugins(): - pw = config_widget_for_input_plugin(plugin) - if pw is not None: - pw.ICON = I('forward.png') - self.widgets.append(widget_factory(pw)) - - for plugin in output_format_plugins(): - name = plugin.name.lower().replace(' ', '_') - try: - output_widget = __import__('calibre.gui2.convert.'+name, - fromlist=[1]) - pw = output_widget.PluginWidget - pw.ICON = I('forward.png') - self.widgets.append(widget_factory(pw)) - except ImportError: - continue - - for i, widget in enumerate(self.widgets): - self.addTab(widget, widget.TITLE.replace('\n', ' ').replace('&', - '&&')) - self.setTabToolTip(i, widget.HELP if widget.HELP else widget.TITLE) - self.setUsesScrollButtons(True) - - def commit(self): - for widget in self.widgets: - if not widget.pre_commit_check(): - return False - widget.commit(save_defaults=True) - return True - -class PluginModel(QAbstractItemModel): - - def __init__(self, *args): - QAbstractItemModel.__init__(self, *args) - self.icon = QVariant(QIcon(I('plugins.png'))) - p = QIcon(self.icon).pixmap(32, 32, QIcon.Disabled, QIcon.On) - self.disabled_icon = QVariant(QIcon(p)) - self._p = p - self.populate() - - def populate(self): - self._data = {} - for plugin in initialized_plugins(): - if plugin.type not in self._data: - self._data[plugin.type] = [plugin] - else: - self._data[plugin.type].append(plugin) - self.categories = sorted(self._data.keys()) - - for plugins in self._data.values(): - plugins.sort(cmp=lambda x, y: cmp(x.name.lower(), y.name.lower())) - - def index(self, row, column, parent): - if not self.hasIndex(row, column, parent): - return QModelIndex() - - if parent.isValid(): - return self.createIndex(row, column, 1+parent.row()) - else: - return self.createIndex(row, column, 0) - - def parent(self, index): - if not index.isValid() or index.internalId() == 0: - return QModelIndex() - return self.createIndex(index.internalId()-1, 0, 0) - - def rowCount(self, parent): - if not parent.isValid(): - return len(self.categories) - if parent.internalId() == 0: - category = self.categories[parent.row()] - return len(self._data[category]) - return 0 - - def columnCount(self, parent): - return 1 - - def index_to_plugin(self, index): - category = self.categories[index.parent().row()] - return self._data[category][index.row()] - - def plugin_to_index(self, plugin): - for i, category in enumerate(self.categories): - parent = self.index(i, 0, QModelIndex()) - for j, p in enumerate(self._data[category]): - if plugin == p: - return self.index(j, 0, parent) - return QModelIndex() - - def refresh_plugin(self, plugin, rescan=False): - if rescan: - self.populate() - idx = self.plugin_to_index(plugin) - self.emit(SIGNAL('dataChanged(QModelIndex,QModelIndex)'), idx, idx) - - def flags(self, index): - if not index.isValid(): - return 0 - if index.internalId() == 0: - return Qt.ItemIsEnabled - flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled - return flags - - def data(self, index, role): - if not index.isValid(): - return NONE - if index.internalId() == 0: - if role == Qt.DisplayRole: - category = self.categories[index.row()] - return QVariant(_("%(plugin_type)s %(plugins)s")%\ - dict(plugin_type=category, plugins=_('plugins'))) - else: - plugin = self.index_to_plugin(index) - if role == Qt.DisplayRole: - ver = '.'.join(map(str, plugin.version)) - desc = '\n'.join(textwrap.wrap(plugin.description, 50)) - ans='%s (%s) %s %s\n%s'%(plugin.name, ver, _('by'), plugin.author, desc) - c = plugin_customization(plugin) - if c: - ans += _('\nCustomization: ')+c - return QVariant(ans) - if role == Qt.DecorationRole: - return self.disabled_icon if is_disabled(plugin) else self.icon - if role == Qt.ForegroundRole and is_disabled(plugin): - return QVariant(QBrush(Qt.gray)) - if role == Qt.UserRole: - return plugin - return NONE - - - -class CategoryModel(QStringListModel): - - CATEGORIES = [ - ('general', _('General'), 'dialog_information.png'), - ('interface', _('Interface'), 'lookfeel.png'), - ('conversion', _('Conversion'), 'convert.png'), - ('email', _('Email\nDelivery'), 'mail.png'), - ('add/save', _('Add/Save'), 'save.png'), - ('advanced', _('Advanced'), 'view.png'), - ('server', _('Content\nServer'), 'network-server.png'), - ('plugins', _('Plugins'), 'plugins.png'), - ] - - def __init__(self, *args): - QStringListModel.__init__(self, *args) - self.setStringList([x[1] for x in self.CATEGORIES]) - - def data(self, index, role): - if role == Qt.DecorationRole: - return QVariant(QIcon(I(self.CATEGORIES[index.row()][2]))) - return QStringListModel.data(self, index, role) - - def index_for_name(self, name): - for i, x in enumerate(self.CATEGORIES): - if x[0] == name: - return self.index(i) - return self.index(0) - -class EmailAccounts(QAbstractTableModel): - - def __init__(self, accounts): - QAbstractTableModel.__init__(self) - self.accounts = accounts - self.account_order = sorted(self.accounts.keys()) - self.headers = map(QVariant, [_('Email'), _('Formats'), _('Auto send')]) - self.default_font = QFont() - self.default_font.setBold(True) - self.default_font = QVariant(self.default_font) - self.tooltips =[NONE] + map(QVariant, - [_('Formats to email. The first matching format will be sent.'), - '

'+_('If checked, downloaded news will be automatically ' - 'mailed
to this email address ' - '(provided it is in one of the listed formats).')]) - - def rowCount(self, *args): - return len(self.account_order) - - def columnCount(self, *args): - return 3 - - def headerData(self, section, orientation, role): - if role == Qt.DisplayRole and orientation == Qt.Horizontal: - return self.headers[section] - return NONE - - def data(self, index, role): - row, col = index.row(), index.column() - if row < 0 or row >= self.rowCount(): - return NONE - account = self.account_order[row] - if role == Qt.UserRole: - return (account, self.accounts[account]) - if role == Qt.ToolTipRole: - return self.tooltips[col] - if role in [Qt.DisplayRole, Qt.EditRole]: - if col == 0: - return QVariant(account) - if col == 1: - return QVariant(self.accounts[account][0]) - if role == Qt.FontRole and self.accounts[account][2]: - return self.default_font - if role == Qt.CheckStateRole and col == 2: - return QVariant(Qt.Checked if self.accounts[account][1] else Qt.Unchecked) - return NONE - - def flags(self, index): - if index.column() == 2: - return QAbstractTableModel.flags(self, index)|Qt.ItemIsUserCheckable - else: - return QAbstractTableModel.flags(self, index)|Qt.ItemIsEditable - - def setData(self, index, value, role): - if not index.isValid(): - return False - row, col = index.row(), index.column() - account = self.account_order[row] - if col == 2: - self.accounts[account][1] ^= True - elif col == 1: - self.accounts[account][0] = unicode(value.toString()).upper() - else: - na = unicode(value.toString()) - from email.utils import parseaddr - addr = parseaddr(na)[-1] - if not addr: - return False - self.accounts[na] = self.accounts.pop(account) - self.account_order[row] = na - if '@kindle.com' in addr: - self.accounts[na][0] = 'AZW, MOBI, TPZ, PRC, AZW1' - - self.emit(SIGNAL('dataChanged(QModelIndex,QModelIndex)'), - self.index(index.row(), 0), self.index(index.row(), 2)) - return True - - def make_default(self, index): - if index.isValid(): - row = index.row() - for x in self.accounts.values(): - x[2] = False - self.accounts[self.account_order[row]][2] = True - self.reset() - - def add(self): - x = _('new email address') - y = x - c = 0 - while y in self.accounts: - c += 1 - y = x + str(c) - auto_send = len(self.accounts) < 1 - self.accounts[y] = ['MOBI, EPUB', auto_send, - len(self.account_order) == 0] - self.account_order = sorted(self.accounts.keys()) - self.reset() - return self.index(self.account_order.index(y), 0) - - def remove(self, index): - if index.isValid(): - row = index.row() - account = self.account_order[row] - self.accounts.pop(account) - self.account_order = sorted(self.accounts.keys()) - has_default = False - for account in self.account_order: - if self.accounts[account][2]: - has_default = True - break - if not has_default and self.account_order: - self.accounts[self.account_order[0]][2] = True - - self.reset() - - -class ConfigDialog(ResizableDialog, Ui_Dialog): - - def category_current_changed(self, n, p): - self.stackedWidget.setCurrentIndex(n.row()) - - def __init__(self, parent, library_view, server=None, - initial_category='general'): - ResizableDialog.__init__(self, parent) - self._category_model = CategoryModel() - - self.category_view.currentChanged = self.category_current_changed - self.category_view.setModel(self._category_model) - self.parent = parent - self.library_view = library_view - self.model = library_view.model() - self.db = self.model.db - self.server = server - self.connect(self.compact_button, SIGNAL('clicked(bool)'), self.compact) - - input_map = prefs['input_format_order'] - all_formats = set() - for fmt in all_input_formats().union(set(['ZIP', 'RAR'])): - all_formats.add(fmt.upper()) - for format in input_map + list(all_formats.difference(input_map)): - item = QListWidgetItem(format, self.input_order) - item.setData(Qt.UserRole, QVariant(format)) - item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable) - - self.connect(self.input_up, SIGNAL('clicked()'), self.up_input) - self.connect(self.input_down, SIGNAL('clicked()'), self.down_input) - - rn = config['use_roman_numerals_for_series_number'] - self.timeout.setValue(prefs['network_timeout']) - self.roman_numerals.setChecked(rn) - self.new_version_notification.setChecked(config['new_version_notification']) - - # Set up columns - colmap = list(self.model.column_map) - state = self.library_view.get_state() - hidden_cols = state['hidden_columns'] - positions = state['column_positions'] - colmap.sort(cmp=lambda x,y: cmp(positions[x], positions[y])) - self.custcols = copy.deepcopy(self.db.field_metadata.get_custom_field_metadata()) - for col in colmap: - item = QListWidgetItem(self.model.headers[col], self.columns) - item.setData(Qt.UserRole, QVariant(col)) - flags = Qt.ItemIsEnabled|Qt.ItemIsSelectable - if col != 'ondevice': - flags |= Qt.ItemIsUserCheckable - item.setFlags(flags) - if col != 'ondevice': - item.setCheckState(Qt.Unchecked if col in hidden_cols else - Qt.Checked) - self.column_up.clicked.connect(self.up_column) - self.column_down.clicked.connect(self.down_column) - self.del_custcol_button.clicked.connect(self.del_custcol) - self.add_custcol_button.clicked.connect(self.add_custcol) - self.edit_custcol_button.clicked.connect(self.edit_custcol) - - output_formats = sorted(available_output_formats()) - output_formats.remove('oeb') - for f in output_formats: - self.output_format.addItem(f.upper()) - default_index = \ - self.output_format.findText(prefs['output_format'].upper()) - self.output_format.setCurrentIndex(default_index if default_index != -1 else 0) - - - self.cover_browse.setValue(config['cover_flow_queue_length']) - self.systray_notifications.setChecked(not config['disable_tray_notification']) - from calibre.utils.localization import available_translations, \ - get_language, get_lang - lang = get_lang() - if lang is None or lang not in available_translations(): - lang = 'en' - self.language.addItem(get_language(lang), QVariant(lang)) - items = [(l, get_language(l)) for l in available_translations() \ - if l != lang] - if lang != 'en': - items.append(('en', get_language('en'))) - items.sort(cmp=lambda x, y: cmp(x[1], y[1])) - for item in items: - self.language.addItem(item[1], QVariant(item[0])) - - exts = set([]) - for ext in BOOK_EXTENSIONS: - ext = ext.lower() - ext = re.sub(r'(x{0,1})htm(l{0,1})', 'html', ext) - if ext == 'lrf' or is_supported('book.'+ext): - exts.add(ext) - - for ext in sorted(exts): - self.viewer.addItem(ext.upper()) - self.viewer.item(self.viewer.count()-1).setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable) - self.viewer.item(self.viewer.count()-1).setCheckState(Qt.Checked if ext.upper() in config['internally_viewed_formats'] else Qt.Unchecked) - self.viewer.sortItems() - self.start.setEnabled(not getattr(self.server, 'is_running', False)) - self.test.setEnabled(not self.start.isEnabled()) - self.stop.setDisabled(self.start.isEnabled()) - self.connect(self.start, SIGNAL('clicked()'), self.start_server) - self.connect(self.view_logs, SIGNAL('clicked()'), self.view_server_logs) - self.connect(self.stop, SIGNAL('clicked()'), self.stop_server) - self.connect(self.test, SIGNAL('clicked()'), self.test_server) - self.connect(self.show_server_password, SIGNAL('stateChanged(int)'), - lambda s: self.password.setEchoMode(self.password.Normal if s == Qt.Checked else self.password.Password)) - self.password.setEchoMode(self.password.Password) - opts = server_config().parse() - self.max_cover_size.setText(opts.max_cover) - self.port.setValue(opts.port) - self.username.setText(opts.username) - self.password.setText(opts.password if opts.password else '') - self.opt_max_opds_items.setValue(opts.max_opds_items) - self.opt_max_opds_ungrouped_items.setValue(opts.max_opds_ungrouped_items) - self.auto_launch.setChecked(config['autolaunch_server']) - self.systray_icon.setChecked(config['systray_icon']) - self.sync_news.setChecked(config['upload_news_to_device']) - self.delete_news.setChecked(config['delete_news_from_library_on_upload']) - p = {'normal':0, 'high':1, 'low':2}[prefs['worker_process_priority']] - self.priority.setCurrentIndex(p) - self.priority.setVisible(iswindows) - self.priority_label.setVisible(iswindows) - self.new_book_tags.setText(', '.join(prefs['new_book_tags'])) - self._plugin_model = PluginModel() - self.plugin_view.setModel(self._plugin_model) - self.plugin_view.setStyleSheet( - "QTreeView::item { padding-bottom: 10px;}") - self.connect(self.toggle_plugin, SIGNAL('clicked()'), lambda : self.modify_plugin(op='toggle')) - self.connect(self.customize_plugin, SIGNAL('clicked()'), lambda : self.modify_plugin(op='customize')) - self.connect(self.remove_plugin, SIGNAL('clicked()'), lambda : self.modify_plugin(op='remove')) - self.connect(self.button_plugin_browse, SIGNAL('clicked()'), self.find_plugin) - self.connect(self.button_plugin_add, SIGNAL('clicked()'), self.add_plugin) - self.connect(self.button_osx_symlinks, SIGNAL('clicked()'), - self.create_symlinks) - self.button_osx_symlinks.setVisible(isosx) - self.separate_cover_flow.setChecked(config['separate_cover_flow']) - self.setup_email_page() - self.delete_news.setEnabled(bool(self.sync_news.isChecked())) - self.connect(self.sync_news, SIGNAL('toggled(bool)'), - self.delete_news.setEnabled) - self.setup_conversion_options() - self.opt_worker_limit.setValue(config['worker_limit']) - self.connect(self.button_open_config_dir, SIGNAL('clicked()'), - self.open_config_dir) - self.opt_get_social_metadata.setChecked(config['get_social_metadata']) - self.opt_overwrite_author_title_metadata.setChecked(config['overwrite_author_title_metadata']) - self.opt_enforce_cpu_limit.setChecked(config['enforce_cpu_limit']) - self.device_detection_button.clicked.connect(self.debug_device_detection) - self.port.editingFinished.connect(self.check_port_value) - self.search_as_you_type.setChecked(config['search_as_you_type']) - self.show_avg_rating.setChecked(config['show_avg_rating']) - self.show_splash_screen.setChecked(gprefs.get('show_splash_screen', - True)) - li = None - for i, z in enumerate([('wide', _('Wide')), - ('narrow', _('Narrow'))]): - x, y = z - self.opt_gui_layout.addItem(y, QVariant(x)) - if x == config['gui_layout']: - li = i - self.opt_gui_layout.setCurrentIndex(li) - restrictions = sorted(saved_searches().names(), - cmp=lambda x,y: cmp(x.lower(), y.lower())) - restrictions.insert(0, '') - for x in ('gui', 'cs'): - w = getattr(self, 'opt_%s_restriction'%x) - w.addItems(restrictions) - idx = w.findText(self.db.prefs.get(x+'_restriction', '')) - w.setCurrentIndex(0 if idx < 0 else idx) - self.opt_disable_animations.setChecked(config['disable_animations']) - idx = 0 - for i, x in enumerate([(_('Small'), 'small'), (_('Medium'), 'medium'), - (_('Large'), 'large')]): - if x[1] == gprefs.get('toolbar_icon_size', 'medium'): - idx = i - self.opt_toolbar_icon_size.addItem(x[0], x[1]) - self.opt_toolbar_icon_size.setCurrentIndex(idx) - idx = 0 - for i, x in enumerate([(_('Automatic'), 'auto'), (_('Always'), 'always'), - (_('Never'), 'never')]): - if x[1] == gprefs.get('toolbar_text', 'auto'): - idx = i - self.opt_toolbar_text.addItem(x[0], x[1]) - self.opt_toolbar_text.setCurrentIndex(idx) - self.reset_confirmation_button.clicked.connect(self.reset_confirmation) - - deft, curt = read_raw_tweaks() - self.current_tweaks.setPlainText(curt.decode('utf-8')) - self.default_tweaks.setPlainText(deft.decode('utf-8')) - self.restore_tweaks_to_default_button.clicked.connect(self.restore_tweaks_to_default) - self.toolbar_cm_widget = ToolbarLayout(parent, parent) - self.toolbar_cm_tab.addTab(self.toolbar_cm_widget, - _('Toolbars/Context menus')) - - self.category_view.setCurrentIndex(self.category_view.model().index_for_name(initial_category)) - - def restore_tweaks_to_default(self, *args): - deft, curt = read_raw_tweaks() - self.current_tweaks.setPlainText(deft.decode('utf-8')) - - - def reset_confirmation(self): - from calibre.gui2 import dynamic - for key in dynamic.keys(): - if key.endswith('_again') and dynamic[key] is False: - dynamic[key] = True - info_dialog(self, _('Done'), - _('Confirmation dialogs have all been reset'), show=True) - - def check_port_value(self, *args): - port = self.port.value() - if port < 1025: - warning_dialog(self, _('System port selected'), '

'+ - _('The value %d you have chosen for the content ' - 'server port is a system port. Your operating ' - 'system may not allow the server to run on this ' - 'port. To be safe choose a port number larger than ' - '1024.')%port, show=True) - - def debug_device_detection(self): - from calibre.gui2.dialogs.config.device_debug import DebugDevice - d = DebugDevice(self) - d.exec_() - - def open_config_dir(self): - from calibre.utils.config import config_dir - open_local_file(config_dir) - - def create_symlinks(self): - from calibre.utils.osx_symlinks import create_symlinks - loc, paths = create_symlinks() - if loc is None: - error_dialog(self, _('Error'), - _('Failed to install command line tools.'), - det_msg=paths, show=True) - else: - info_dialog(self, _('Command line tools installed'), - '

'+_('Command line tools installed in')+' '+loc+ - '
'+ _('If you move calibre.app, you have to re-install ' - 'the command line tools.'), - det_msg='\n'.join(paths), show=True) - - def setup_conversion_options(self): - self.conversion_options = ConfigTabs(self) - self.stackedWidget.insertWidget(2, self.conversion_options) - - def setup_email_page(self): - def x(): - if self._email_accounts.account_order: - return self._email_accounts.account_order[0] - self.send_email_widget.initialize(x) - opts = self.send_email_widget.smtp_opts - self._email_accounts = EmailAccounts(opts.accounts) - self.email_view.setModel(self._email_accounts) - - self.connect(self.email_add, SIGNAL('clicked(bool)'), - self.add_email_account) - self.connect(self.email_make_default, SIGNAL('clicked(bool)'), - lambda c: self._email_accounts.make_default(self.email_view.currentIndex())) - self.email_view.resizeColumnsToContents() - self.connect(self.email_remove, SIGNAL('clicked()'), - self.remove_email_account) - - def add_email_account(self, checked): - index = self._email_accounts.add() - self.email_view.setCurrentIndex(index) - self.email_view.resizeColumnsToContents() - self.email_view.edit(index) - - def remove_email_account(self, *args): - idx = self.email_view.currentIndex() - self._email_accounts.remove(idx) - - def set_email_settings(self): - to_set = bool(self._email_accounts.accounts) - if not self.send_email_widget.set_email_settings(to_set): - return False - conf = smtp_prefs() - conf.set('accounts', self._email_accounts.accounts) - return True - - - def add_plugin(self): - path = unicode(self.plugin_path.text()) - if path and os.access(path, os.R_OK) and path.lower().endswith('.zip'): - add_plugin(path) - self._plugin_model.populate() - self._plugin_model.reset() - else: - error_dialog(self, _('No valid plugin path'), - _('%s is not a valid plugin path')%path).exec_() - - def find_plugin(self): - path = choose_files(self, 'choose plugin dialog', _('Choose plugin'), - filters=[('Plugins', ['zip'])], all_files=False, - select_only_single_file=True) - if path: - self.plugin_path.setText(path[0]) - - def modify_plugin(self, op=''): - index = self.plugin_view.currentIndex() - if index.isValid(): - plugin = self._plugin_model.index_to_plugin(index) - if op == 'toggle': - if not plugin.can_be_disabled: - error_dialog(self,_('Plugin cannot be disabled'), - _('The plugin: %s cannot be disabled')%plugin.name).exec_() - return - if is_disabled(plugin): - enable_plugin(plugin) - else: - disable_plugin(plugin) - self._plugin_model.refresh_plugin(plugin) - if op == 'customize': - if not plugin.is_customizable(): - info_dialog(self, _('Plugin not customizable'), - _('Plugin: %s does not need customization')%plugin.name).exec_() - return - config_dialog = QDialog(self) - button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - v = QVBoxLayout(config_dialog) - - config_dialog.connect(button_box, SIGNAL('accepted()'), config_dialog.accept) - config_dialog.connect(button_box, SIGNAL('rejected()'), config_dialog.reject) - config_dialog.setWindowTitle(_('Customize') + ' ' + plugin.name) - - if hasattr(plugin, 'config_widget'): - config_widget = plugin.config_widget() - 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_text = plugin.customization_help(gui=True) - help_text = QLabel(help_text, config_dialog) - help_text.setWordWrap(True) - help_text.setTextInteractionFlags(Qt.LinksAccessibleByMouse - | Qt.LinksAccessibleByKeyboard) - help_text.setOpenExternalLinks(True) - v.addWidget(help_text) - sc = plugin_customization(plugin) - if not sc: - sc = '' - sc = sc.strip() - sc = QLineEdit(sc, config_dialog) - v.addWidget(sc) - v.addWidget(button_box) - config_dialog.exec_() - - if config_dialog.result() == QDialog.Accepted: - sc = unicode(sc.text()).strip() - customize_plugin(plugin, sc) - - self._plugin_model.refresh_plugin(plugin) - elif op == 'remove': - if remove_plugin(plugin): - self._plugin_model.populate() - self._plugin_model.reset() - else: - error_dialog(self, _('Cannot remove builtin plugin'), - plugin.name + _(' cannot be removed. It is a ' - 'builtin plugin. Try disabling it instead.')).exec_() - - def up_input(self): - idx = self.input_order.currentRow() - if idx > 0: - self.input_order.insertItem(idx-1, self.input_order.takeItem(idx)) - self.input_order.setCurrentRow(idx-1) - - def set_tweaks(self): - raw = unicode(self.current_tweaks.toPlainText()).encode('utf-8') - try: - exec raw - except: - import traceback - error_dialog(self, _('Invalid tweaks'), - _('The tweaks you entered are invalid, try resetting the' - ' tweaks to default and changing them one by one until' - ' you find the invalid setting.'), - det_msg=traceback.format_exc(), show=True) - return False - write_tweaks(raw) - return True - - def down_input(self): - idx = self.input_order.currentRow() - if idx < self.input_order.count()-1: - self.input_order.insertItem(idx+1, self.input_order.takeItem(idx)) - self.input_order.setCurrentRow(idx+1) - - # Column settings {{{ - def up_column(self): - idx = self.columns.currentRow() - if idx > 0: - self.columns.insertItem(idx-1, self.columns.takeItem(idx)) - self.columns.setCurrentRow(idx-1) - - def down_column(self): - idx = self.columns.currentRow() - if idx < self.columns.count()-1: - self.columns.insertItem(idx+1, self.columns.takeItem(idx)) - self.columns.setCurrentRow(idx+1) - - def del_custcol(self): - idx = self.columns.currentRow() - if idx < 0: - return error_dialog(self, '', _('You must select a column to delete it'), - show=True) - col = unicode(self.columns.item(idx).data(Qt.UserRole).toString()) - if col not in self.custcols: - return error_dialog(self, '', - _('The selected column is not a custom column'), show=True) - if not question_dialog(self, _('Are you sure?'), - _('Do you really want to delete column %s and all its data?') % - self.custcols[col]['name'], show_copy_button=False): - return - self.columns.item(idx).setCheckState(False) - self.columns.takeItem(idx) - self.custcols[col]['*deleteme'] = True - return - - def add_custcol(self): - CreateCustomColumn(self, False, self.model.orig_headers, ALL_COLUMNS) - - def edit_custcol(self): - CreateCustomColumn(self, True, self.model.orig_headers, ALL_COLUMNS) - - def apply_custom_column_changes(self): - config_cols = [unicode(self.columns.item(i).data(Qt.UserRole).toString())\ - for i in range(self.columns.count())] - if not config_cols: - config_cols = ['title'] - removed_cols = set(self.model.column_map) - set(config_cols) - hidden_cols = set([unicode(self.columns.item(i).data(Qt.UserRole).toString())\ - for i in range(self.columns.count()) \ - if self.columns.item(i).checkState()==Qt.Unchecked]) - hidden_cols = hidden_cols.union(removed_cols) # Hide removed cols - hidden_cols = list(hidden_cols.intersection(set(self.model.column_map))) - if 'ondevice' in hidden_cols: - hidden_cols.remove('ondevice') - def col_pos(x, y): - xidx = config_cols.index(x) if x in config_cols else sys.maxint - yidx = config_cols.index(y) if y in config_cols else sys.maxint - return cmp(xidx, yidx) - positions = {} - for i, col in enumerate((sorted(self.model.column_map, cmp=col_pos))): - positions[col] = i - state = {'hidden_columns': hidden_cols, 'column_positions':positions} - self.library_view.apply_state(state) - self.library_view.save_state() - - must_restart = False - for c in self.custcols: - if self.custcols[c]['colnum'] is None: - self.db.create_custom_column( - label=self.custcols[c]['label'], - name=self.custcols[c]['name'], - datatype=self.custcols[c]['datatype'], - is_multiple=self.custcols[c]['is_multiple'], - display = self.custcols[c]['display']) - must_restart = True - elif '*deleteme' in self.custcols[c]: - self.db.delete_custom_column(label=self.custcols[c]['label']) - must_restart = True - elif '*edited' in self.custcols[c]: - cc = self.custcols[c] - self.db.set_custom_column_metadata(cc['colnum'], name=cc['name'], - label=cc['label'], - display = self.custcols[c]['display']) - if '*must_restart' in self.custcols[c]: - must_restart = True - return must_restart - # }}} - - def view_server_logs(self): - from calibre.library.server import log_access_file, log_error_file - d = QDialog(self) - d.resize(QSize(800, 600)) - layout = QVBoxLayout() - d.setLayout(layout) - layout.addWidget(QLabel(_('Error log:'))) - el = QPlainTextEdit(d) - layout.addWidget(el) - try: - el.setPlainText(open(log_error_file, 'rb').read().decode('utf8', 'replace')) - except IOError: - el.setPlainText('No error log found') - layout.addWidget(QLabel(_('Access log:'))) - al = QPlainTextEdit(d) - layout.addWidget(al) - try: - al.setPlainText(open(log_access_file, 'rb').read().decode('utf8', 'replace')) - except IOError: - al.setPlainText('No access log found') - bx = QDialogButtonBox(QDialogButtonBox.Ok) - layout.addWidget(bx) - self.connect(bx, SIGNAL('accepted()'), d.accept) - d.show() - - def set_server_options(self): - c = server_config() - c.set('port', self.port.value()) - c.set('username', unicode(self.username.text()).strip()) - p = unicode(self.password.text()).strip() - if not p: - p = None - c.set('password', p) - - def start_server(self): - self.set_server_options() - from calibre.library.server.main import start_threaded_server - self.server = start_threaded_server(self.db, server_config().parse()) - while not self.server.is_running and self.server.exception is None: - time.sleep(1) - if self.server.exception is not None: - error_dialog(self, _('Failed to start content server'), - unicode(self.server.exception)).exec_() - return - self.start.setEnabled(False) - self.test.setEnabled(True) - self.stop.setEnabled(True) - - def stop_server(self): - from calibre.library.server.main import stop_threaded_server - stop_threaded_server(self.server) - self.server = None - self.start.setEnabled(True) - self.test.setEnabled(False) - self.stop.setEnabled(False) - - def test_server(self): - open_url(QUrl('http://127.0.0.1:'+str(self.port.value()))) - - def compact(self, toggled): - d = CheckIntegrity(self.db, self) - d.exec_() - - def accept(self): - mcs = unicode(self.max_cover_size.text()).strip() - if not re.match(r'\d+x\d+', mcs): - error_dialog(self, _('Invalid size'), - _('The size %s is invalid. must be of the form widthxheight')%mcs).exec_() - return - if not self.set_email_settings(): - return - if not self.conversion_options.commit(): - return - if not self.add_save.save_settings(): - return - if not self.set_tweaks(): - return - wl = self.opt_worker_limit.value() - if wl%2 != 0: - wl += 1 - self.toolbar_cm_widget.commit() - config['worker_limit'] = wl - - config['use_roman_numerals_for_series_number'] = bool(self.roman_numerals.isChecked()) - config['new_version_notification'] = bool(self.new_version_notification.isChecked()) - prefs['network_timeout'] = int(self.timeout.value()) - input_cols = [unicode(self.input_order.item(i).data(Qt.UserRole).toString()) for i in range(self.input_order.count())] - prefs['input_format_order'] = input_cols - - must_restart = self.apply_custom_column_changes() - - config['separate_cover_flow'] = bool(self.separate_cover_flow.isChecked()) - config['disable_tray_notification'] = not self.systray_notifications.isChecked() - p = {0:'normal', 1:'high', 2:'low'}[self.priority.currentIndex()] - prefs['worker_process_priority'] = p - nbt = [x.strip() for x in - unicode(self.new_book_tags.text()).strip().split(',')] - prefs['new_book_tags'] = [x for x in nbt if x] - prefs['output_format'] = unicode(self.output_format.currentText()).upper() - config['cover_flow_queue_length'] = self.cover_browse.value() - prefs['language'] = str(self.language.itemData(self.language.currentIndex()).toString()) - config['systray_icon'] = self.systray_icon.checkState() == Qt.Checked - config['autolaunch_server'] = self.auto_launch.isChecked() - sc = server_config() - sc.set('username', unicode(self.username.text()).strip()) - sc.set('password', unicode(self.password.text()).strip()) - sc.set('port', self.port.value()) - sc.set('max_cover', mcs) - sc.set('max_opds_items', self.opt_max_opds_items.value()) - sc.set('max_opds_ungrouped_items', - self.opt_max_opds_ungrouped_items.value()) - config['delete_news_from_library_on_upload'] = self.delete_news.isChecked() - config['upload_news_to_device'] = self.sync_news.isChecked() - config['search_as_you_type'] = self.search_as_you_type.isChecked() - config['show_avg_rating'] = self.show_avg_rating.isChecked() - config['get_social_metadata'] = self.opt_get_social_metadata.isChecked() - config['overwrite_author_title_metadata'] = self.opt_overwrite_author_title_metadata.isChecked() - config['enforce_cpu_limit'] = bool(self.opt_enforce_cpu_limit.isChecked()) - config['disable_animations'] = bool(self.opt_disable_animations.isChecked()) - gprefs['show_splash_screen'] = bool(self.show_splash_screen.isChecked()) - for x in ('toolbar_icon_size', 'toolbar_text'): - w = getattr(self, 'opt_'+x) - data = w.itemData(w.currentIndex()).toString() - gprefs[x] = unicode(data) - fmts = [] - for i in range(self.viewer.count()): - if self.viewer.item(i).checkState() == Qt.Checked: - fmts.append(str(self.viewer.item(i).text())) - config['internally_viewed_formats'] = fmts - val = self.opt_gui_layout.itemData(self.opt_gui_layout.currentIndex()).toString() - config['gui_layout'] = unicode(val) - for x in ('gui', 'cs'): - w = getattr(self, 'opt_%s_restriction'%x) - self.db.prefs.set(x+'_restriction', unicode(w.currentText())) - - if must_restart: - warning_dialog(self, _('Must restart'), - _('The changes you made require that Calibre be ' - 'restarted. Please restart as soon as practical.'), - show=True, show_copy_button=False) - self.parent.must_restart_before_config = True - QDialog.accept(self) - -class VacThread(QThread): - - def __init__(self, parent, db): - QThread.__init__(self, parent) - self.db = db - self._parent = parent - - def run(self): - err = bad = None - try: - bad = self.db.check_integrity(self.callback) - except: - import traceback - err = traceback.format_exc() - self.emit(SIGNAL('check_done(PyQt_PyObject, PyQt_PyObject)'), bad, err) - - def callback(self, progress, msg): - self.emit(SIGNAL('callback(PyQt_PyObject,PyQt_PyObject)'), progress, - msg) - -class CheckIntegrity(QProgressDialog): - - def __init__(self, db, parent=None): - QProgressDialog.__init__(self, parent) - self.db = db - self.setCancelButton(None) - self.setMinimum(0) - self.setMaximum(100) - self.setWindowTitle(_('Checking database integrity')) - self.setAutoReset(False) - self.setValue(0) - - self.vthread = VacThread(self, db) - self.connect(self.vthread, SIGNAL('check_done(PyQt_PyObject,PyQt_PyObject)'), - self.check_done, - Qt.QueuedConnection) - self.connect(self.vthread, - SIGNAL('callback(PyQt_PyObject,PyQt_PyObject)'), - self.callback, Qt.QueuedConnection) - self.vthread.start() - - def callback(self, progress, msg): - self.setLabelText(msg) - self.setValue(int(100*progress)) - - def check_done(self, bad, err): - if err: - error_dialog(self, _('Error'), - _('Failed to check database integrity'), - det_msg=err, show=True) - elif bad: - titles = [self.db.title(x, index_is_id=True) for x in bad] - det_msg = '\n'.join(titles) - warning_dialog(self, _('Some inconsistencies found'), - _('The following books had formats listed in the ' - 'database that are not actually available. ' - 'The entries for the formats have been removed. ' - 'You should check them manually. This can ' - 'happen if you manipulate the files in the ' - 'library folder directly.'), det_msg=det_msg, show=True) - self.reset() - - - -if __name__ == '__main__': - from calibre.library.database2 import LibraryDatabase2 - from PyQt4.Qt import QApplication - app = QApplication([]) - d=ConfigDialog(None, LibraryDatabase2('/tmp')) - d.show() - app.exec_() diff --git a/src/calibre/gui2/dialogs/config/add_save.py b/src/calibre/gui2/dialogs/config/add_save.py deleted file mode 100644 index 8eb6cf7bd0..0000000000 --- a/src/calibre/gui2/dialogs/config/add_save.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai -from __future__ import with_statement - -__license__ = 'GPL v3' -__copyright__ = '2009, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - -import textwrap - -from PyQt4.Qt import QTabWidget - -from calibre.gui2.dialogs.config.add_save_ui import Ui_TabWidget -from calibre.library.save_to_disk import config -from calibre.utils.config import prefs -from calibre.gui2.widgets import FilenamePattern - -class AddSave(QTabWidget, Ui_TabWidget): - - def __init__(self, parent=None): - QTabWidget.__init__(self, parent) - self.setupUi(self) - while self.count() > 3: - self.removeTab(3) - c = config() - opts = c.parse() - for x in ('asciiize', 'update_metadata', 'save_cover', 'write_opf', - 'replace_whitespace', 'to_lowercase'): - g = getattr(self, 'opt_'+x) - g.setChecked(getattr(opts, x)) - help = '\n'.join(textwrap.wrap(c.get_option(x).help, 75)) - g.setToolTip(help) - g.setWhatsThis(help) - - for x in ('formats', 'timefmt'): - g = getattr(self, 'opt_'+x) - g.setText(getattr(opts, x)) - help = '\n'.join(textwrap.wrap(c.get_option(x).help, 75)) - g.setToolTip(help) - g.setWhatsThis(help) - - - self.opt_read_metadata_from_filename.setChecked(not prefs['read_file_metadata']) - self.filename_pattern = FilenamePattern(self) - self.metadata_box.layout().insertWidget(0, self.filename_pattern) - self.opt_swap_author_names.setChecked(prefs['swap_author_names']) - self.opt_add_formats_to_existing.setChecked(prefs['add_formats_to_existing']) - if prefs['manage_device_metadata'] == 'manual': - self.manage_device_metadata.setCurrentIndex(0) - elif prefs['manage_device_metadata'] == 'on_send': - self.manage_device_metadata.setCurrentIndex(1) - else: - self.manage_device_metadata.setCurrentIndex(2) - help = '\n'.join(textwrap.wrap(c.get_option('template').help, 75)) - self.save_template.initialize('save_to_disk', opts.template, help) - self.send_template.initialize('send_to_device', opts.send_template, help) - - def validate(self): - return self.save_template.validate() and self.send_template.validate() - - def save_settings(self): - if not self.validate(): - return False - c = config() - for x in ('asciiize', 'update_metadata', 'save_cover', 'write_opf', - 'replace_whitespace', 'to_lowercase'): - c.set(x, getattr(self, 'opt_'+x).isChecked()) - for x in ('formats', 'timefmt'): - val = unicode(getattr(self, 'opt_'+x).text()).strip() - if x == 'formats' and not val: - val = 'all' - c.set(x, val) - self.save_template.save_settings(c, 'template') - self.send_template.save_settings(c, 'send_template') - prefs['read_file_metadata'] = not bool(self.opt_read_metadata_from_filename.isChecked()) - pattern = self.filename_pattern.commit() - prefs['filename_pattern'] = pattern - prefs['swap_author_names'] = bool(self.opt_swap_author_names.isChecked()) - prefs['add_formats_to_existing'] = bool(self.opt_add_formats_to_existing.isChecked()) - if self.manage_device_metadata.currentIndex() == 0: - prefs['manage_device_metadata'] = 'manual' - elif self.manage_device_metadata.currentIndex() == 1: - prefs['manage_device_metadata'] = 'on_send' - else: - prefs['manage_device_metadata'] = 'on_connect' - return True - -if __name__ == '__main__': - from PyQt4.Qt import QApplication - app=QApplication([]) - a = AddSave() - a.show() - app.exec_() - a.save_settings() - diff --git a/src/calibre/gui2/dialogs/config/add_save.ui b/src/calibre/gui2/dialogs/config/add_save.ui deleted file mode 100644 index c8ee0419a9..0000000000 --- a/src/calibre/gui2/dialogs/config/add_save.ui +++ /dev/null @@ -1,280 +0,0 @@ - - - TabWidget - - - - 0 - 0 - 671 - 516 - - - - TabWidget - - - 0 - - - - &Adding books - - - - - - Here you can control how calibre will read metadata from the files you add to it. calibre can either read metadata from the contents of the file, or from the filename. - - - true - - - - - - - Read metadata only from &file name - - - - - - - Swap the firstname and lastname of the author. This affects only metadata read from file names. - - - &Swap author firstname and lastname - - - - - - - If an existing book with a similar title and author is found that does not have the format being added, the format is added -to the existing book, instead of creating a new entry. If the existing book already has the format, then it is silently ignored. - -Title match ignores leading indefinite articles ("the", "a", "an"), punctuation, case, etc. Author match is exact. - - - If books with similar titles and authors found, &merge the new files automatically - - - - - - - &Configure metadata from file name - - - - - - Qt::Vertical - - - - 20 - 363 - - - - - - - - - - - - &Saving books - - - - - - Here you can control how calibre will save your books when you click the Save to Disk button: - - - true - - - - - - - Save &cover separately - - - - - - - Update &metadata in saved copies - - - - - - - Save metadata in &OPF file - - - - - - - Convert non-English characters to &English equivalents - - - - - - - Format &dates as: - - - opt_timefmt - - - - - - - - - - File &formats to save: - - - opt_formats - - - - - - - - - - Replace space with &underscores - - - - - - - Change paths to &lowercase - - - - - - - - - - - Sending to &device - - - - - - - 0 - 0 - - - - Metadata &management: - - - manage_device_metadata - - - - - - - - 0 - 0 - - - - - Manual management - - - - - Only on send - - - - - Automatic management - - - - - - - - Qt::Horizontal - - - - 313 - 20 - - - - - - - - <li><b>Manual Management</b>: Calibre updates the metadata and adds collections only when a book is sent. With this option, calibre will never remove a collection.</li> -<li><b>Only on send</b>: Calibre updates metadata and adds/removes collections for a book only when it is sent to the device. </li> -<li><b>Automatic management</b>: Calibre automatically keeps metadata on the device in sync with the calibre library, on every connect</li></ul> - - - true - - - - - - - - - - - - - - Here you can control how calibre will save your books when you click the Send to Device button. This setting can be overriden for individual devices by customizing the device interface plugins in Preferences->Plugins - - - true - - - - - - - - - - - - SaveTemplate - QWidget -

calibre/gui2/dialogs/config/save_template.h
- 1 - - - - - diff --git a/src/calibre/gui2/dialogs/config/config.ui b/src/calibre/gui2/dialogs/config/config.ui deleted file mode 100644 index 3dc30cbf36..0000000000 --- a/src/calibre/gui2/dialogs/config/config.ui +++ /dev/null @@ -1,1398 +0,0 @@ - - - Kovid Goyal - Dialog - - - - 0 - 0 - 1001 - 730 - - - - Preferences - - - - :/images/config.png:/images/config.png - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - QAbstractItemView::NoEditTriggers - - - true - - - false - - - - 48 - 48 - - - - QAbstractItemView::ScrollPerItem - - - QAbstractItemView::ScrollPerPixel - - - QListView::TopToBottom - - - 20 - - - QListView::ListMode - - - - - - - - 1 - 0 - - - - QFrame::Plain - - - 0 - - - true - - - - - 0 - 0 - 725 - 683 - - - - - 0 - - - - - - 100 - 0 - - - - 0 - - - 0 - - - - - - - Show notification when &new version is available - - - - - - - Download &social metadata (tags/ratings/etc.) by default - - - - - - - &Overwrite author and title by default when fetching metadata - - - - - - - - - Default network &timeout: - - - timeout - - - - - - - Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information) - - - seconds - - - 2 - - - 120 - - - 5 - - - - - - - - - - Choose &language (requires restart): - - - language - - - - - - - - Normal - - - - - High - - - - - Low - - - - - - - - Job &priority: - - - priority - - - - - - - Preferred &output format: - - - output_format - - - - - - - - - - Tags to apply when adding a book: - - - new_book_tags - - - - - - - A comma-separated list of tags that will be applied to books added to the library - - - - - - - - - Reset all disabled &confirmation dialogs - - - - - - - Preferred &input format order: - - - - - - - - true - - - QAbstractItemView::SelectRows - - - - - - - - - ... - - - - :/images/arrow-up.png:/images/arrow-up.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - ... - - - - :/images/arrow-down.png:/images/arrow-down.png - - - - - - - - - - - - - - - - - - 0 - - - - &Miscellaneous - - - - - - User Interface &layout (needs restart): - - - opt_gui_layout - - - - - - - - 250 - 16777215 - - - - - - - - &Number of covers to show in browse mode (needs restart): - - - cover_browse - - - - - - - - - - Restriction to apply when the current library is opened: - - - opt_gui_restriction - - - - - - - - 250 - 16777215 - - - - Apply this restriction on calibre startup if the current library is being used. Also applied when switching to this library. Note that this setting is per library. - - - QComboBox::AdjustToMinimumContentsLengthWithIcon - - - 15 - - - - - - - Disable all animations. Useful if you have a slow/old computer. - - - Disable &animations - - - - - - - &Toolbar - - - - - - - - - &Icon size: - - - opt_toolbar_icon_size - - - - - - - - - - Show &text under icons: - - - opt_toolbar_text - - - - - - - - - - &Delete news from library when it is automatically sent to reader - - - - - - - - - Select visible &columns in library view - - - - - - - - true - - - QAbstractItemView::SelectRows - - - - - - - - - ... - - - - :/images/arrow-up.png:/images/arrow-up.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Remove a user-defined column - - - ... - - - - :/images/minus.png:/images/minus.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Add a user-defined column - - - ... - - - - :/images/plus.png:/images/plus.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Edit settings of a user-defined column - - - ... - - - - :/images/edit_input.png:/images/edit_input.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - ... - - - - :/images/arrow-down.png:/images/arrow-down.png - - - - - - - - - - - - - - Use internal &viewer for: - - - - - - true - - - QAbstractItemView::NoSelection - - - - - - - - - - - - Search as you type - - - true - - - - - - - Use &Roman numerals for series - - - true - - - - - - - Enable system &tray icon (needs restart) - - - - - - - Show &average ratings in the tags browser - - - true - - - - - - - Automatically send downloaded &news to ebook reader - - - - - - - Show &splash screen at startup - - - - - - - Show cover &browser in a separate window (needs restart) - - - - - - - Show &notifications in system tray - - - - - - - - - - - - - - - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - - - - - - - - Add an email address to which to send books - - - &Add email - - - - :/images/plus.png:/images/plus.png - - - - 24 - 24 - - - - Qt::ToolButtonTextUnderIcon - - - - - - - Make &default - - - - - - - &Remove email - - - - :/images/minus.png:/images/minus.png - - - - 24 - 24 - - - - Qt::ToolButtonTextUnderIcon - - - - - - - - - - - calibre can send your books to you (or your reader) by email. Emails will be automatically sent for downloaded news to all email addresses that have Auto-send checked. - - - true - - - - - - - - - - - - - - - - - - - - - 0 - - - - &Miscellaneous - - - - - - &Maximum number of waiting worker processes (needs restart): - - - opt_worker_limit - - - - - - - 2 - - - 10000 - - - 2 - - - - - - - Limit the max. simultaneous jobs to the available CPU &cores - - - - - - - Qt::Vertical - - - - 20 - 79 - - - - - - - - Debug &device detection - - - - - - - Qt::Vertical - - - - 20 - 80 - - - - - - - - &Check database integrity - - - - - - - Qt::Vertical - - - - 20 - 79 - - - - - - - - Open calibre &configuration directory - - - - - - - Qt::Vertical - - - - 20 - 80 - - - - - - - - &Install command line tools - - - - - - - Qt::Vertical - - - - 20 - 79 - - - - - - - - - &Tweaks - - - - - - Values for the tweaks are shown below. Edit them to change the behavior of calibre - - - true - - - - - - - All available tweaks - - - - - - true - - - - - - - - - - &Current tweaks - - - - - - - - - - - - &Restore to defaults - - - - - - - - - - - - - - - calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart. - - - true - - - - - - - - - Server &port: - - - port - - - - - - - 65535 - - - 8080 - - - - - - - &Username: - - - username - - - - - - - - - - &Password: - - - password - - - - - - - If you leave the password blank, anyone will be able to access your book collection using the web interface. - - - - - - - The maximum size (widthxheight) for displayed covers. Larger covers are resized. - - - - - - - - - - Max. &cover size: - - - max_cover_size - - - - - - - &Show password - - - - - - - Max. &OPDS items per query: - - - opt_max_opds_items - - - - - - - 10 - - - 10000 - - - - - - - 25 - - - 1000000 - - - - - - - Max. OPDS &ungrouped items: - - - opt_max_opds_ungrouped_items - - - - - - - Restriction (saved search) to apply: - - - - - - - This restriction (based on a saved search) will restrict the books the content server makes available to those matching the search. This setting is per library (i.e. you can have a different restriction per library). - - - QComboBox::AdjustToMinimumContentsLengthWithIcon - - - 20 - - - - - - - - - - - &Start Server - - - - - - - St&op Server - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - &Test Server - - - - - - - - - Run server &automatically on startup - - - - - - - View &server logs - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - <p>Remember to leave calibre running as the server only runs as long as calibre is running. -<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on. - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Here you can customize the behavior of Calibre by controlling what plugins it uses. - - - true - - - - - - - true - - - - 32 - 32 - - - - true - - - true - - - true - - - - - - - - - Enable/&Disable plugin - - - - - - - &Customize plugin - - - - - - - &Remove plugin - - - - - - - - - Add new plugin - - - - - - - - Plugin &file: - - - plugin_path - - - - - - - - - - ... - - - - :/images/document_open.png:/images/document_open.png - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - &Add - - - - - - - - - - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - SendEmail - QWidget -
calibre/gui2/wizard/send_email.h
- 1 -
- - AddSave - QTabWidget -
calibre/gui2/dialogs/config/add_save.h
- 1 -
-
- - - - - - buttonBox - accepted() - Dialog - accept() - - - 239 - 558 - - - 157 - 274 - - - - - buttonBox - rejected() - Dialog - reject() - - - 307 - 558 - - - 286 - 274 - - - - -
diff --git a/src/calibre/gui2/dialogs/config/create_custom_column.py b/src/calibre/gui2/dialogs/config/create_custom_column.py deleted file mode 100644 index c0f17b8cba..0000000000 --- a/src/calibre/gui2/dialogs/config/create_custom_column.py +++ /dev/null @@ -1,173 +0,0 @@ -__license__ = 'GPL v3' -__copyright__ = '2010, Kovid Goyal ' - -'''Dialog to create a new custom column''' - -import re -from functools import partial - -from PyQt4.QtCore import SIGNAL -from PyQt4.Qt import QDialog, Qt, QListWidgetItem, QVariant - -from calibre.gui2.dialogs.config.create_custom_column_ui import Ui_QCreateCustomColumn -from calibre.gui2 import error_dialog - -class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): - - column_types = { - 0:{'datatype':'text', - 'text':_('Text, column shown in the tag browser'), - 'is_multiple':False}, - 1:{'datatype':'*text', - 'text':_('Comma separated text, like tags, shown in the tag browser'), - 'is_multiple':True}, - 2:{'datatype':'comments', - 'text':_('Long text, like comments, not shown in the tag browser'), - 'is_multiple':False}, - 3:{'datatype':'series', - 'text':_('Text column for keeping series-like information'), - 'is_multiple':False}, - 4:{'datatype':'datetime', - 'text':_('Date'), 'is_multiple':False}, - 5:{'datatype':'float', - 'text':_('Floating point numbers'), 'is_multiple':False}, - 6:{'datatype':'int', - 'text':_('Integers'), 'is_multiple':False}, - 7:{'datatype':'rating', - 'text':_('Ratings, shown with stars'), - 'is_multiple':False}, - 8:{'datatype':'bool', - 'text':_('Yes/No'), 'is_multiple':False}, - } - - def __init__(self, parent, editing, standard_colheads, standard_colnames): - QDialog.__init__(self, parent) - Ui_QCreateCustomColumn.__init__(self) - self.setupUi(self) - # Remove help icon on title bar - icon = self.windowIcon() - self.setWindowFlags(self.windowFlags()&(~Qt.WindowContextHelpButtonHint)) - self.setWindowIcon(icon) - - self.simple_error = partial(error_dialog, self, show=True, - show_copy_button=False) - self.connect(self.button_box, SIGNAL("accepted()"), self.accept) - self.connect(self.button_box, SIGNAL("rejected()"), self.reject) - self.parent = parent - self.editing_col = editing - self.standard_colheads = standard_colheads - self.standard_colnames = standard_colnames - for t in self.column_types: - self.column_type_box.addItem(self.column_types[t]['text']) - self.column_type_box.currentIndexChanged.connect(self.datatype_changed) - if not self.editing_col: - self.datatype_changed() - self.exec_() - return - idx = parent.columns.currentRow() - if idx < 0: - self.simple_error(_('No column selected'), - _('No column has been selected')) - return - col = unicode(parent.columns.item(idx).data(Qt.UserRole).toString()) - if col not in parent.custcols: - self.simple_error('', _('Selected column is not a user-defined column')) - return - - c = parent.custcols[col] - self.column_name_box.setText(c['label']) - self.column_heading_box.setText(c['name']) - ct = c['datatype'] if not c['is_multiple'] else '*text' - self.orig_column_number = c['colnum'] - self.orig_column_name = col - column_numbers = dict(map(lambda x:(self.column_types[x]['datatype'], x), self.column_types)) - self.column_type_box.setCurrentIndex(column_numbers[ct]) - self.column_type_box.setEnabled(False) - if ct == 'datetime': - if c['display'].get('date_format', None): - self.date_format_box.setText(c['display'].get('date_format', '')) - self.datatype_changed() - self.exec_() - - def datatype_changed(self, *args): - try: - col_type = self.column_types[self.column_type_box.currentIndex()]['datatype'] - except: - col_type = None - df_visible = col_type == 'datetime' - for x in ('box', 'default_label', 'label'): - getattr(self, 'date_format_'+x).setVisible(df_visible) - - - def accept(self): - col = unicode(self.column_name_box.text()) - if not col: - return self.simple_error('', _('No lookup name was provided')) - if re.match('^\w*$', col) is None or not col[0].isalpha() or col.lower() != col: - return self.simple_error('', _('The lookup name must contain only lower case letters, digits and underscores, and start with a letter')) - if col.endswith('_index'): - return self.simple_error('', _('Lookup names cannot end with _index, because these names are reserved for the index of a series column.')) - col_heading = unicode(self.column_heading_box.text()) - col_type = self.column_types[self.column_type_box.currentIndex()]['datatype'] - if col_type == '*text': - col_type='text' - is_multiple = True - else: - is_multiple = False - if not col_heading: - return self.simple_error('', _('No column heading was provided')) - bad_col = False - if col in self.parent.custcols: - if not self.editing_col or self.parent.custcols[col]['colnum'] != self.orig_column_number: - bad_col = True - if bad_col: - return self.simple_error('', _('The lookup name %s is already used')%col) - bad_head = False - for t in self.parent.custcols: - if self.parent.custcols[t]['name'] == col_heading: - if not self.editing_col or self.parent.custcols[t]['colnum'] != self.orig_column_number: - bad_head = True - for t in self.standard_colheads: - if self.standard_colheads[t] == col_heading: - bad_head = True - if bad_head: - return self.simple_error('', _('The heading %s is already used')%col_heading) - - date_format = {} - if col_type == 'datetime': - if self.date_format_box.text(): - date_format = {'date_format':unicode(self.date_format_box.text())} - else: - date_format = {'date_format': None} - - key = self.parent.db.field_metadata.custom_field_prefix+col - if not self.editing_col: - self.parent.db.field_metadata - self.parent.custcols[key] = { - 'label':col, - 'name':col_heading, - 'datatype':col_type, - 'editable':True, - 'display':date_format, - 'normalized':None, - 'colnum':None, - 'is_multiple':is_multiple, - } - item = QListWidgetItem(col_heading, self.parent.columns) - item.setData(Qt.UserRole, QVariant(key)) - item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable|Qt.ItemIsSelectable) - item.setCheckState(Qt.Checked) - else: - idx = self.parent.columns.currentRow() - item = self.parent.columns.item(idx) - item.setData(Qt.UserRole, QVariant(key)) - item.setText(col_heading) - self.parent.custcols[self.orig_column_name]['label'] = col - self.parent.custcols[self.orig_column_name]['name'] = col_heading - self.parent.custcols[self.orig_column_name]['display'].update(date_format) - self.parent.custcols[self.orig_column_name]['*edited'] = True - self.parent.custcols[self.orig_column_name]['*must_restart'] = True - QDialog.accept(self) - - def reject(self): - QDialog.reject(self) diff --git a/src/calibre/gui2/dialogs/config/create_custom_column.ui b/src/calibre/gui2/dialogs/config/create_custom_column.ui deleted file mode 100644 index 5cb9494845..0000000000 --- a/src/calibre/gui2/dialogs/config/create_custom_column.ui +++ /dev/null @@ -1,191 +0,0 @@ - - - QCreateCustomColumn - - - Qt::ApplicationModal - - - - 0 - 0 - 528 - 199 - - - - - 0 - 0 - - - - Create or edit custom columns - - - - - - QLayout::SetDefaultConstraint - - - 5 - - - - - 0 - - - - - &Lookup name - - - column_name_box - - - - - - - Column &heading - - - column_heading_box - - - - - - - - 20 - 0 - - - - Used for searching the column. Must contain only digits and lower case letters. - - - - - - - Column heading in the library view and category name in the tag browser - - - - - - - Column &type - - - column_type_box - - - - - - - - 0 - 0 - - - - - 70 - 0 - - - - What kind of information will be kept in the column. - - - - - - - - - - 0 - 0 - - - - <p>Date format. Use 1-4 'd's for day, 1-4 'M's for month, and 2 or 4 'y's for year.</p> -<p>For example: -<ul> -<li> ddd, d MMM yyyy gives Mon, 5 Jan 2010<li> -<li>dd MMMM yy gives 05 January 10</li> -</ul> - - - - - - - Use MMM yyyy for month + year, yyyy for year only - - - Default: dd MMM yyyy. - - - - - - - - - Format for &dates - - - date_format_box - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - true - - - - - - - - 75 - true - - - - Create or edit custom columns - - - - - - - - - column_name_box - column_heading_box - column_type_box - date_format_box - button_box - - - - diff --git a/src/calibre/gui2/dialogs/config/history.py b/src/calibre/gui2/dialogs/config/history.py deleted file mode 100644 index 74b88a4380..0000000000 --- a/src/calibre/gui2/dialogs/config/history.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai -from __future__ import with_statement - -__license__ = 'GPL v3' -__copyright__ = '2009, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - -from PyQt4.Qt import QComboBox, QStringList, Qt - -from calibre.gui2 import config as gui_conf - -class HistoryBox(QComboBox): - - def __init__(self, parent=None): - QComboBox.__init__(self, parent) - self.setEditable(True) - - def initialize(self, opt_name, default, help=None): - history = gui_conf[opt_name] - if default not in history: - history.append(default) - self.addItems(QStringList(history)) - self.setCurrentIndex(self.findText(default, Qt.MatchFixedString)) - if help is not None: - self.setToolTip(help) - self.setWhatsThis(help) - - def save_history(self, opt_name): - history = [unicode(self.itemText(i)) for i in range(self.count())] - ct = self.text() - if ct not in history: - history = [ct] + history - gui_conf[opt_name] = history[:10] - - def text(self): - return unicode(self.currentText()).strip() - - - diff --git a/src/calibre/gui2/dialogs/config/save_template.py b/src/calibre/gui2/dialogs/config/save_template.py deleted file mode 100644 index 71eb15f4aa..0000000000 --- a/src/calibre/gui2/dialogs/config/save_template.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai -from __future__ import with_statement - -__license__ = 'GPL v3' -__copyright__ = '2009, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - -from PyQt4.Qt import QWidget - -from calibre.gui2 import error_dialog -from calibre.gui2.dialogs.config.save_template_ui import Ui_Form -from calibre.library.save_to_disk import FORMAT_ARG_DESCS, \ - preprocess_template - -class SaveTemplate(QWidget, Ui_Form): - - def __init__(self, *args): - QWidget.__init__(self, *args) - Ui_Form.__init__(self) - self.setupUi(self) - - def initialize(self, name, default, help): - variables = sorted(FORMAT_ARG_DESCS.keys()) - rows = [] - for var in variables: - rows.append(u'%s%s'% - (var, FORMAT_ARG_DESCS[var])) - table = u'%s
'%(u'\n'.join(rows)) - self.template_variables.setText(table) - - self.opt_template.initialize(name+'_template_history', - default, help) - self.option_name = name - - def validate(self): - tmpl = preprocess_template(self.opt_template.text()) - fa = {} - for x in FORMAT_ARG_DESCS.keys(): - fa[x]='random long string' - try: - tmpl.format(**fa) - except Exception, err: - error_dialog(self, _('Invalid template'), - '

'+_('The template %s is invalid:')%tmpl + \ - '
'+str(err), show=True) - return False - return True - - def save_settings(self, config, name): - val = unicode(self.opt_template.text()) - config.set(name, val) - self.opt_template.save_history(self.option_name+'_template_history') - - - - - diff --git a/src/calibre/gui2/dialogs/config/save_template.ui b/src/calibre/gui2/dialogs/config/save_template.ui deleted file mode 100644 index 02506891bb..0000000000 --- a/src/calibre/gui2/dialogs/config/save_template.ui +++ /dev/null @@ -1,60 +0,0 @@ - - - Form - - - - 0 - 0 - 400 - 300 - - - - Form - - - - - - Save &template - - - - - - By adjusting the template below, you can control what folders the files are saved in and what filenames they are given. You can use the / character to indicate sub-folders. Available metadata variables are described below. If a particular book does not have some metadata, the variable will be replaced by the empty string. - - - true - - - - - - - Available variables: - - - - - - - - - - - - - - - - - HistoryBox - QComboBox -

calibre/gui2/dialogs/config/history.h
- - - - - diff --git a/src/calibre/gui2/dialogs/config/toolbar.py b/src/calibre/gui2/dialogs/config/toolbar.py deleted file mode 100644 index 62e249d073..0000000000 --- a/src/calibre/gui2/dialogs/config/toolbar.py +++ /dev/null @@ -1,295 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai - -__license__ = 'GPL v3' -__copyright__ = '2010, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - -from functools import partial - -from PyQt4.Qt import QWidget, QAbstractListModel, Qt, QIcon, \ - QVariant, QItemSelectionModel - -from calibre.gui2.dialogs.config.toolbar_ui import Ui_Form -from calibre.gui2 import gprefs, NONE, warning_dialog - - -class FakeAction(object): - - def __init__(self, name, icon, tooltip=None, - dont_add_to=frozenset([]), dont_remove_from=frozenset([])): - self.name = name - self.action_spec = (name, icon, tooltip, None) - self.dont_remove_from = dont_remove_from - self.dont_add_to = dont_add_to - -class BaseModel(QAbstractListModel): - - def name_to_action(self, name, gui): - if name == 'Donate': - return FakeAction(name, 'donate.png', - dont_add_to=frozenset(['context-menu', - 'context-menu-device'])) - if name == 'Location Manager': - return FakeAction(name, None, - _('Switch between library and device views'), - dont_remove_from=set(['toolbar-device'])) - if name is None: - return FakeAction('--- '+_('Separator')+' ---', None) - return gui.iactions[name] - - def rowCount(self, parent): - return len(self._data) - - def data(self, index, role): - row = index.row() - action = self._data[row].action_spec - if role == Qt.DisplayRole: - text = action[0] - text = text.replace('&', '') - if text == _('%d books'): - text = _('Choose library') - return QVariant(text) - if role == Qt.DecorationRole: - ic = action[1] - if ic is None: - ic = 'blank.png' - return QVariant(QIcon(I(ic))) - if role == Qt.ToolTipRole and action[2] is not None: - return QVariant(action[2]) - return NONE - - def names(self, indexes): - rows = [i.row() for i in indexes] - ans = [] - for i in rows: - n = self._data[i].name - if n.startswith('---'): - n = None - ans.append(n) - return ans - - -class AllModel(BaseModel): - - def __init__(self, key, gui): - BaseModel.__init__(self) - self.gprefs_name = 'action-layout-'+key - current = gprefs[self.gprefs_name] - self.gui = gui - self.key = key - self._data = self.get_all_actions(current) - - def get_all_actions(self, current): - all = list(self.gui.iactions.keys()) + ['Donate'] - all = [x for x in all if x not in current] + [None] - all = [self.name_to_action(x, self.gui) for x in all] - all = [x for x in all if self.key not in x.dont_add_to] - all.sort() - return all - - def add(self, names): - actions = [] - for name in names: - if name is None or name.startswith('---'): continue - actions.append(self.name_to_action(name, self.gui)) - self._data.extend(actions) - self._data.sort() - self.reset() - - def remove(self, indices, allowed): - rows = [i.row() for i in indices] - remove = set([]) - for row in rows: - ac = self._data[row] - if ac.name.startswith('---'): continue - if ac.name in allowed: - remove.add(row) - ndata = [] - for i, ac in enumerate(self._data): - if i not in remove: - ndata.append(ac) - self._data = ndata - self.reset() - - def restore_defaults(self): - current = gprefs.defaults[self.gprefs_name] - self._data = self.get_all_actions(current) - self.reset() - -class CurrentModel(BaseModel): - - def __init__(self, key, gui): - BaseModel.__init__(self) - self.gprefs_name = 'action-layout-'+key - current = gprefs[self.gprefs_name] - self._data = [self.name_to_action(x, gui) for x in current] - self.key = key - self.gui = gui - - def move(self, idx, delta): - row = idx.row() - if row < 0 or row >= len(self._data): - return - nrow = row + delta - if nrow < 0 or nrow >= len(self._data): - return - t = self._data[row] - self._data[row] = self._data[nrow] - self._data[nrow] = t - ni = self.index(nrow) - self.dataChanged.emit(idx, idx) - self.dataChanged.emit(ni, ni) - return ni - - def add(self, names): - actions = [] - reject = set([]) - for name in names: - ac = self.name_to_action(name, self.gui) - if self.key in ac.dont_add_to: - reject.add(ac) - else: - actions.append(ac) - - self._data.extend(actions) - self.reset() - return reject - - def remove(self, indices): - rows = [i.row() for i in indices] - remove, rejected = set([]), set([]) - for row in rows: - ac = self._data[row] - if self.key in ac.dont_remove_from: - rejected.add(ac) - continue - remove.add(row) - ndata = [] - for i, ac in enumerate(self._data): - if i not in remove: - ndata.append(ac) - self._data = ndata - self.reset() - return rejected - - def commit(self): - old = gprefs[self.gprefs_name] - new = [] - for x in self._data: - n = x.name - if n.startswith('---'): - n = None - new.append(n) - new = tuple(new) - if new != old: - defaults = gprefs.defaults[self.gprefs_name] - if defaults == new: - del gprefs[self.gprefs_name] - else: - gprefs[self.gprefs_name] = new - - def restore_defaults(self): - current = gprefs.defaults[self.gprefs_name] - self._data = [self.name_to_action(x, self.gui) for x in current] - self.reset() - - -class ToolbarLayout(QWidget, Ui_Form): - - LOCATIONS = [ - ('toolbar', _('The main toolbar')), - ('toolbar-device', _('The main toolbar when a device is connected')), - ('context-menu', _('The context menu for the books in the ' - 'calibre library')), - ('context-menu-device', _('The context menu for the books on ' - 'the device')) - ] - - def __init__(self, gui, parent=None): - QWidget.__init__(self, parent) - self.setupUi(self) - - self.models = {} - for key, text in self.LOCATIONS: - self.what.addItem(text, key) - all_model = AllModel(key, gui) - current_model = CurrentModel(key, gui) - self.models[key] = (all_model, current_model) - self.what.setCurrentIndex(0) - self.what.currentIndexChanged[int].connect(self.what_changed) - self.what_changed(0) - - self.add_action_button.clicked.connect(self.add_action) - self.remove_action_button.clicked.connect(self.remove_action) - self.restore_defaults_button.clicked.connect(self.restore_defaults) - self.action_up_button.clicked.connect(partial(self.move, -1)) - self.action_down_button.clicked.connect(partial(self.move, 1)) - - def what_changed(self, idx): - key = unicode(self.what.itemData(idx).toString()) - self.all_actions.setModel(self.models[key][0]) - self.current_actions.setModel(self.models[key][1]) - - def add_action(self, *args): - x = self.all_actions.selectionModel().selectedIndexes() - names = self.all_actions.model().names(x) - if names: - not_added = self.current_actions.model().add(names) - ns = set([x.name for x in not_added]) - added = set(names) - ns - self.all_actions.model().remove(x, added) - if not_added: - warning_dialog(self, _('Cannot add'), - _('Cannot add the actions %s to this location') % - ','.join([a.action_spec[0] for a in not_added]), - show=True) - if added: - ca = self.current_actions - idx = ca.model().index(ca.model().rowCount(None)-1) - ca.scrollTo(idx) - - def remove_action(self, *args): - x = self.current_actions.selectionModel().selectedIndexes() - names = self.current_actions.model().names(x) - if names: - not_removed = self.current_actions.model().remove(x) - ns = set([x.name for x in not_removed]) - removed = set(names) - ns - self.all_actions.model().add(removed) - if not_removed: - warning_dialog(self, _('Cannot remove'), - _('Cannot remove the actions %s from this location') % - ','.join([a.action_spec[0] for a in not_removed]), - show=True) - - def move(self, delta, *args): - ci = self.current_actions.currentIndex() - m = self.current_actions.model() - if ci.isValid(): - ni = m.move(ci, delta) - if ni is not None: - self.current_actions.setCurrentIndex(ni) - self.current_actions.selectionModel().select(ni, - QItemSelectionModel.ClearAndSelect) - - def commit(self): - for am, cm in self.models.values(): - cm.commit() - - def restore_defaults(self, *args): - for am, cm in self.models.values(): - cm.restore_defaults() - am.restore_defaults() - - -if __name__ == '__main__': - from PyQt4.Qt import QApplication - from calibre.gui2.ui import Main - app=QApplication([]) - m = Main(None) - a = ToolbarLayout(m) - a.show() - app.exec_() - a.commit() - diff --git a/src/calibre/gui2/dialogs/config/toolbar.ui b/src/calibre/gui2/dialogs/config/toolbar.ui deleted file mode 100644 index 7ae98371ff..0000000000 --- a/src/calibre/gui2/dialogs/config/toolbar.ui +++ /dev/null @@ -1,223 +0,0 @@ - - - Form - - - - 0 - 0 - 831 - 553 - - - - Form - - - - - - Customize the actions in: - - - - - - - QComboBox::AdjustToMinimumContentsLengthWithIcon - - - 20 - - - - - - - A&vailable actions - - - - - - QAbstractItemView::MultiSelection - - - - 32 - 32 - - - - 10 - - - true - - - - - - - - - - &Current actions - - - - - - QAbstractItemView::MultiSelection - - - - 32 - 32 - - - - 10 - - - true - - - - - - - - - Move selected action up - - - ... - - - - :/images/arrow-up.png:/images/arrow-up.png - - - - 24 - 24 - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Move selected action down - - - ... - - - - :/images/arrow-down.png:/images/arrow-down.png - - - - 24 - 24 - - - - Ctrl+S - - - - - - - - - - - - - - Add selected actions to toolbar - - - ... - - - - :/images/forward.png:/images/forward.png - - - - 24 - 24 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 40 - - - - - - - - Remove selected actions from toolbar - - - ... - - - - :/images/back.png:/images/back.png - - - - 24 - 24 - - - - - - - - - - Restore to &default - - - - - - - - - - diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 860785c49e..1393a50738 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -30,7 +30,7 @@ from calibre.ebooks.metadata import MetaInformation from calibre.utils.config import prefs, tweaks from calibre.utils.date import qt_to_dt, local_tz, utcfromtimestamp from calibre.customize.ui import run_plugins_on_import, get_isbndb_key -from calibre.gui2.dialogs.config.social import SocialMetadata +from calibre.gui2.preferences.social import SocialMetadata from calibre.gui2.custom_column_widgets import populate_metadata_page from calibre import strftime diff --git a/src/calibre/gui2/preferences/__init__.py b/src/calibre/gui2/preferences/__init__.py index b070152c77..045d7ceebb 100644 --- a/src/calibre/gui2/preferences/__init__.py +++ b/src/calibre/gui2/preferences/__init__.py @@ -41,6 +41,9 @@ class ConfigWidgetInterface(object): ''' return False + def refresh_gui(self, gui): + pass + class Setting(object): def __init__(self, name, config_obj, widget, gui_name=None, diff --git a/src/calibre/gui2/dialogs/config/device_debug.py b/src/calibre/gui2/preferences/device_debug.py similarity index 100% rename from src/calibre/gui2/dialogs/config/device_debug.py rename to src/calibre/gui2/preferences/device_debug.py diff --git a/src/calibre/gui2/preferences/look_feel.py b/src/calibre/gui2/preferences/look_feel.py index a0805e8915..f30b2fddbb 100644 --- a/src/calibre/gui2/preferences/look_feel.py +++ b/src/calibre/gui2/preferences/look_feel.py @@ -23,7 +23,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): r('gui_layout', config, restart_required=True, choices= [(_('Wide'), 'wide'), (_('Narrow'), 'narrow')]) - r('cover_flow_queue_length', config) + r('cover_flow_queue_length', config, restart_required=True) lang = get_lang() if lang is None or lang not in available_translations(): @@ -55,6 +55,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): (_('Never'), 'never')] r('toolbar_text', gprefs, choices=choices) + def refresh_gui(self, gui): + gui.search.search_as_you_type(config['search_as_you_type']) + + if __name__ == '__main__': from PyQt4.Qt import QApplication app = QApplication([]) diff --git a/src/calibre/gui2/preferences/main.py b/src/calibre/gui2/preferences/main.py index c53e888127..9b3f932a08 100644 --- a/src/calibre/gui2/preferences/main.py +++ b/src/calibre/gui2/preferences/main.py @@ -130,6 +130,7 @@ class Preferences(QMainWindow): QMainWindow.__init__(self, gui) self.gui = gui self.must_restart = False + self.committed = False self.resize(900, 700) nh, nw = min_available_height()-25, available_width()-10 @@ -240,14 +241,17 @@ class Preferences(QMainWindow): must_restart = self.showing_widget.commit() except AbortCommit: return + self.committed = True if must_restart: self.must_restart = True warning_dialog(self, _('Restart needed'), _('Some of the changes you made require a restart.' ' Please restart calibre as soon as possible.'), show=True) + self.showing_widget.refresh_gui(self.gui) self.hide_plugin() + def cancel(self, *args): self.hide_plugin() diff --git a/src/calibre/gui2/preferences/misc.py b/src/calibre/gui2/preferences/misc.py index fe79f1ec51..eae79fdfc0 100644 --- a/src/calibre/gui2/preferences/misc.py +++ b/src/calibre/gui2/preferences/misc.py @@ -93,7 +93,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): self.button_osx_symlinks.setVisible(isosx) def debug_device_detection(self, *args): - from calibre.gui2.dialogs.config.device_debug import DebugDevice + from calibre.gui2.preferences.device_debug import DebugDevice d = DebugDevice(self) d.exec_() diff --git a/src/calibre/gui2/preferences/saving.py b/src/calibre/gui2/preferences/saving.py index a698083475..e4b6a33917 100644 --- a/src/calibre/gui2/preferences/saving.py +++ b/src/calibre/gui2/preferences/saving.py @@ -45,6 +45,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): self.save_template.save_settings(self.proxy, 'template') return ConfigWidgetBase.commit(self) + def refresh_gui(self, gui): + gui.iactions['Save To Disk'].reread_prefs() + + if __name__ == '__main__': from PyQt4.Qt import QApplication app = QApplication([]) diff --git a/src/calibre/gui2/preferences/server.py b/src/calibre/gui2/preferences/server.py index 6777b4c49a..4db1244d75 100644 --- a/src/calibre/gui2/preferences/server.py +++ b/src/calibre/gui2/preferences/server.py @@ -15,7 +15,8 @@ from calibre.gui2.preferences.server_ui import Ui_Form from calibre.utils.search_query_parser import saved_searches from calibre.library.server import server_config from calibre.utils.config import ConfigProxy -from calibre.gui2 import error_dialog, config, open_url, warning_dialog +from calibre.gui2 import error_dialog, config, open_url, warning_dialog, \ + Dispatcher class ConfigWidget(ConfigWidgetBase, Ui_Form): @@ -121,6 +122,13 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): ' take effect'), show=True) return False + def refresh_gui(self, gui): + gui.content_server = self.server + if gui.content_server is not None: + gui.content_server.state_callback = \ + Dispatcher(gui.iactions['Connect Share'].content_server_state_changed) + gui.content_server.state_callback(gui.content_server.is_running) + if __name__ == '__main__': from PyQt4.Qt import QApplication diff --git a/src/calibre/gui2/dialogs/config/social.py b/src/calibre/gui2/preferences/social.py similarity index 100% rename from src/calibre/gui2/dialogs/config/social.py rename to src/calibre/gui2/preferences/social.py From 13e9f56b66fb80836e7650a717a7574cc02a44a0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Sep 2010 17:35:39 -0600 Subject: [PATCH 09/28] ... --- src/calibre/translations/calibre.pot | 3269 +++++++++++++------------- 1 file changed, 1629 insertions(+), 1640 deletions(-) diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 4cf17d66e9..116d4d6fce 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.7.17\n" -"POT-Creation-Date: 2010-09-03 12:17+MDT\n" -"PO-Revision-Date: 2010-09-03 12:17+MDT\n" +"POT-Creation-Date: 2010-09-05 17:35+MDT\n" +"PO-Revision-Date: 2010-09-05 17:35+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -107,14 +107,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:144 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:111 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:138 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:869 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:878 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1163 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:862 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:871 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1158 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:155 @@ -176,8 +176,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:376 #: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:17 #: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:22 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:612 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206 msgid "Preferences" msgstr "" @@ -239,20 +241,156 @@ msgstr "" msgid "Set metadata from %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:681 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:682 msgid "Look and Feel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:683 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:692 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:684 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:696 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:707 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:718 msgid "Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:690 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:688 +msgid "Adjust the look and feel of the calibre interface to suit your tastes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:694 msgid "Behavior" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:700 +msgid "Change the way calibre behaves" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:705 +msgid "Add your own columns" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:711 +msgid "Add/remove your own columns to the calibre book list" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:716 +msgid "Customize the toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:722 +msgid "Customize the toolbars and context menus, changing which actions are available in each" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:728 +msgid "Input Options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:730 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:741 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:752 +msgid "Conversion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:734 +msgid "Set conversion options specific to each input format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:739 +msgid "Common Options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:745 +msgid "Set conversion options common to all formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:750 +msgid "Output Options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:756 +msgid "Set conversion options specific to each output format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:761 +msgid "Adding books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:763 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:775 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:787 +msgid "Import/Export" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:767 +msgid "Control how calibre reads metadata from files when adding books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:773 +msgid "Saving books to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:779 +msgid "Control how calibre exports files from its database to disk when using Save to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:785 +msgid "Sending books to devices" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:791 +msgid "Control how calibre transfers files to your ebook reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:797 +msgid "Sharing books by email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:799 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:811 +msgid "Sharing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:803 +msgid "Setup sharing of books via email. Can be used for automatic sending of downloaded news to your devices" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:809 +msgid "Sharing over the net" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:815 +msgid "Setup the calibre Content Server which will give you access to your calibre library from anywhere, on any device, over the internet" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:822 +msgid "Plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:824 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:836 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:847 +msgid "Advanced" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:828 +msgid "Add/remove/customize various bits of calibre functionality" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:834 +msgid "Tweaks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:840 +msgid "Fine tune how calibre behaves in various contexts" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:845 +msgid "Miscellaneous" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:851 +msgid "Miscellaneous advanced configuration" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102 msgid "Conversion Input" msgstr "" @@ -832,7 +970,7 @@ msgid "Place files in sub directories if the device supports them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:43 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:86 msgid "Read metadata from files on device" msgstr "" @@ -845,7 +983,7 @@ msgid "Template to control how books are saved" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:50 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:89 msgid "Extra customization" msgstr "" @@ -1678,9 +1816,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:210 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:99 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:72 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1079 msgid "Comments" @@ -1977,7 +2115,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1401 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 msgid "Table of Contents" msgstr "" @@ -2611,7 +2749,7 @@ msgid "Add books to your calibre library from the connected device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:20 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:498 msgid "Fetch annotations (experimental)" msgstr "" @@ -2702,7 +2840,7 @@ msgid "Select destination for %s.%s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:81 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:51 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:111 msgid "%d books" msgstr "" @@ -2749,8 +2887,8 @@ msgid "The folder %s already exists. Delete it first." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:186 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:753 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:100 msgid "Are you sure?" msgstr "" @@ -2835,7 +2973,7 @@ msgid "Could not copy books: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:234 msgid "Failed" msgstr "" @@ -2897,14 +3035,14 @@ msgid "Main memory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:436 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:445 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:444 msgid "Storage Card A" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:438 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:437 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:446 msgid "Storage Card B" msgstr "" @@ -3061,9 +3199,9 @@ msgid "Failed to download metadata:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1005 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:607 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:112 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:54 msgid "Error" msgstr "" @@ -3327,7 +3465,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:811 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:804 msgid "No books" msgstr "" @@ -3376,7 +3514,7 @@ msgid "Looking for duplicates based on file hash" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:70 msgid "Choose root folder" msgstr "" @@ -3393,7 +3531,7 @@ msgid "Add books to calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:21 -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:49 @@ -3409,94 +3547,92 @@ msgstr "" msgid "This may take a few minutes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:63 msgid "Choose the location to add books from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:64 msgid "Select a folder on your hard disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:65 msgid "" "

calibre can scan your computer for existing books automatically. These books will then be copied into the calibre library. This wizard will help you customize the scanning and import process for your existing book collection.

\n" "

Choose a root folder. Books will be searched for only inside this folder and any sub-folders.

\n" "

Make sure that the folder you chose for your calibre library is not under the root folder you choose.

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:68 msgid "&Root folder:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:69 msgid "This folder and its sub-folders will be scanned for books to import into calibre's library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:72 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:629 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:630 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:642 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:644 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:646 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:648 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:649 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:702 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:404 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:156 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:159 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:163 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:75 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:275 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:156 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:157 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:85 -#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:110 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:191 msgid "..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:72 msgid "Handle multiple files per book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:73 msgid "&One book per folder, assumes every ebook file in a folder is the same book in a different format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:74 msgid "&Multiple books per folder, assumes every ebook file is a different book" msgstr "" @@ -3520,8 +3656,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:122 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/emailp.py:24 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:100 msgid "Formats" msgstr "" @@ -3544,9 +3680,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:293 msgid "None" msgstr "" @@ -3596,13 +3732,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:88 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:115 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31 @@ -3614,16 +3750,26 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:45 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/saving_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/sending_ui.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107 msgid "Form" msgstr "" @@ -3785,52 +3931,52 @@ msgid "input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:89 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99 msgid "&Number of Colors:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101 msgid "Disable &normalize" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102 msgid "Keep &aspect ratio" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103 msgid "Disable &Sharpening" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:109 msgid "Disable &Trimming" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:108 msgid "&Wide" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:104 msgid "&Landscape" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:106 msgid "&Right to left" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:105 msgid "Don't so&rt" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:107 msgid "De&speckle" msgstr "" @@ -3839,7 +3985,7 @@ msgid "&Disable comic processing" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:100 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:120 msgid "&Output format:" msgstr "" @@ -3856,7 +4002,7 @@ msgid "Debug the conversion process." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:39 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:56 msgid "Choose debug folder" msgstr "" @@ -3868,11 +4014,11 @@ msgstr "" msgid "Failed to create debug directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:55 msgid "Choose a folder to put the debug output into. If you specify a folder, calibre will place a lot of debug output into it. This will be useful in understanding the conversion process and figuring out the correct values for conversion parameters like Table of Contents and Chapter Detection." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:59 msgid "The debug process outputs the intermediate HTML generated at various stages of the conversion process. This HTML can sometimes serve as a good starting point for hand editing a conversion." msgstr "" @@ -3927,36 +4073,36 @@ msgstr "" msgid "Sectionize Chapters (Use with care!)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 msgid "Font rescaling wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:105 msgid "" "

This wizard will help you choose an appropriate font size key for your needs. Just enter the base font size of the input document and then enter an input font size. The wizard will display what font size it will be mapped to, by the font rescaling algorithm. You can adjust the algorithm by adjusting the output base font size and font key below. When you find values suitable for you, click OK.

\n" "

By default, if the output base font size is zero and/or no font size key is specified, calibre will use the values from the current Output Profile.

\n" "

See the User Manual for a discussion of how font size rescaling works.

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 msgid "&Output document" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114 msgid "&Base font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:128 msgid "Font size &key:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:117 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:125 @@ -3967,23 +4113,23 @@ msgstr "" msgid " pt" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:112 msgid "Use &default values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113 msgid "&Input document" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:116 msgid "&Font size: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:118 msgid " will map to size: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:119 msgid "0.0 pt" msgstr "" @@ -4007,63 +4153,63 @@ msgstr "" msgid "Justify text" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125 msgid "&Disable font size rescaling" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:126 msgid "Base &font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:129 msgid "Wizard to help you choose an appropriate font size key" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131 msgid "Line &height:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:133 msgid "Input character &encoding:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:134 msgid "Remove &spacing between paragraphs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:135 msgid "Indent size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 msgid "

When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 msgid " em" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 msgid "Text justification:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:139 msgid "&Linearize tables" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:140 msgid "Extra &CSS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:141 msgid "&Transliterate unicode characters to ASCII" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:142 msgid "Insert &blank line" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:143 msgid "Keep &ligatures" msgstr "" @@ -4121,7 +4267,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:200 msgid "Metadata" msgstr "" @@ -4160,82 +4306,82 @@ msgstr "" msgid " is not a valid picture" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:167 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 msgid "Book Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 msgid "Use cover from &source file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 msgid "Browse for an image to use as the cover of this book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 msgid "&Title: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 msgid "Change the title of this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 msgid "&Author(s): " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 msgid "Author So&rt:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 msgid "Change the author(s) of this book. Multiple authors should be separated by a comma" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "&Publisher: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 msgid "Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 msgid "Tags categorize the book. This is particularly useful while searching.

They can be any words or phrases, separated by commas." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 msgid "&Series:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:181 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 msgid "List of known series. You can add new series." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 msgid "Book " msgstr "" @@ -4243,7 +4389,7 @@ msgstr "" msgid "MOBI Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:43 msgid "Default" msgstr "" @@ -4406,18 +4552,18 @@ msgstr "" msgid "Options specific to the input format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:53 msgid "Dialog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:118 msgid "&Input format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:119 msgid "Use &saved conversion settings for individual books" msgstr "" @@ -4448,12 +4594,12 @@ msgid "Footer regular expression:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87 msgid "Invalid regular expression" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:88 msgid "Invalid regular expression: %s" msgstr "" @@ -4575,18 +4721,18 @@ msgstr "" msgid "Force maximum line length" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:51 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:49 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:49 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:55 msgid "TextLabel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 msgid "Use a wizard to help construct the XPath expression" msgstr "" @@ -4681,16 +4827,12 @@ msgid "Undefined" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:131 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:133 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:241 #: /home/kovid/work/calibre/src/calibre/library/server/xml.py:119 msgid "Yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:132 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:134 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:243 #: /home/kovid/work/calibre/src/calibre/library/server/xml.py:121 msgid "No" @@ -4713,7 +4855,7 @@ msgid " index:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:451 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:193 msgid "Automatically number books in this series" msgstr "" @@ -4729,267 +4871,267 @@ msgstr "" msgid "tags to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:48 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:136 msgid "No details available." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:165 msgid "Device no longer connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:283 msgid "Get device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:294 msgid "Get list of books on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:304 msgid "Get annotations from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:313 msgid "Send metadata to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:318 msgid "Send collections to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:343 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:342 msgid "Upload %d books to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:357 msgid "Delete books from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:374 msgid "Download books from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:384 msgid "View book on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:418 msgid "Set default send to device action" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:425 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:424 msgid "Send to main memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:427 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:426 msgid "Send to storage card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:429 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:428 msgid "Send to storage card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:434 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:443 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:442 msgid "Main Memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:453 msgid "Send and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:455 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:454 msgid "Send specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:491 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490 msgid "Eject device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:609 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:636 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629 msgid "Select folder to open as device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:684 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:677 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:685 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678 msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:724 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:717 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:726 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:719 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:812 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:817 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:810 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:819 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:820 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:830 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:823 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:827 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:831 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:828 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:869 msgid "E-book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:872 msgid "Attached, you will find the e-book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:880 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:873 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:107 msgid "by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:874 msgid "in the %s format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:894 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:887 msgid "Sending email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:924 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:932 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1026 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:917 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:925 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1018 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1080 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1199 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1207 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1215 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:925 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:918 msgid "Auto convert the following books before sending via email?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:926 msgid "Could not email the following books as no suitable formats were found:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:951 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:944 msgid "Failed to email books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:952 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:945 msgid "Failed to email the following books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:956 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:949 msgid "Sent by email:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:977 msgid "News:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:986 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:978 msgid "Attached is the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:989 msgid "Sent news to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1089 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1019 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1081 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1200 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1049 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1113 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1216 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 msgid "Could not upload the following books to the device, as no suitable formats were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1278 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1270 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1279 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1271 msgid "

Cannot upload books to device there is no more free space available " msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:83 msgid "Select available formats and their order for this device" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:87 msgid "Use sub directories" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:88 msgid "Use author sort for author" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:90 msgid "Save &template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:48 msgid "Add books by ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:49 msgid "

Enter a list of ISBNs in the box to the left, one per line. calibre will automatically create entries for books based on the ISBN and download metadata and covers for them.

Any invalid ISBNs in the list will be ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:50 msgid "&Paste from clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:73 msgid "Fit &cover within view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:74 msgid "&Previous" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:75 msgid "&Next" msgstr "" @@ -5022,7 +5164,7 @@ msgstr "" msgid "Catalog options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:45 msgid "Choose Format" msgstr "" @@ -5070,27 +5212,27 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:71 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:72 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:73 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:74 msgid "Use &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:75 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:76 msgid "&Move current library to new location" msgstr "" @@ -5102,15 +5244,15 @@ msgstr "" msgid "Set options for converting %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97 msgid "&Title:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98 msgid "&Author(s):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:100 msgid "&Profile:" msgstr "" @@ -5118,1081 +5260,11 @@ msgstr "" msgid "Edit Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:173 -msgid "%(plugin_type)s %(plugins)s" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:174 -msgid "plugins" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:183 -msgid "" -"\n" -"Customization: " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:198 -msgid "General" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 -msgid "Conversion" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 -msgid "" -"Email\n" -"Delivery" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:202 -msgid "Add/Save" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:203 -msgid "Advanced" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:204 -msgid "" -"Content\n" -"Server" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:205 -msgid "Plugins" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:229 -msgid "Auto send" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:229 -msgid "Email" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:234 -msgid "Formats to email. The first matching format will be sent." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:235 -msgid "If checked, downloaded news will be automatically mailed
to this email address (provided it is in one of the listed formats)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:309 -msgid "new email address" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:24 -msgid "Wide" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:24 -msgid "Narrow" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:509 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:50 -msgid "Medium" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:509 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:50 -msgid "Small" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:510 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:51 -msgid "Large" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:516 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:54 -msgid "Always" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:516 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:54 -msgid "Automatic" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:55 -msgid "Never" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:530 -msgid "Toolbars/Context menus" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:544 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:156 -msgid "Done" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:545 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:157 -msgid "Confirmation dialogs have all been reset" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:550 -msgid "System port selected" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:551 -msgid "The value %d you have chosen for the content server port is a system port. Your operating system may not allow the server to run on this port. To be safe choose a port number larger than 1024." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:571 -msgid "Failed to install command line tools." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:574 -msgid "Command line tools installed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:575 -msgid "Command line tools installed in" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:576 -msgid "If you move calibre.app, you have to re-install the command line tools." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:627 -msgid "No valid plugin path" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:628 -msgid "%s is not a valid plugin path" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:631 -msgid "Choose plugin" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:643 -msgid "Plugin cannot be disabled" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:644 -msgid "The plugin: %s cannot be disabled" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:653 -msgid "Plugin not customizable" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:654 -msgid "Plugin: %s does not need customization" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:662 -msgid "Customize" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:700 -msgid "Cannot remove builtin plugin" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:701 -msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:716 -msgid "Invalid tweaks" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:717 -msgid "The tweaks you entered are invalid, try resetting the tweaks to default and changing them one by one until you find the invalid setting." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:747 -msgid "You must select a column to delete it" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:752 -msgid "The selected column is not a custom column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:754 -msgid "Do you really want to delete column %s and all its data?" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:821 -msgid "Error log:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:828 -msgid "Access log:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:856 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:319 -msgid "Failed to start content server" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:881 -msgid "Invalid size" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:882 -msgid "The size %s is invalid. must be of the form widthxheight" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:951 -msgid "Must restart" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:952 -msgid "The changes you made require that Calibre be restarted. Please restart as soon as practical." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:986 -msgid "Checking database integrity" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1006 -msgid "Failed to check database integrity" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1011 -msgid "Some inconsistencies found" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1012 -msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:133 -msgid "TabWidget" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:134 -msgid "Here you can control how calibre will read metadata from the files you add to it. calibre can either read metadata from the contents of the file, or from the filename." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:135 -msgid "Read metadata only from &file name" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:136 -msgid "Swap the firstname and lastname of the author. This affects only metadata read from file names." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:137 -msgid "&Swap author firstname and lastname" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:138 -msgid "" -"If an existing book with a similar title and author is found that does not have the format being added, the format is added\n" -"to the existing book, instead of creating a new entry. If the existing book already has the format, then it is silently ignored.\n" -"\n" -"Title match ignores leading indefinite articles (\"the\", \"a\", \"an\"), punctuation, case, etc. Author match is exact." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:142 -msgid "If books with similar titles and authors found, &merge the new files automatically" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:143 -msgid "&Configure metadata from file name" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:144 -msgid "&Adding books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:145 -msgid "Here you can control how calibre will save your books when you click the Save to Disk button:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:146 -msgid "Save &cover separately" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:147 -msgid "Update &metadata in saved copies" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:148 -msgid "Save metadata in &OPF file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:149 -msgid "Convert non-English characters to &English equivalents" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:150 -msgid "Format &dates as:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:151 -msgid "File &formats to save:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:152 -msgid "Replace space with &underscores" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:153 -msgid "Change paths to &lowercase" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:154 -msgid "&Saving books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:155 -msgid "Metadata &management:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:156 -msgid "Manual management" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:157 -msgid "Only on send" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:158 -msgid "Automatic management" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:159 -msgid "" -"

  • Manual Management: Calibre updates the metadata and adds collections only when a book is sent. With this option, calibre will never remove a collection.
  • \n" -"
  • Only on send: Calibre updates metadata and adds/removes collections for a book only when it is sent to the device.
  • \n" -"
  • Automatic management: Calibre automatically keeps metadata on the device in sync with the calibre library, on every connect
  • " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:162 -msgid "Here you can control how calibre will save your books when you click the Send to Device button. This setting can be overriden for individual devices by customizing the device interface plugins in Preferences->Plugins" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:163 -msgid "Sending to &device" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:613 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:139 -msgid "Show notification when &new version is available" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:614 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:138 -msgid "Download &social metadata (tags/ratings/etc.) by default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:615 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:137 -msgid "&Overwrite author and title by default when fetching metadata" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:616 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:142 -msgid "Default network &timeout:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:617 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:143 -msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:618 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:144 -msgid " seconds" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:619 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:100 -msgid "Choose &language (requires restart):" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:620 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:145 -msgid "Normal" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:621 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 -msgid "High" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:622 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:147 -msgid "Low" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:623 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:148 -msgid "Job &priority:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:624 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:149 -msgid "Preferred &output format:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:625 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:153 -msgid "Tags to apply when adding a book:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:626 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:152 -msgid "A comma-separated list of tags that will be applied to books added to the library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:627 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:154 -msgid "Reset all disabled &confirmation dialogs" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:628 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:155 -msgid "Preferred &input format order:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:631 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:98 -msgid "User Interface &layout (needs restart):" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:632 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:99 -msgid "&Number of covers to show in browse mode (needs restart):" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:633 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:150 -msgid "Restriction to apply when the current library is opened:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:634 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:151 -msgid "Apply this restriction on calibre startup if the current library is being used. Also applied when switching to this library. Note that this setting is per library. " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:635 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:102 -msgid "Disable all animations. Useful if you have a slow/old computer." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:103 -msgid "Disable &animations" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:110 -msgid "&Toolbar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:638 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:111 -msgid "&Icon size:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:639 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:112 -msgid "Show &text under icons:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:640 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:141 -msgid "&Delete news from library when it is automatically sent to reader" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:641 -msgid "Select visible &columns in library view" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:643 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:79 -msgid "Remove a user-defined column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:645 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:81 -msgid "Add a user-defined column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:647 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:83 -msgid "Edit settings of a user-defined column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:650 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:158 -msgid "Use internal &viewer for:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:651 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:109 -msgid "Search as you type" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:652 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:107 -msgid "Use &Roman numerals for series" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:653 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:104 -msgid "Enable system &tray icon (needs restart)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:654 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:101 -msgid "Show &average ratings in the tags browser" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:655 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:140 -msgid "Automatically send downloaded &news to ebook reader" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:656 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:105 -msgid "Show &splash screen at startup" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:657 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:108 -msgid "Show cover &browser in a separate window (needs restart)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:658 -msgid "Show ¬ifications in system tray" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:659 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:671 -msgid "&Miscellaneous" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:660 -msgid "Add an email address to which to send books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:661 -msgid "&Add email" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:662 -msgid "Make &default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:663 -msgid "&Remove email" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:664 -msgid "calibre can send your books to you (or your reader) by email. Emails will be automatically sent for downloaded news to all email addresses that have Auto-send checked." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:665 -msgid "&Maximum number of waiting worker processes (needs restart):" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:666 -msgid "Limit the max. simultaneous jobs to the available CPU &cores" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:667 -msgid "Debug &device detection" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:668 -msgid "&Check database integrity" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:669 -msgid "Open calibre &configuration directory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:670 -msgid "&Install command line tools" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:672 -msgid "Values for the tweaks are shown below. Edit them to change the behavior of calibre" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:673 -msgid "All available tweaks" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:674 -msgid "&Current tweaks" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:675 -msgid "&Restore to defaults" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:676 -msgid "&Tweaks" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:677 -msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:678 -msgid "Server &port:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:679 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 -msgid "&Username:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:680 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 -msgid "&Password:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:681 -msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:682 -msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:683 -msgid "Max. &cover size:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:684 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 -msgid "&Show password" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:685 -msgid "Max. &OPDS items per query:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:686 -msgid "Max. OPDS &ungrouped items:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:687 -msgid "Restriction (saved search) to apply:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:688 -msgid "This restriction (based on a saved search) will restrict the books the content server makes available to those matching the search. This setting is per library (i.e. you can have a different restriction per library)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:689 -msgid "&Start Server" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690 -msgid "St&op Server" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:691 -msgid "&Test Server" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:692 -msgid "Run server &automatically on startup" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:693 -msgid "View &server logs" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 -msgid "" -"

    Remember to leave calibre running as the server only runs as long as calibre is running.\n" -"

    Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:696 -msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:697 -msgid "Enable/&Disable plugin" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:698 -msgid "&Customize plugin" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:699 -msgid "&Remove plugin" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:700 -msgid "Add new plugin" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:701 -msgid "Plugin &file:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:703 -msgid "&Add" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:125 -msgid "Create Tag-based Column" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:126 -msgid "Lookup name" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:127 -msgid "Column heading" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:128 -msgid "Column type" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:129 -msgid "Use brackets" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:130 -msgid "Values can be edited" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:135 -msgid "Text" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:136 -msgid "Number" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 -#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:588 -msgid "Date" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:138 -msgid "Tag on book" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:139 -msgid "Explanation text added in create_ct_column.py" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:140 -msgid "Create and edit tag-based columns" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:19 -msgid "Text, column shown in the tag browser" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:22 -msgid "Comma separated text, like tags, shown in the tag browser" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:25 -msgid "Long text, like comments, not shown in the tag browser" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:28 -msgid "Text column for keeping series-like information" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:33 -msgid "Floating point numbers" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:35 -msgid "Integers" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:37 -msgid "Ratings, shown with stars" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:40 -msgid "Yes/No" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:69 -msgid "No column selected" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:70 -msgid "No column has been selected" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:74 -msgid "Selected column is not a user-defined column" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:105 -msgid "No lookup name was provided" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:107 -msgid "The lookup name must contain only lower case letters, digits and underscores, and start with a letter" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:109 -msgid "Lookup names cannot end with _index, because these names are reserved for the index of a series column." -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:118 -msgid "No column heading was provided" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:124 -msgid "The lookup name %s is already used" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:134 -msgid "The heading %s is already used" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:101 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:117 -msgid "Create or edit custom columns" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:102 -msgid "&Lookup name" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:103 -msgid "Column &heading" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:104 -msgid "Used for searching the column. Must contain only digits and lower case letters." -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:105 -msgid "Column heading in the library view and category name in the tag browser" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:106 -msgid "Column &type" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:107 -msgid "What kind of information will be kept in the column." -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:108 -msgid "" -"

    Date format. Use 1-4 'd's for day, 1-4 'M's for month, and 2 or 4 'y's for year.

    \n" -"

    For example:\n" -"

      \n" -"
    • ddd, d MMM yyyy gives Mon, 5 Jan 2010
    • \n" -"
    • dd MMMM yy gives 05 January 10
    • \n" -"
    " -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:114 -msgid "Use MMM yyyy for month + year, yyyy for year only" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:115 -msgid "Default: dd MMM yyyy." -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:116 -msgid "Format for &dates" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:21 -msgid "Getting debug information" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:22 -msgid "Copy to &clipboard" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:24 -msgid "Debug device detection" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:44 -msgid "Invalid template" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:45 -msgid "The template %s is invalid:" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:42 -msgid "Save &template" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:43 -msgid "By adjusting the template below, you can control what folders the files are saved in and what filenames they are given. You can use the / character to indicate sub-folders. Available metadata variables are described below. If a particular book does not have some metadata, the variable will be replaced by the empty string." -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:44 -msgid "Available variables:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/social.py:34 -msgid "Downloading social metadata, please wait..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:35 -msgid "Switch between library and device views" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:38 -msgid "Separator" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:51 -msgid "Choose library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:201 -msgid "The main toolbar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:202 -msgid "The main toolbar when a device is connected" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:203 -msgid "The context menu for the books in the calibre library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:205 -msgid "The context menu for the books on the device" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:243 -msgid "Cannot add" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:244 -msgid "Cannot add the actions %s to this location" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:261 -msgid "Cannot remove" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:262 -msgid "Cannot remove the actions %s from this location" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97 -msgid "Customize the actions in:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98 -msgid "A&vailable actions" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99 -msgid "&Current actions" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100 -msgid "Move selected action up" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102 -msgid "Move selected action down" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78 -msgid "Ctrl+S" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105 -msgid "Add selected actions to toolbar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:107 -msgid "Remove selected actions from toolbar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:109 -msgid "Restore to &default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:55 msgid "&Show this warning again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:47 msgid "ERROR" msgstr "" @@ -6206,6 +5278,15 @@ msgstr "" msgid "Location" msgstr "" +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:31 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:588 +msgid "Date" +msgstr "" + #: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1064 @@ -6282,55 +5363,55 @@ msgstr "" msgid "No metadata found, try adjusting the title and author or the ISBN key." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:90 msgid "Fetch metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:91 msgid "

    calibre can find metadata for your books from two locations: Google Books and isbndb.com.

    To use isbndb.com you must sign up for a free account and enter your access key below." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:92 msgid "&Access Key:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:93 msgid "Fetch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:94 msgid "Matches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:95 msgid "Select the book that most closely matches your copy from the list below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:96 msgid "Download &social metadata (tags/rating/etc.) for the selected book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:97 msgid "Overwrite author and title with author and title of selected book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:42 msgid "Details of job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:49 msgid "Active Jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:50 msgid "&Stop selected job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:51 msgid "Show job &details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:52 msgid "Stop &all non device jobs" msgstr "" @@ -6342,80 +5423,80 @@ msgstr "" msgid "Applying changes to %d books. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 msgid "A&utomatically set author sort" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 msgid "Author s&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 msgid "Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 msgid "No change" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 msgid "Add ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:180 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:181 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:182 msgid "Remove all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 msgid "Check this box to remove all tags from the books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:187 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 msgid "&Swap title and author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 msgid "" "Selected books will be automatically numbered,\n" "in the order you selected them.\n" @@ -6423,24 +5504,24 @@ msgid "" "Book A will have series number 1 and Book B series number 2." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:194 msgid "" "Remove stored conversion settings for the selected books.\n" "\n" "Future conversion of these books will use the default settings." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:197 msgid "Remove &stored conversion settings for the selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:193 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:413 msgid "&Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:194 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:414 msgid "&Custom metadata" msgstr "" @@ -6580,98 +5661,118 @@ msgstr "" msgid "Could not open %s. Is it being used by another program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 msgid "Edit Meta Information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 msgid "Swap the author and title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 msgid "Automatically create the author sort entry based on the current author entry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:387 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 msgid "IS&BN:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 msgid "Publishe&d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 msgid "dd MMM yyyy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 msgid "&Date:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 msgid "&Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 msgid "&Fetch metadata from server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 msgid "Available Formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 msgid "Add a new format for this book to the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 msgid "Remove the selected formats for this book from the database." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 msgid "Set the cover for the book from the selected format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:404 msgid "Update metadata from the metadata in the selected format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 msgid "&Browse" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 msgid "Reset cover to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 msgid "Download &cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:411 msgid "Generate a default cover based on the title and author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:412 msgid "&Generate cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:61 msgid "Password needed" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 +msgid "&Username:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 +msgid "&Password:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server_ui.py:130 +msgid "&Show password" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:59 msgid "Aborting..." msgstr "" @@ -6685,37 +5786,37 @@ msgid "The current saved search will be permanently deleted. Are you sure msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 msgid "Saved Search Editor" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:89 msgid "Saved Search: " msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 msgid "Select a saved search to edit" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:91 msgid "Delete this selected saved search" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:93 msgid "Enter a new saved search name." msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:94 msgid "Add the new saved search" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:96 msgid "Change the contents of the saved search" msgstr "" @@ -6744,7 +5845,7 @@ msgid "Last downloaded" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:220 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197 msgid "Schedule news download" msgstr "" @@ -6764,111 +5865,111 @@ msgstr "" msgid "Cannot download news as no internet connection is active" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:278 msgid "Recipes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199 msgid "Download all scheduled recipes at once" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200 msgid "Download &all scheduled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201 msgid "blurb" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202 msgid "&Schedule for download:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 msgid "Every " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204 msgid "day" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205 msgid "Monday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206 msgid "Tuesday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207 msgid "Wednesday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:208 msgid "Thursday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209 msgid "Friday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210 msgid "Saturday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211 msgid "Sunday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 msgid "at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 msgid "Interval at which to download this recipe. A value of zero means that the recipe will be downloaded every hour." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:268 msgid " days" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:216 msgid "&Account" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220 msgid "For the scheduling to work, you must leave calibre running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:221 msgid "&Schedule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:222 msgid "Add &title as tag" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:223 msgid "&Extra tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:224 msgid "&Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:225 msgid "&Download now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:226 msgid "Delete downloaded news older than the specified number of days. Set to zero to disable." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:228 msgid "Delete downloaded news older than " msgstr "" @@ -6888,55 +5989,55 @@ msgstr "" msgid "Negate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:118 msgid "Advanced Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:119 msgid "Find entries that have..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:120 msgid "&All these words:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:121 msgid "This exact &phrase:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:122 msgid "&One or more of these words:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:123 msgid "But dont show entries that have..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124 msgid "Any of these &unwanted words:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125 msgid "What kind of match to use:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:126 msgid "Contains: the word or phrase matches anywhere in the metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:127 msgid "Equals: the word or phrase must match an entire metadata field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:128 msgid "Regular expression: the expression must match anywhere in the metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:129 msgid " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:130 msgid "See the User Manual for more help" msgstr "" @@ -6962,51 +6063,51 @@ msgstr "" msgid "The current tag category will be permanently deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:158 msgid "User Categories Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:159 msgid "A&vailable items" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:160 msgid "Apply tags to current tag category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:162 msgid "A&pplied items" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:163 msgid "Unapply (remove) tag from current tag category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:165 msgid "Category name: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:166 msgid "Select a category to edit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:167 msgid "Delete this selected tag category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:169 msgid "Enter a new category name. Select the kind before adding it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:170 msgid "Add the new category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:172 msgid "Category filter: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:173 msgid "Select the content kind of the new category" msgstr "" @@ -7019,39 +6120,39 @@ msgstr "" msgid "The following tags are used by one or more books. Are you certain you want to delete them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 msgid "Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 msgid "A&vailable tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 msgid "Delete tag from database. This will unapply the tag from all books and then remove it from the database." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:132 msgid "Apply tag to current book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:134 msgid "A&pplied tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 msgid "Unapply (remove) tag from current book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:137 msgid "&Add tag:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:138 msgid "If the tag you want is not in the available list, you can add it here. Accepts a comma separated list of tags." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:139 msgid "Add tag to available tags and apply it to current book" msgstr "" @@ -7089,31 +6190,36 @@ msgstr "" msgid "Are you certain you want to delete the following items?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 msgid "Category Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78 msgid "Items in use" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:79 msgid "Delete item from database. This will unapply the item from all books and then remove it from the database." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:81 msgid "Rename the item in every book where it is used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:106 +msgid "Ctrl+S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:56 msgid "Test email settings" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:57 msgid "Send test mail from %s to:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 msgid "&Test" msgstr "" @@ -7132,7 +6238,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:260 msgid "Switch to Advanced mode" msgstr "" @@ -7197,35 +6303,35 @@ msgstr "" msgid "Choose a recipe file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:253 msgid "Add custom news source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:254 msgid "Available user recipes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:255 msgid "Add/Update &recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:256 msgid "&Remove recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:257 msgid "&Share recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:258 msgid "Customize &builtin recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:259 msgid "&Load recipe from file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:261 msgid "" "