From c6260c678ac073b63e65c8f6900fecdc169c5f10 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 12:12:45 -0700 Subject: [PATCH 01/10] Refactoring to use new completer --- src/calibre/gui2/convert/metadata.ui | 12 +++++----- src/calibre/gui2/custom_column_widgets.py | 28 +++++++++++++---------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/calibre/gui2/convert/metadata.ui b/src/calibre/gui2/convert/metadata.ui index 61c27594c4..47d983d870 100644 --- a/src/calibre/gui2/convert/metadata.ui +++ b/src/calibre/gui2/convert/metadata.ui @@ -190,7 +190,7 @@ - + Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas. @@ -255,7 +255,7 @@ - + true @@ -282,14 +282,14 @@
widgets.h
- CompleteComboBox + MultiCompleteComboBox QComboBox -
widgets.h
+
calibre/gui2/complete.h
- CompleteLineEdit + MultiCompleteLineEdit QLineEdit -
widgets.h
+
calibre/gui2/complete.h
ImageView diff --git a/src/calibre/gui2/custom_column_widgets.py b/src/calibre/gui2/custom_column_widgets.py index 360a5bcd0a..0555d42b4f 100644 --- a/src/calibre/gui2/custom_column_widgets.py +++ b/src/calibre/gui2/custom_column_widgets.py @@ -14,7 +14,7 @@ from PyQt4.Qt import QComboBox, QLabel, QSpinBox, QDoubleSpinBox, QDateEdit, \ QPushButton from calibre.utils.date import qt_to_dt, now -from calibre.gui2.widgets import CompleteLineEdit, EnComboBox +from calibre.gui2.complete import MultiCompleteLineEdit, MultiCompleteComboBox from calibre.gui2.comments_editor import Editor as CommentsEditor from calibre.gui2 import UNDEFINED_QDATE, error_dialog from calibre.utils.config import tweaks @@ -228,10 +228,11 @@ class Text(Base): values = self.all_values = list(self.db.all_custom(num=self.col_id)) values.sort(key=sort_key) if self.col_metadata['is_multiple']: - w = CompleteLineEdit(parent, values) + w = MultiCompleteLineEdit(parent) + w.update_items_cache(values) w.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) else: - w = EnComboBox(parent) + w = MultiCompleteComboBox(parent) w.setSizeAdjustPolicy(w.AdjustToMinimumContentsLengthWithIcon) w.setMinimumContentsLength(25) self.widgets = [QLabel('&'+self.col_metadata['name']+':', parent), w] @@ -240,9 +241,10 @@ class Text(Base): val = self.db.get_custom(book_id, num=self.col_id, index_is_id=True) self.initial_val = val val = self.normalize_db_val(val) + self.widgets[1].update_items_cache(self.all_values) + if self.col_metadata['is_multiple']: self.setter(val) - self.widgets[1].update_items_cache(self.all_values) else: idx = None for i, c in enumerate(self.all_values): @@ -276,7 +278,7 @@ class Series(Base): def setup_ui(self, parent): values = self.all_values = list(self.db.all_custom(num=self.col_id)) values.sort(key=sort_key) - w = EnComboBox(parent) + w = MultiCompleteComboBox(parent) w.setSizeAdjustPolicy(w.AdjustToMinimumContentsLengthWithIcon) w.setMinimumContentsLength(25) self.name_widget = w @@ -305,6 +307,7 @@ class Series(Base): if c == val: idx = i self.name_widget.addItem(c) + self.name_widget.update_items_cache(self.all_values) self.name_widget.setEditText('') if idx is not None: self.widgets[1].setCurrentIndex(idx) @@ -670,7 +673,7 @@ class BulkDateTime(BulkBase): class BulkSeries(BulkBase): def setup_ui(self, parent): - self.make_widgets(parent, EnComboBox) + self.make_widgets(parent, MultiCompleteComboBox) values = self.all_values = list(self.db.all_custom(num=self.col_id)) values.sort(key=sort_key) self.main_widget.setSizeAdjustPolicy(self.main_widget.AdjustToMinimumContentsLengthWithIcon) @@ -705,6 +708,7 @@ class BulkSeries(BulkBase): def initialize(self, book_id): self.idx_widget.setChecked(False) + self.main_widget.update_items_cache(self.all_values) for c in self.all_values: self.main_widget.addItem(c) self.main_widget.setEditText('') @@ -795,7 +799,8 @@ class RemoveTags(QWidget): layout.setSpacing(5) layout.setContentsMargins(0, 0, 0, 0) - self.tags_box = CompleteLineEdit(parent, values) + self.tags_box = MultiCompleteLineEdit(parent) + self.tags_box.update_items_cache(values) layout.addWidget(self.tags_box, stretch=3) self.checkbox = QCheckBox(_('Remove all tags'), parent) layout.addWidget(self.checkbox) @@ -816,7 +821,7 @@ class BulkText(BulkBase): values = self.all_values = list(self.db.all_custom(num=self.col_id)) values.sort(key=sort_key) if self.col_metadata['is_multiple']: - self.make_widgets(parent, CompleteLineEdit, + self.make_widgets(parent, MultiCompleteLineEdit, extra_label_text=_('tags to add')) self.main_widget.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) self.adding_widget = self.main_widget @@ -829,16 +834,15 @@ class BulkText(BulkBase): w.tags_box.textChanged.connect(self.a_c_checkbox_changed) w.checkbox.stateChanged.connect(self.a_c_checkbox_changed) else: - self.make_widgets(parent, EnComboBox) + self.make_widgets(parent, MultiCompleteComboBox) self.main_widget.setSizeAdjustPolicy( self.main_widget.AdjustToMinimumContentsLengthWithIcon) self.main_widget.setMinimumContentsLength(25) self.ignore_change_signals = False def initialize(self, book_ids): - if self.col_metadata['is_multiple']: - self.main_widget.update_items_cache(self.all_values) - else: + self.main_widget.update_items_cache(self.all_values) + if not self.col_metadata['is_multiple']: val = self.get_initial_value(book_ids) self.initial_val = val = self.normalize_db_val(val) idx = None From fc3123e4c171f504f5e8fa9cd14f6c444b1e575a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 12:20:07 -0700 Subject: [PATCH 02/10] Refactor advanced search dialog to use new completer --- src/calibre/gui2/dialogs/search.py | 7 ++----- src/calibre/gui2/dialogs/search.ui | 14 +++++++------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/dialogs/search.py b/src/calibre/gui2/dialogs/search.py index ab3fd3ec4e..0fbe188aa5 100644 --- a/src/calibre/gui2/dialogs/search.py +++ b/src/calibre/gui2/dialogs/search.py @@ -3,7 +3,7 @@ __copyright__ = '2008, Kovid Goyal ' import re, copy -from PyQt4.Qt import QDialog, QDialogButtonBox, QCompleter, Qt +from PyQt4.Qt import QDialog, QDialogButtonBox from calibre.gui2.dialogs.search_ui import Ui_Dialog from calibre.library.caches import CONTAINS_MATCH, EQUALS_MATCH @@ -29,20 +29,17 @@ class SearchDialog(QDialog, Ui_Dialog): name = name.strip().replace('|', ',') self.authors_box.addItem(name) self.authors_box.setEditText('') - self.authors_box.completer().setCompletionMode(QCompleter.PopupCompletion) - self.authors_box.setAutoCompletionCaseSensitivity(Qt.CaseInsensitive) self.authors_box.set_separator('&') self.authors_box.set_space_before_sep(True) self.authors_box.update_items_cache(db.all_author_names()) all_series = db.all_series() all_series.sort(key=lambda x : sort_key(x[1])) + self.series_box.update_items_cache([x[1] for x in all_series]) for i in all_series: id, name = i self.series_box.addItem(name) self.series_box.setEditText('') - self.series_box.completer().setCompletionMode(QCompleter.PopupCompletion) - self.series_box.setAutoCompletionCaseSensitivity(Qt.CaseInsensitive) all_tags = db.all_tags() self.tags_box.update_items_cache(all_tags) diff --git a/src/calibre/gui2/dialogs/search.ui b/src/calibre/gui2/dialogs/search.ui index 1d013a1e9f..842787a2da 100644 --- a/src/calibre/gui2/dialogs/search.ui +++ b/src/calibre/gui2/dialogs/search.ui @@ -265,21 +265,21 @@
- + Enter an author's name. Only one author can be used. - + Enter a series name, without an index. Only one series name can be used. - + Enter tags separated by spaces @@ -360,14 +360,14 @@
widgets.h
- CompleteLineEdit + MultiCompleteLineEdit QLineEdit -
widgets.h
+
calibre/gui2/complete.h
- CompleteComboBox + MultiCompleteComboBox QComboBox -
widgets.h
+
calibre/gui2/complete.h
From c7c3027c8d2602687e1f6cb198486b19b1edd671 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 12:29:54 -0700 Subject: [PATCH 03/10] Refactor bulk metadata edit dialog to use new completer (apart from S&R widgets) --- src/calibre/gui2/dialogs/metadata_bulk.py | 2 ++ src/calibre/gui2/dialogs/metadata_bulk.ui | 23 +++++++++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 533a344de5..9239a0e136 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -764,6 +764,7 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): def initialize_series(self): all_series = self.db.all_series() all_series.sort(key=lambda x : sort_key(x[1])) + self.series.update_items_cache([x[1] for x in all_series]) for i in all_series: id, name = i @@ -773,6 +774,7 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): def initialize_publisher(self): all_publishers = self.db.all_publishers() all_publishers.sort(key=lambda x : sort_key(x[1])) + self.publisher.update_items_cache([x[1] for x in all_publishers]) for i in all_publishers: id, name = i diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index b0f2c144fc..ecdb396662 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -76,7 +76,7 @@
- + true @@ -175,7 +175,7 @@ - + true @@ -195,7 +195,7 @@ - + Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas. @@ -229,7 +229,7 @@ - + Comma separated list of tags to remove from the books. @@ -262,7 +262,7 @@ - + 0 @@ -1072,19 +1072,14 @@ not multiple and the destination field is multiple
widgets.h
- EnComboBox + MultiCompleteComboBox QComboBox -
widgets.h
+
calibre/gui2/complete.h
- CompleteComboBox - QComboBox -
widgets.h
-
- - CompleteLineEdit + MultiCompleteLineEdit QLineEdit -
widgets.h
+
calibre/gui2/complete.h
HistoryLineEdit From b02186802f8320c1bcb4f1bf11c09624c8bec29d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 12:43:19 -0700 Subject: [PATCH 04/10] ... --- src/calibre/gui2/convert/metadata.py | 10 +++++++--- src/calibre/gui2/convert/metadata.ui | 9 ++------- src/calibre/gui2/custom_column_widgets.py | 3 +++ src/calibre/gui2/dialogs/metadata_bulk.py | 2 ++ src/calibre/gui2/dialogs/search.py | 1 + 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/calibre/gui2/convert/metadata.py b/src/calibre/gui2/convert/metadata.py index 23cac74cf8..81274f25a8 100644 --- a/src/calibre/gui2/convert/metadata.py +++ b/src/calibre/gui2/convert/metadata.py @@ -70,9 +70,6 @@ class MetadataWidget(Widget, Ui_Form): def initialize_metadata_options(self): self.initialize_combos() self.author.editTextChanged.connect(self.deduce_author_sort) - self.author.set_separator('&') - self.author.set_space_before_sep(True) - self.author.update_items_cache(self.db.all_author_names()) mi = self.db.get_metadata(self.book_id, index_is_id=True) self.title.setText(mi.title) @@ -109,6 +106,9 @@ class MetadataWidget(Widget, Ui_Form): def initalize_authors(self): all_authors = self.db.all_authors() all_authors.sort(key=lambda x : sort_key(x[1])) + self.author.set_separator('&') + self.author.set_space_before_sep(True) + self.author.update_items_cache(self.db.all_author_names()) for i in all_authors: id, name = i @@ -124,6 +124,8 @@ class MetadataWidget(Widget, Ui_Form): def initialize_series(self): all_series = self.db.all_series() all_series.sort(key=lambda x : sort_key(x[1])) + self.series.set_separator(None) + self.series.update_items_cache([x[1] for x in all_series]) for i in all_series: id, name = i @@ -133,6 +135,8 @@ class MetadataWidget(Widget, Ui_Form): def initialize_publisher(self): all_publishers = self.db.all_publishers() all_publishers.sort(key=lambda x : sort_key(x[1])) + self.publisher.set_separator(None) + self.publisher.update_items_cache([x[1] for x in all_publishers]) for i in all_publishers: id, name = i diff --git a/src/calibre/gui2/convert/metadata.ui b/src/calibre/gui2/convert/metadata.ui index 47d983d870..95ccac6890 100644 --- a/src/calibre/gui2/convert/metadata.ui +++ b/src/calibre/gui2/convert/metadata.ui @@ -213,7 +213,7 @@
- + 10 @@ -248,7 +248,7 @@ - + true @@ -276,11 +276,6 @@ QLineEdit
widgets.h
- - EnComboBox - QComboBox -
widgets.h
-
MultiCompleteComboBox QComboBox diff --git a/src/calibre/gui2/custom_column_widgets.py b/src/calibre/gui2/custom_column_widgets.py index 0555d42b4f..5180999379 100644 --- a/src/calibre/gui2/custom_column_widgets.py +++ b/src/calibre/gui2/custom_column_widgets.py @@ -233,6 +233,7 @@ class Text(Base): w.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) else: w = MultiCompleteComboBox(parent) + w.set_separator(None) w.setSizeAdjustPolicy(w.AdjustToMinimumContentsLengthWithIcon) w.setMinimumContentsLength(25) self.widgets = [QLabel('&'+self.col_metadata['name']+':', parent), w] @@ -708,6 +709,7 @@ class BulkSeries(BulkBase): def initialize(self, book_id): self.idx_widget.setChecked(False) + self.main_widget.set_separator(None) self.main_widget.update_items_cache(self.all_values) for c in self.all_values: self.main_widget.addItem(c) @@ -835,6 +837,7 @@ class BulkText(BulkBase): w.checkbox.stateChanged.connect(self.a_c_checkbox_changed) else: self.make_widgets(parent, MultiCompleteComboBox) + self.main_widget.set_separator(None) self.main_widget.setSizeAdjustPolicy( self.main_widget.AdjustToMinimumContentsLengthWithIcon) self.main_widget.setMinimumContentsLength(25) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 9239a0e136..12f49baaca 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -764,6 +764,7 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): def initialize_series(self): all_series = self.db.all_series() all_series.sort(key=lambda x : sort_key(x[1])) + self.series.set_separator(None) self.series.update_items_cache([x[1] for x in all_series]) for i in all_series: @@ -774,6 +775,7 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): def initialize_publisher(self): all_publishers = self.db.all_publishers() all_publishers.sort(key=lambda x : sort_key(x[1])) + self.publisher.set_separator(None) self.publisher.update_items_cache([x[1] for x in all_publishers]) for i in all_publishers: diff --git a/src/calibre/gui2/dialogs/search.py b/src/calibre/gui2/dialogs/search.py index 0fbe188aa5..9c91446f3c 100644 --- a/src/calibre/gui2/dialogs/search.py +++ b/src/calibre/gui2/dialogs/search.py @@ -35,6 +35,7 @@ class SearchDialog(QDialog, Ui_Dialog): all_series = db.all_series() all_series.sort(key=lambda x : sort_key(x[1])) + self.series_box.set_separator(None) self.series_box.update_items_cache([x[1] for x in all_series]) for i in all_series: id, name = i From f76a8e5f4f493eaaf2329db418cb9d84d7c17fdc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 12:50:31 -0700 Subject: [PATCH 05/10] Refactor old edit metadata dialog to use new completer --- src/calibre/gui2/dialogs/metadata_single.py | 4 ++++ src/calibre/gui2/dialogs/metadata_single.ui | 21 ++++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index fa20658c12..f36fd3019d 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -739,6 +739,8 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): self.series.setSizeAdjustPolicy(self.series.AdjustToContentsOnFirstShow) all_series = self.db.all_series() all_series.sort(key=lambda x : sort_key(x[1])) + self.series.set_separator(None) + self.series.update_items_cache([x[1] for x in all_series]) series_id = self.db.series_id(self.row) idx, c = None, 0 for i in all_series: @@ -756,6 +758,8 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): def initialize_publisher(self): all_publishers = self.db.all_publishers() all_publishers.sort(key=lambda x : sort_key(x[1])) + self.publisher.set_separator(None) + self.publisher.update_items_cache([x[1] for x in all_publishers]) publisher_id = self.db.publisher_id(self.row) idx, c = None, 0 for i in all_publishers: diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui index 23efc45399..5bcf268aaa 100644 --- a/src/calibre/gui2/dialogs/metadata_single.ui +++ b/src/calibre/gui2/dialogs/metadata_single.ui @@ -240,7 +240,7 @@ Using this button to create author sort will change author sort from red to gree
- + true @@ -313,7 +313,7 @@ If the box is colored green, then text matches the individual author's sort stri - + true @@ -335,7 +335,7 @@ If the box is colored green, then text matches the individual author's sort stri - + Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas. @@ -379,7 +379,7 @@ If the box is colored green, then text matches the individual author's sort stri 5 - + List of known series. You can add new series. @@ -837,19 +837,14 @@ If the box is colored green, then text matches the individual author's sort stri
widgets.h
- EnComboBox - QComboBox -
widgets.h
-
- - CompleteLineEdit + MultiCompleteLineEdit QLineEdit -
widgets.h
+
calibre/gui2/complete.h
- CompleteComboBox + MultiCompleteComboBox QComboBox -
widgets.h
+
calibre/gui2/complete.h
FormatList From ef88d0b5ccc5f30cde2df90fc364d509c397576b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 12:54:10 -0700 Subject: [PATCH 06/10] ... --- src/calibre/gui2/dialogs/add_empty_book.py | 4 ++-- src/calibre/gui2/dialogs/search.ui | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/dialogs/add_empty_book.py b/src/calibre/gui2/dialogs/add_empty_book.py index b8339f95f5..9e5fb07308 100644 --- a/src/calibre/gui2/dialogs/add_empty_book.py +++ b/src/calibre/gui2/dialogs/add_empty_book.py @@ -7,8 +7,8 @@ __license__ = 'GPL v3' from PyQt4.Qt import QDialog, QGridLayout, QLabel, QDialogButtonBox, \ QApplication, QSpinBox, QToolButton, QIcon from calibre.ebooks.metadata import authors_to_string, string_to_authors -from calibre.gui2.widgets import CompleteComboBox from calibre.utils.icu import sort_key +from calibre.gui2.complete import MultiCompleteComboBox class AddEmptyBookDialog(QDialog): @@ -32,7 +32,7 @@ class AddEmptyBookDialog(QDialog): self.author_label = QLabel(_('Set the author of the new books to:')) self._layout.addWidget(self.author_label, 2, 0, 1, 2) - self.authors_combo = CompleteComboBox(self) + self.authors_combo = MultiCompleteComboBox(self) self.authors_combo.setSizeAdjustPolicy( self.authors_combo.AdjustToMinimumContentsLengthWithIcon) self.authors_combo.setEditable(True) diff --git a/src/calibre/gui2/dialogs/search.ui b/src/calibre/gui2/dialogs/search.ui index 842787a2da..eb6fffdb60 100644 --- a/src/calibre/gui2/dialogs/search.ui +++ b/src/calibre/gui2/dialogs/search.ui @@ -354,11 +354,6 @@ QLineEdit
widgets.h
- - EnComboBox - QComboBox -
widgets.h
-
MultiCompleteLineEdit QLineEdit From f52ba0aae37d0534503619bd730ac5ffaa89636c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 14:13:24 -0700 Subject: [PATCH 07/10] ... --- src/calibre/gui2/complete.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/complete.py b/src/calibre/gui2/complete.py index 0ad8fb13d4..bdfbaaf0da 100644 --- a/src/calibre/gui2/complete.py +++ b/src/calibre/gui2/complete.py @@ -64,8 +64,6 @@ class CompleteWindow(QListView): # {{{ def do_selected(self, idx=None): idx = self.currentIndex() if idx is None else idx - #if not idx.isValid() and self.model().rowCount() > 0: - # idx = self.model().index(0) if idx.isValid(): data = unicode(self.model().data(idx, Qt.DisplayRole)) self.completion_selected.emit(data) @@ -81,6 +79,9 @@ class CompleteWindow(QListView): # {{{ self.hide() return True elif key in (Qt.Key_Enter, Qt.Key_Return, Qt.Key_Tab): + if key == Qt.Key_Tab and not self.currentIndex().isValid(): + if self.model().rowCount() > 0: + self.setCurrentIndex(self.model().index(0)) self.do_selected() return True elif key in (Qt.Key_Up, Qt.Key_Down, Qt.Key_PageUp, From 23ffe549a0f3dcb5cfaded30947603d383678025 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 16:10:15 -0700 Subject: [PATCH 08/10] Improve La Tribua de --- resources/recipes/la_tribuna.recipe | 43 ++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/resources/recipes/la_tribuna.recipe b/resources/recipes/la_tribuna.recipe index 739d11cc8d..c6d3f5cb28 100644 --- a/resources/recipes/la_tribuna.recipe +++ b/resources/recipes/la_tribuna.recipe @@ -2,24 +2,23 @@ __license__ = 'GPL v3' __author__ = 'Luis Hernandez' __copyright__ = 'Luis Hernandez' -description = 'Diario local de Talavera de la Reina - v1.2 - 27 Jan 2011' +__version__ = 'v1.0' +__date__ = '01 Feb 2011' ''' -http://www.latribunadetalavera.es/ +http://www.promecal.es/ ''' - from calibre.web.feeds.news import BasicNewsRecipe class AdvancedUserRecipe1294946868(BasicNewsRecipe): - title = u'La Tribuna de Talavera' + title = u'La Tribuna de' publisher = u'Grupo PROMECAL' __author__ = 'Luis Hernández' - description = 'Diario local de Talavera de la Reina' - cover_url = 'http://www.latribunadetalavera.es/entorno/mancheta.gif' + description = 'Varios diarios locales del grupo PROMECAL' - oldest_article = 5 + oldest_article = 3 max_articles_per_feed = 50 remove_javascript = True @@ -27,7 +26,7 @@ class AdvancedUserRecipe1294946868(BasicNewsRecipe): use_embedded_content = False encoding = 'utf-8' - language = 'es' + language = 'es_ES' timefmt = '[%a, %d %b, %Y]' keep_only_tags = [ @@ -39,7 +38,20 @@ class AdvancedUserRecipe1294946868(BasicNewsRecipe): remove_tags_before = dict(name='div' , attrs={'class':['comparte']}) remove_tags_after = dict(name='div' , attrs={'id':['relacionadas']}) - extra_css = ' p{text-align: justify; font-size: 100%} body{ text-align: left; font-family: serif; font-size: 100% } h1{ font-family: sans-serif; font-size:150%; font-weight: 700; text-align: justify; } h2{ font-family: sans-serif; font-size:120%; font-weight: 600; text-align: justify } h3{ font-family: sans-serif; font-size:60%; font-weight: 600; text-align: left } h4{ font-family: sans-serif; font-size:80%; font-weight: 600; text-align: left } h5{ font-family: sans-serif; font-size:70%; font-weight: 600; text-align: left }img{margin-bottom: 0.4em} ' + remove_tags = [ + dict(name='div', attrs={'id':['relacionadas']}) + ,dict(name='h3') + ,dict(name='h5') + ] + + extra_css = """ + p{text-align: justify; font-size: 100%} + body{text-align: left; font-family: serif; font-size: 100%} + h1{font-family: sans; font-size:150%; font-weight: bold; text-align: justify;} + h2{font-family: sans-serif; font-size:85%; font-style: italic; text-align: justify;} + h4{font-family: sans; font-size:75%; font-weight: bold; text-align: center;} + img{margin-bottom: 0.4em} + """ def preprocess_html(self, soup): for alink in soup.findAll('a'): @@ -48,4 +60,15 @@ class AdvancedUserRecipe1294946868(BasicNewsRecipe): alink.replaceWith(tstr) return soup - feeds = [(u'Portada', u'http://www.latribunadetalavera.es/rss.html')] + + feeds = [ + (u'Albacete', u'http://www.latribunadealbacete.es/rss.html') + ,(u'Avila', u'http://www.diariodeavila.es/rss.html') + ,(u'Burgos', u'http://www.diariodeburgos.es/rss.html') + ,(u'Ciudad Real', u'http://www.latribunadeciudadreal.es/rss.html') + ,(u'Palencia', u'http://www.diariopalentino.es/rss.html') + ,(u'Puertollano', u'http://www.latribunadepuertollano.es/rss.html') + ,(u'Talavera de la Reina', u'http://www.latribunadetalavera.es/rss.html') + ,(u'Toledo', u'http://www.latribunadetoledo.es/rss.html') + ,(u'Valladolid', u'http://www.eldiadevalladolid.com/rss.html') + ] From 399ce2c888defba16eedc88164293f4853bd2493 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 16:40:50 -0700 Subject: [PATCH 09/10] ... --- src/calibre/gui2/complete.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/calibre/gui2/complete.py b/src/calibre/gui2/complete.py index bdfbaaf0da..f589b30679 100644 --- a/src/calibre/gui2/complete.py +++ b/src/calibre/gui2/complete.py @@ -198,6 +198,9 @@ class MultiCompleteLineEdit(QLineEdit): return True # Filter this event since the cw is visible return QLineEdit.eventFilter(self, o, e) + def hide_completion_window(self): + self.complete_window.hide() + def text_edited(self, *args): self.update_completions() From ac40d2e66d79b259e19c5d1ae471146522177f41 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Feb 2011 18:12:38 -0700 Subject: [PATCH 10/10] Fix Next and Previous buttons in new metadata dialog --- src/calibre/gui2/metadata/single.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/metadata/single.py b/src/calibre/gui2/metadata/single.py index e9d34bd47b..e5de2e3d97 100644 --- a/src/calibre/gui2/metadata/single.py +++ b/src/calibre/gui2/metadata/single.py @@ -314,6 +314,10 @@ class MetadataSingleDialogBase(ResizableDialog): widget.commit(self.book_id) self.db.commit() + rows = self.db.refresh_ids(list(self.books_to_refresh)) + if rows: + self.rows_to_refresh |= set(rows) + return True def accept(self): @@ -335,12 +339,14 @@ class MetadataSingleDialogBase(ResizableDialog): self.current_row = current_row if view_slot is not None: self.view_format.connect(view_slot) - self.do_one() + self.do_one(apply_changes=False) ret = self.exec_() self.break_cycles() return ret - def do_one(self, delta=0): + def do_one(self, delta=0, apply_changes=True): + if apply_changes: + self.apply_changes() self.current_row += delta prev = next_ = None if self.current_row > 0: @@ -357,9 +363,7 @@ class MetadataSingleDialogBase(ResizableDialog): self.prev_button.setToolTip(tip) self.prev_button.setVisible(prev is not None) self(self.db.id(self.row_list[self.current_row])) - rows = self.db.refresh_ids(list(self.books_to_refresh)) - if rows: - self.rows_to_refresh |= set(rows) + def break_cycles(self): # Break any reference cycles that could prevent python