From 74dc8d5b1d6e26ad117db2c30a9614d51db6769f Mon Sep 17 00:00:00 2001 From: John Schember Date: Sun, 5 Jul 2009 10:08:08 -0400 Subject: [PATCH] Preferred input format: User orderable list of input formats to prefer. --- src/calibre/customize/ui.py | 7 ++++ src/calibre/gui2/__init__.py | 7 +++- src/calibre/gui2/dialogs/config.py | 28 +++++++++++++- src/calibre/gui2/dialogs/config.ui | 62 ++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py index 78afa3be15..04f9b80529 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -276,6 +276,13 @@ def plugin_for_input_format(fmt): if fmt.lower() in plugin.file_types: return plugin +def all_input_formats(): + formats = set([]) + for plugin in input_format_plugins(): + for format in plugin.file_types: + formats.add(format) + return formats + def available_input_formats(): formats = set([]) for plugin in input_format_plugins(): diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index af4ca16eac..a7e088ee1c 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -11,6 +11,7 @@ ORG_NAME = 'KovidsBrain' APP_UID = 'libprs500' from calibre import islinux, iswindows from calibre.startup import get_lang +from calibre.customize.ui import all_input_formats from calibre.utils.config import Config, ConfigProxy, dynamic import calibre.resources as resources from calibre.ebooks.metadata.meta import get_metadata, metadata_from_formats @@ -48,9 +49,11 @@ def _config(): help=_('Defaults for conversion to LRF')) c.add_opt('LRF_ebook_viewer_options', default=None, help=_('Options for the LRF ebook viewer')) - c.add_opt('internally_viewed_formats', default=['LRF', 'EPUB', 'LIT', - 'MOBI', 'PRC', 'HTML', 'FB2', 'PDB', 'RB'], + c.add_opt('internally_viewed_formats', default=all_input_formats(), help=_('Formats that are viewed using the internal viewer')) + c.add_opt('input_format_order', default=['EPUB', 'MOBI', 'PRC', 'LIT', + 'HTML', 'FB2', 'PDB', 'RB'], + help=_('Order list of formats to prefer for input.')) c.add_opt('column_map', default=ALL_COLUMNS, help=_('Columns to be displayed in the book list')) c.add_opt('autolaunch_server', default=False, help=_('Automatically launch content server on application startup')) diff --git a/src/calibre/gui2/dialogs/config.py b/src/calibre/gui2/dialogs/config.py index aacccbd6b9..20ade05846 100644 --- a/src/calibre/gui2/dialogs/config.py +++ b/src/calibre/gui2/dialogs/config.py @@ -22,7 +22,8 @@ from calibre.library import server_config from calibre.customize.ui import initialized_plugins, is_disabled, enable_plugin, \ disable_plugin, customize_plugin, \ plugin_customization, add_plugin, \ - remove_plugin, input_format_plugins, \ + 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.look_and_feel import LookAndFeelWidget @@ -337,6 +338,18 @@ class ConfigDialog(QDialog, Ui_Dialog): self.connect(self.browse_button, SIGNAL('clicked(bool)'), self.browse) self.connect(self.compact_button, SIGNAL('clicked(bool)'), self.compact) + input_map = config['input_format_order'] + all_formats = set() + for fmt in all_input_formats(): + 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) + dirs = config['frequently_used_directories'] rn = config['use_roman_numerals_for_series_number'] self.timeout.setValue(prefs['network_timeout']) @@ -553,6 +566,17 @@ class ConfigDialog(QDialog, Ui_Dialog): 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 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) def up_column(self): idx = self.columns.currentRow() @@ -656,6 +680,8 @@ class ConfigDialog(QDialog, Ui_Dialog): config['new_version_notification'] = bool(self.new_version_notification.isChecked()) prefs['network_timeout'] = int(self.timeout.value()) path = qstring_to_unicode(self.location.text()) + input_cols = [unicode(self.input_order.item(i).data(Qt.UserRole).toString()) for i in range(self.input_order.count())] + config['input_format_order'] = input_cols cols = [unicode(self.columns.item(i).data(Qt.UserRole).toString()) for i in range(self.columns.count()) if self.columns.item(i).checkState()==Qt.Checked] if not cols: cols = ['title'] diff --git a/src/calibre/gui2/dialogs/config.ui b/src/calibre/gui2/dialogs/config.ui index 90a53364ca..f2cf9b3202 100644 --- a/src/calibre/gui2/dialogs/config.ui +++ b/src/calibre/gui2/dialogs/config.ui @@ -232,6 +232,68 @@ + + + + Preferred &input format order: + + + + + + + + true + + + QAbstractItemView::SelectRows + + + + + + + + + ... + + + + :/images/arrow-up.svg:/images/arrow-up.svg + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + :/images/arrow-down.svg:/images/arrow-down.svg + + + + + + + + + +