From dea55f5f09d07330183a0d2d9263ba8868c256c9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 21 Jan 2010 18:32:25 -0700 Subject: [PATCH] Make the selection of db fields to add to the CSV/xML catalog in the GUI more intuitive --- src/calibre/gui2/catalog/catalog_csv_xml.py | 23 ++++-- src/calibre/gui2/catalog/catalog_csv_xml.ui | 85 --------------------- src/calibre/gui2/dialogs/catalog.py | 1 + src/calibre/library/catalog.py | 13 ++-- src/calibre/library/cli.py | 2 +- 5 files changed, 26 insertions(+), 98 deletions(-) diff --git a/src/calibre/gui2/catalog/catalog_csv_xml.py b/src/calibre/gui2/catalog/catalog_csv_xml.py index 3b2b25a800..6bd5d2c082 100644 --- a/src/calibre/gui2/catalog/catalog_csv_xml.py +++ b/src/calibre/gui2/catalog/catalog_csv_xml.py @@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en' from calibre.gui2 import gprefs from calibre.gui2.catalog.catalog_csv_xml_ui import Ui_Form -from PyQt4.Qt import QWidget +from PyQt4.Qt import QWidget, QListWidgetItem class PluginWidget(QWidget, Ui_Form): @@ -20,23 +20,32 @@ class PluginWidget(QWidget, Ui_Form): def __init__(self, parent=None): QWidget.__init__(self, parent) self.setupUi(self) + from calibre.library.catalog import FIELDS + self.all_fields = [] + for x in FIELDS: + if x != 'all': + self.all_fields.append(x) + QListWidgetItem(x, self.db_fields) def initialize(self, name): self.name = name + fields = gprefs.get(name+'_db_fields', self.all_fields) # Restore the activated fields from last use for x in range(self.db_fields.count()): - pref = '%s_db_fields_%s' % (self.name, self.db_fields.item(x).text()) - activated = gprefs[pref] if pref in gprefs else False - self.db_fields.item(x).setSelected(activated) + item = self.db_fields.item(x) + item.setSelected(unicode(item.text()) in fields) def options(self): # Save the currently activated fields + fields = [] for x in range(self.db_fields.count()): - pref = '%s_db_fields_%s' % (self.name, self.db_fields.item(x).text()) - gprefs[pref] = self.db_fields.item(x).isSelected() + item = self.db_fields.item(x) + if item.isSelected(): + fields.append(unicode(item.text())) + gprefs.set(self.name+'_db_fields', fields) # Return a dictionary with current options for this widget if len(self.db_fields.selectedItems()): - return {'fields':[str(item.text()) for item in self.db_fields.selectedItems()]} + return {'fields':[unicode(item.text()) for item in self.db_fields.selectedItems()]} else: return {'fields':['all']} diff --git a/src/calibre/gui2/catalog/catalog_csv_xml.ui b/src/calibre/gui2/catalog/catalog_csv_xml.ui index 76ad414539..1548a622e5 100644 --- a/src/calibre/gui2/catalog/catalog_csv_xml.ui +++ b/src/calibre/gui2/catalog/catalog_csv_xml.ui @@ -34,91 +34,6 @@ QAbstractItemView::MultiSelection - - - author_sort - - - - - authors - - - - - comments - - - - - cover - - - - - formats - - - - - id - - - - - isbn - - - - - pubdate - - - - - publisher - - - - - rating - - - - - series_index - - - - - series - - - - - size - - - - - tags - - - - - timestamp - - - - - title - - - - - uuid - - diff --git a/src/calibre/gui2/dialogs/catalog.py b/src/calibre/gui2/dialogs/catalog.py index 9c004d9b07..2e81042467 100644 --- a/src/calibre/gui2/dialogs/catalog.py +++ b/src/calibre/gui2/dialogs/catalog.py @@ -17,6 +17,7 @@ from calibre.customize.ui import catalog_plugins class Catalog(QDialog, Ui_Dialog): ''' Catalog Dialog builder''' + widgets = [] def __init__(self, parent, dbspec, ids): import re, cStringIO diff --git a/src/calibre/library/catalog.py b/src/calibre/library/catalog.py index 672fd0d295..19e00b6488 100644 --- a/src/calibre/library/catalog.py +++ b/src/calibre/library/catalog.py @@ -2,6 +2,11 @@ import os from calibre.customize import CatalogPlugin +FIELDS = ['all', 'author_sort', 'authors', 'comments', + 'cover', 'formats', 'id', 'isbn', 'pubdate', 'publisher', 'rating', + 'series_index', 'series', 'size', 'tags', 'timestamp', 'title', + 'uuid'] + class CSV_XML(CatalogPlugin): 'CSV/XML catalog generator' @@ -22,11 +27,9 @@ class CSV_XML(CatalogPlugin): dest = 'fields', help = _('The fields to output when cataloging books in the ' 'database. Should be a comma-separated list of fields.\n' - 'Available fields: all, author_sort, authors, comments, ' - 'cover, formats, id, isbn, pubdate, publisher, rating, ' - 'series_index, series, size, tags, timestamp, title, uuid.\n' - "Default: '%default'\n" - "Applies to: CSV, XML output formats")), + 'Available fields: %s.\n' + "Default: '%%default'\n" + "Applies to: CSV, XML output formats")%', '.join(FIELDS)), Option('--sort-by', default = 'id', diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index ddfb96704c..cf29106684 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -673,7 +673,7 @@ def command_catalog(args, dbpath): if opts.verbose: log("library.cli:command_catalog dispatching to plugin %s" % plugin.name) if opts.ids: - opts.ids = [int(id) for id in opts.ids.split(',')] + opts.ids = [int(id) for id in opts.ids.split(',')] with plugin: plugin.run(args[1], opts, get_db(dbpath, opts))