diff --git a/src/calibre/gui2/viewer/toolbars.py b/src/calibre/gui2/viewer/toolbars.py index c63793e1bd..58e711d7ec 100644 --- a/src/calibre/gui2/viewer/toolbars.py +++ b/src/calibre/gui2/viewer/toolbars.py @@ -5,7 +5,6 @@ from __future__ import absolute_import, division, print_function, unicode_literals import os -from collections import defaultdict from functools import partial from PyQt5.Qt import QAction, QIcon, QKeySequence, QMenu, Qt, QToolBar, pyqtSignal @@ -17,24 +16,36 @@ from calibre.gui2.viewer.web_view import get_session_pref, set_book_path from polyglot.builtins import iteritems -class VerticalToolBar(QToolBar): +class ToolBar(QToolBar): + + def __init__(self, parent=None): + QToolBar.__init__(self, parent) + self.shortcut_actions = {} + self.setToolButtonStyle(Qt.ToolButtonIconOnly) + + def create_shortcut_action(self, icon, text, sc): + a = QAction(QIcon(I(icon)), text, self) + self.addAction(a) + connect_lambda(a.triggered, self, lambda self: self.action_triggered.emit(sc)) + self.shortcut_actions[sc] = a + return a + + +class ActionsToolBar(ToolBar): action_triggered = pyqtSignal(object) open_book_at_path = pyqtSignal(object) def __init__(self, parent=None): - QToolBar.__init__(self, parent) - self.setObjectName('vertical_toolbar') - self.setAllowedAreas(Qt.LeftToolBarArea | Qt.RightToolBarArea) - self.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.setOrientation(Qt.Vertical) + ToolBar.__init__(self, parent) + self.setObjectName('actions_toolbar') + self.setAllowedAreas(Qt.AllToolBarAreas) def initialize(self, web_view): + shortcut_action = self.create_shortcut_action self.action_triggered.connect(web_view.trigger_shortcut) page = web_view.page() - web_view.shortcuts_changed.connect(self.set_tooltips) web_view.paged_mode_changed.connect(self.update_mode_action) - self.shortcut_actions = {} self.back_action = page.action(QWebEnginePage.Back) self.back_action.setIcon(QIcon(I('back.png'))) @@ -46,13 +57,6 @@ class VerticalToolBar(QToolBar): self.addAction(self.forward_action) self.addSeparator() - def shortcut_action(icon, text, sc): - a = QAction(QIcon(I(icon)), text, self) - self.addAction(a) - connect_lambda(a.triggered, self, lambda self: self.action_triggered.emit(sc)) - self.shortcut_actions[sc] = a - return a - self.open_action = a = QAction(QIcon(I('document_open.png')), _('Open e-book'), self) self.open_menu = m = QMenu(self) a.setMenu(m) @@ -95,10 +99,7 @@ class VerticalToolBar(QToolBar): a.setChecked(True) a.setToolTip(_('Switch to paged mode -- where the text is broken into pages')) - def set_tooltips(self, smap): - rmap = defaultdict(list) - for k, v in iteritems(smap): - rmap[v].append(k) + def set_tooltips(self, rmap): for sc, a in iteritems(self.shortcut_actions): if a.isCheckable(): continue diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index f8c17bde89..92dd813106 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -32,7 +32,7 @@ from calibre.gui2.viewer.convert_book import prepare_book, update_book from calibre.gui2.viewer.lookup import Lookup from calibre.gui2.viewer.overlay import LoadingOverlay from calibre.gui2.viewer.toc import TOC, TOCSearch, TOCView -from calibre.gui2.viewer.toolbars import VerticalToolBar +from calibre.gui2.viewer.toolbars import ActionsToolBar from calibre.gui2.viewer.web_view import ( WebView, get_path_for_name, get_session_pref, set_book_path, viewer_config_dir, vprefs @@ -42,7 +42,7 @@ from calibre.utils.img import image_from_path from calibre.utils.ipc.simple_worker import WorkerError from calibre.utils.monotonic import monotonic from calibre.utils.serialize import json_loads -from polyglot.builtins import as_bytes, itervalues +from polyglot.builtins import as_bytes, iteritems, itervalues annotations_dir = os.path.join(viewer_config_dir, 'annots') @@ -99,10 +99,10 @@ class EbookViewer(MainWindow): self.setWindowTitle(self.base_window_title) self.in_full_screen_mode = None self.image_popup = ImagePopup(self) - self.vertical_toolbar = vt = VerticalToolBar(self) - vt.open_book_at_path.connect(self.ask_for_open) - self.addToolBar(Qt.LeftToolBarArea, vt) - # vt.setVisible(False) + self.actions_toolbar = at = ActionsToolBar(self) + at.open_book_at_path.connect(self.ask_for_open) + self.addToolBar(Qt.LeftToolBarArea, at) + at.setVisible(False) try: os.makedirs(annotations_dir) except EnvironmentError: @@ -161,13 +161,20 @@ class EbookViewer(MainWindow): self.web_view.show_loading_message.connect(self.show_loading_message) self.web_view.show_error.connect(self.show_error) self.web_view.print_book.connect(self.print_book, type=Qt.QueuedConnection) - self.vertical_toolbar.initialize(self.web_view) + self.web_view.shortcuts_changed.connect(self.shortcuts_changed) + self.actions_toolbar.initialize(self.web_view) self.setCentralWidget(self.web_view) self.loading_overlay = LoadingOverlay(self) self.restore_state() if continue_reading: self.continue_reading() + def shortcuts_changed(self, smap): + rmap = defaultdict(list) + for k, v in iteritems(smap): + rmap[v].append(k) + self.actions_toolbar.set_tooltips(rmap) + def toggle_inspector(self): visible = self.inspector_dock.toggleViewAction().isChecked() self.inspector_dock.setVisible(not visible)