From 363101190133199122414fc2064468c8aee34a97 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 16 Apr 2013 10:38:31 +0200 Subject: [PATCH] 1) Disable edit and remove VL menus when no VLs exist 2) Fix problem with random "color problem" messages when using a null icon --- resources/images/empty.png | Bin 0 -> 1164 bytes src/calibre/gui2/search_restriction_mixin.py | 55 ++++++++++--------- 2 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 resources/images/empty.png diff --git a/resources/images/empty.png b/resources/images/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f05d30921c094cd3fe03faf641aa7058877b22 GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD~={ftew|C&cytC>RZa5gY>h^*j<8 z7#JB!g8YIRMsPTQyv{ZKiw&@N;4JWnEM{QfI|9OtQ?>b|fr4tDE{-7;x85FPWCZe> i6#lQz^Kbw$k->X5hXw{lxz^>vAW=_OKbLh*2~7Yf{2Dv} literal 0 HcmV?d00001 diff --git a/src/calibre/gui2/search_restriction_mixin.py b/src/calibre/gui2/search_restriction_mixin.py index 4cdb1574d4..0137cd1027 100644 --- a/src/calibre/gui2/search_restriction_mixin.py +++ b/src/calibre/gui2/search_restriction_mixin.py @@ -299,7 +299,7 @@ class SearchRestrictionMixin(object): def __init__(self): self.checked = QIcon(I('ok.png')) - self.empty = QIcon() + self.empty = QIcon(I('empty.png')) self.search_based_vl_name = None self.search_based_vl = None @@ -315,21 +315,24 @@ class SearchRestrictionMixin(object): self.search_restriction.setVisible(False) self.search_count.setText(_("(all books)")) self.ar_menu = QMenu(_('Additional restriction')) + self.edit_menu = QMenu(_('Edit Virtual Library')) + self.rm_menu = QMenu(_('Remove Virtual Library')) + def add_virtual_library(self, db, name, search): virt_libs = db.prefs.get('virtual_libraries', {}) virt_libs[name] = search db.prefs.set('virtual_libraries', virt_libs) - def do_create_edit(self, editing=None): + def do_create_edit(self, name=None): db = self.library_view.model().db virt_libs = db.prefs.get('virtual_libraries', {}) - cd = CreateVirtualLibrary(self, virt_libs.keys(), editing=editing) + cd = CreateVirtualLibrary(self, virt_libs.keys(), editing=name) if cd.exec_() == cd.Accepted: - if editing: - self._remove_vl(editing, reapply=False) + if name: + self._remove_vl(name, reapply=False) self.add_virtual_library(db, cd.library_name, cd.library_search) - if not editing or editing == db.data.get_base_restriction_name(): + if not name or name == db.data.get_base_restriction_name(): self.apply_virtual_library(cd.library_name) def virtual_library_clicked(self): @@ -337,16 +340,14 @@ class SearchRestrictionMixin(object): m.clear() a = m.addAction(_('Create Virtual Library')) - a.triggered.connect(partial(self.do_create_edit, editing=None)) + a.triggered.connect(partial(self.do_create_edit, name=None)) - self.edit_menu = a = QMenu() - a.setTitle(_('Edit Virtual Library')) - a.aboutToShow.connect(partial(self.build_virtual_library_list, remove=False)) + a = self.edit_menu + self.build_virtual_library_list(a, self.do_create_edit) m.addMenu(a) - self.rm_menu = a = QMenu() - a.setTitle(_('Remove Virtual Library')) - a.aboutToShow.connect(partial(self.build_virtual_library_list, remove=True)) + a = self.rm_menu + self.build_virtual_library_list(a, self.remove_vl_triggered) m.addMenu(a) m.addSeparator() @@ -356,7 +357,7 @@ class SearchRestrictionMixin(object): a = self.ar_menu a.clear() a.setIcon(self.checked if db.data.get_search_restriction_name() else self.empty) - a.aboutToShow.connect(self.build_search_restriction_list) + self.build_search_restriction_list() m.addMenu(a) m.addSeparator() @@ -426,24 +427,24 @@ class SearchRestrictionMixin(object): self._apply_search_restriction(db.data.get_search_restriction(), db.data.get_search_restriction_name()) - def build_virtual_library_list(self, remove=False): + def build_virtual_library_list(self, menu, handler): db = self.library_view.model().db virt_libs = db.prefs.get('virtual_libraries', {}) - if remove: - m = self.rm_menu - else: - m = self.edit_menu - m.clear() + menu.clear() + menu.setIcon(self.empty) def add_action(name, search): - a = m.addAction(name) - if remove: - a.triggered.connect(partial(self.remove_vl_triggered, name=name)) - else: - a.triggered.connect(partial(self.do_create_edit, editing=name)) + a = menu.addAction(name) + a.triggered.connect(partial(handler, name=name)) + a.setIcon(self.empty) - for n in sorted(virt_libs.keys(), key=sort_key): - add_action(n, virt_libs[n]) + libs = sorted(virt_libs.keys(), key=sort_key) + if libs: + menu.setEnabled(True) + for n in libs: + add_action(n, virt_libs[n]) + else: + menu.setEnabled(False) def remove_vl_triggered(self, name=None): if not question_dialog(self, _('Are you sure?'),