From 83fc6c54f68ad2b8dfd0e4cd4521f25058672ffb Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 17 Aug 2010 10:30:32 +0100 Subject: [PATCH] Fix problems with restrictions when changing libraries: - restrictions box is not reloaded - counts are not correct Add tweak to set restriction at calibre startup --- resources/default_tweaks.py | 5 +++++ src/calibre/gui2/search_box.py | 16 +++------------- src/calibre/gui2/search_restriction_mixin.py | 10 ++++++++++ src/calibre/gui2/ui.py | 10 ++++++++-- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index 80456234b9..fb7b6cb0de 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -80,3 +80,8 @@ title_series_sorting = 'library_order' # strictly_alphabetic, it would remain "The Client". save_template_title_series_sorting = 'library_order' +# Specify a restriction to apply when calibre starts or when change library is +# used. Provide the name of a saved search. It is ignored if the saved search +# does not exist in the library being opened. The value '' means no restriction. +restrict_at_startup = '' + diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index 562292c2f6..95667379a1 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -382,8 +382,7 @@ class SearchBoxMixin(object): class SavedSearchBoxMixin(object): - def __init__(self, db): - self.db = db + def __init__(self): self.connect(self.saved_search, SIGNAL('changed()'), self.saved_searches_changed) self.saved_searches_changed() self.connect(self.clear_button, SIGNAL('clicked()'), self.saved_search.clear_to_help) @@ -402,10 +401,6 @@ class SavedSearchBoxMixin(object): b = getattr(self, x+'_search_button') b.setStatusTip(b.toolTip()) - def set_database(self, db): - self.db = db - self.saved_searches_changed() - def saved_searches_changed(self): p = saved_searches().names() p.sort() @@ -415,13 +410,8 @@ class SavedSearchBoxMixin(object): self.tags_view.recount() for s in p: self.search_restriction.addItem(s) - if t: - if t in p: # redo the current restriction, if there was one - self.search_restriction.setCurrentIndex(self.search_restriction.findText(t)) - # self.tags_view.set_search_restriction(t) - else: - self.search_restriction.setCurrentIndex(0) - self.apply_search_restriction('') + if t: # redo the search restriction if there was one + self.apply_named_search_restriction(t) def do_saved_search_edit(self, search): d = SavedSearchEditor(self, search) diff --git a/src/calibre/gui2/search_restriction_mixin.py b/src/calibre/gui2/search_restriction_mixin.py index a4186ad8d1..139d7c551d 100644 --- a/src/calibre/gui2/search_restriction_mixin.py +++ b/src/calibre/gui2/search_restriction_mixin.py @@ -29,6 +29,16 @@ class SearchRestrictionMixin(object): if self.restriction_in_effect: self.set_number_of_books_shown() + def apply_named_search_restriction(self, name): + if not name: + r = 0 + else: + r = self.search_restriction.findText(name) + if r < 0: + r = 0 + self.search_restriction.setCurrentIndex(r) + self.apply_search_restriction(r) + def apply_search_restriction(self, i): r = unicode(self.search_restriction.currentText()) if r is not None and r != '': diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 95cccb72a5..e87d39ba55 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -21,7 +21,7 @@ from PyQt4.Qt import Qt, SIGNAL, QTimer, \ from calibre import prints from calibre.constants import __appname__, isosx from calibre.ptempfile import PersistentTemporaryFile -from calibre.utils.config import prefs, dynamic +from calibre.utils.config import prefs, dynamic, tweaks from calibre.utils.ipc.server import Server from calibre.library.database2 import LibraryDatabase2 from calibre.customize.ui import interface_actions @@ -195,7 +195,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ UpdateMixin.__init__(self, opts) ####################### Search boxes ######################## - SavedSearchBoxMixin.__init__(self, db) + SavedSearchBoxMixin.__init__(self) SearchBoxMixin.__init__(self) ####################### Library view ######################## @@ -230,6 +230,8 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ ######################### Search Restriction ########################## SearchRestrictionMixin.__init__(self) + if tweaks['restrict_at_startup']: + self.apply_named_search_restriction(tweaks['restrict_at_startup']) ########################### Cover Flow ################################ @@ -371,6 +373,10 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ for action in self.iactions.values(): action.library_changed(db) self.set_window_title() + self.apply_named_search_restriction('') # reset restriction to null + self.saved_searches_changed() # reload the search restrictions combo box + if tweaks['restrict_at_startup']: + self.apply_named_search_restriction(tweaks['restrict_at_startup']) def set_window_title(self): self.setWindowTitle(__appname__ + u' - ||%s||'%self.iactions['Choose Library'].library_name())