From 49836236914d32495b318057d94a45655a282425 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 26 Feb 2018 09:00:56 +0530 Subject: [PATCH] Allow adding the Virtual library button to any toolbar/menu via Preferences->Toolbars & menus --- imgsrc/vl.svg | 746 +++++++++++++++++++ resources/images/vl.png | Bin 0 -> 3173 bytes src/calibre/customize/builtins.py | 9 +- src/calibre/gui2/actions/virtual_library.py | 29 + src/calibre/gui2/layout.py | 2 +- src/calibre/gui2/search_restriction_mixin.py | 15 +- 6 files changed, 793 insertions(+), 8 deletions(-) create mode 100644 imgsrc/vl.svg create mode 100644 resources/images/vl.png create mode 100644 src/calibre/gui2/actions/virtual_library.py diff --git a/imgsrc/vl.svg b/imgsrc/vl.svg new file mode 100644 index 0000000000..2ece55e698 --- /dev/null +++ b/imgsrc/vl.svg @@ -0,0 +1,746 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Kovid Goyal + + + + + CC BY-SA + + + + + Kovid Goyal + + + + + + + + + + +   + + + + + + + + + + + + + diff --git a/resources/images/vl.png b/resources/images/vl.png new file mode 100644 index 0000000000000000000000000000000000000000..14e3735f06b35dc13cc871ae152f90f93e1c50b2 GIT binary patch literal 3173 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 + +from __future__ import absolute_import, division, print_function, unicode_literals + +from PyQt5.Qt import QToolButton + +from calibre.gui2.actions import InterfaceAction + + +class VirtualLibraryAction(InterfaceAction): + + name = 'Virtual library' + action_spec = ( + _('Virtual library'), 'vl.png', _('Change the current Virtual library'), + None + ) + action_type = 'current' + action_add_menu = True + popup_type = QToolButton.InstantPopup + dont_add_to = frozenset(['context-menu-device', 'menubar-device']) + + def genesis(self): + self.menu = m = self.qaction.menu() + m.aboutToShow.connect(self.about_to_show_menu) + + def about_to_show_menu(self): + self.gui.build_virtual_library_menu(self.menu, add_tabs_action=False) diff --git a/src/calibre/gui2/layout.py b/src/calibre/gui2/layout.py index 54afd6ca60..095118904a 100644 --- a/src/calibre/gui2/layout.py +++ b/src/calibre/gui2/layout.py @@ -184,7 +184,7 @@ class SearchBar(QFrame): # {{{ x.setPopupMode(x.InstantPopup) x.setText(_('Virtual library')) x.setAutoRaise(True) - x.setIcon(QIcon(I('lt.png'))) + x.setIcon(QIcon(I('vl.png'))) x.setObjectName("virtual_library") x.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) l.addWidget(x) diff --git a/src/calibre/gui2/search_restriction_mixin.py b/src/calibre/gui2/search_restriction_mixin.py index 8566194500..3385409cc8 100644 --- a/src/calibre/gui2/search_restriction_mixin.py +++ b/src/calibre/gui2/search_restriction_mixin.py @@ -366,8 +366,7 @@ class SearchRestrictionMixin(object): self.apply_virtual_library(cd.library_name) self.rebuild_vl_tabs() - def virtual_library_menu_about_to_show(self): - m = self.virtual_library_menu + def build_virtual_library_menu(self, m, add_tabs_action=True): m.clear() a = m.addAction(_('Create Virtual library')) @@ -381,10 +380,11 @@ class SearchRestrictionMixin(object): self.build_virtual_library_list(a, self.remove_vl_triggered) m.addMenu(a) - if gprefs['show_vl_tabs']: - m.addAction(_('Hide virtual library tabs'), self.vl_tabs.disable_bar) - else: - m.addAction(_('Show virtual libraries as tabs'), self.vl_tabs.enable_bar) + if add_tabs_action: + if gprefs['show_vl_tabs']: + m.addAction(_('Hide virtual library tabs'), self.vl_tabs.disable_bar) + else: + m.addAction(_('Show virtual libraries as tabs'), self.vl_tabs.enable_bar) m.addSeparator() @@ -422,6 +422,9 @@ class SearchRestrictionMixin(object): a = m.addAction(self.checked if vl == current_lib else self.empty, vl.replace('&', '&&')) a.triggered.connect(partial(self.apply_virtual_library, library=vl)) + def virtual_library_menu_about_to_show(self): + self.build_virtual_library_menu(self.virtual_library_menu) + def rebuild_vl_tabs(self): self.vl_tabs.rebuild()