diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 25836561a9..e80e859bff 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -22,6 +22,7 @@ from calibre.gui2.main_window import MainWindow from calibre.gui2.viewer.annotations import ( merge_annotations, parse_annotations, save_annots_to_epub, serialize_annotations ) +from calibre.gui2.viewer.bookmarks import BookmarkManager from calibre.gui2.viewer.convert_book import prepare_book, update_book from calibre.gui2.viewer.toc import TOC, TOCSearch, TOCView from calibre.gui2.viewer.web_view import WebView, set_book_path, vprefs @@ -70,11 +71,16 @@ class EbookViewer(MainWindow): w.l.addWidget(self.toc), w.l.addWidget(self.toc_search), w.l.setContentsMargins(0, 0, 0, 0) self.toc_dock.setWidget(w) + self.bookmarks_dock = create_dock(_('Bookmarks'), 'bookmarks-dock', Qt.RightDockWidgetArea) + self.bookmarks_widget = w = BookmarkManager(self) + self.bookmarks_dock.setWidget(w) + self.inspector_dock = create_dock(_('Inspector'), 'inspector', Qt.RightDockWidgetArea) self.web_view = WebView(self) self.web_view.cfi_changed.connect(self.cfi_changed) self.web_view.reload_book.connect(self.reload_book) self.web_view.toggle_toc.connect(self.toggle_toc) + self.web_view.toggle_bookmarks.connect(self.toggle_bookmarks) self.web_view.update_current_toc_nodes.connect(self.toc.update_current_toc_nodes) self.web_view.toggle_full_screen.connect(self.toggle_full_screen) self.setCentralWidget(self.web_view) @@ -118,13 +124,19 @@ class EbookViewer(MainWindow): self.set_full_screen(not self.isFullScreen()) # }}} - # ToC {{{ + # ToC/Bookmarks {{{ def toggle_toc(self): if self.toc_dock.isVisible(): self.toc_dock.setVisible(False) else: self.toc_dock.setVisible(True) + def toggle_bookmarks(self): + if self.bookmarks_dock.isVisible(): + self.bookmarks_dock.setVisible(False) + else: + self.bookmarks_dock.setVisible(True) + def toc_clicked(self, index): item = self.toc_model.itemFromIndex(index) self.web_view.goto_toc_node(item.node_id) diff --git a/src/calibre/gui2/viewer/web_view.py b/src/calibre/gui2/viewer/web_view.py index c98065a558..1860f962e4 100644 --- a/src/calibre/gui2/viewer/web_view.py +++ b/src/calibre/gui2/viewer/web_view.py @@ -174,6 +174,7 @@ class ViewerBridge(Bridge): set_session_data = from_js(object, object) reload_book = from_js() toggle_toc = from_js() + toggle_bookmarks = from_js() update_current_toc_nodes = from_js(object, object) toggle_full_screen = from_js() @@ -257,6 +258,7 @@ class WebView(RestartingWebEngineView): cfi_changed = pyqtSignal(object) reload_book = pyqtSignal() toggle_toc = pyqtSignal() + toggle_bookmarks = pyqtSignal() update_current_toc_nodes = pyqtSignal(object, object) toggle_full_screen = pyqtSignal() @@ -273,6 +275,7 @@ class WebView(RestartingWebEngineView): self.bridge.set_session_data.connect(self.set_session_data) self.bridge.reload_book.connect(self.reload_book) self.bridge.toggle_toc.connect(self.toggle_toc) + self.bridge.toggle_bookmarks.connect(self.toggle_bookmarks) self.bridge.update_current_toc_nodes.connect(self.update_current_toc_nodes) self.bridge.toggle_full_screen.connect(self.toggle_full_screen) self.pending_bridge_ready_actions = {} diff --git a/src/pyj/read_book/overlay.pyj b/src/pyj/read_book/overlay.pyj index e069b81f0e..b9e4f34efb 100644 --- a/src/pyj/read_book/overlay.pyj +++ b/src/pyj/read_book/overlay.pyj @@ -226,6 +226,12 @@ class MainOverlay: reload_actions = E.ul(sync_action, delete_action, reload_action) nav_actions = E.ul(home_action, back_action, forward_action) + bookmarks_action = ac(_('Bookmarks'), None, self.overlay.show_bookmarks, 'bookmark') + toc_actions = E.ul(ac(_('Table of Contents'), None, self.overlay.show_toc, 'TC', True)) + + if runtime.is_standalone_viewer: + toc_actions.appendChild(bookmarks_action) + actions_div = E.div( # actions nav_actions, @@ -236,10 +242,7 @@ class MainOverlay: reload_actions, - E.ul( - ac(_('Table of Contents'), None, self.overlay.show_toc, 'TC', True), - # ac(_('Bookmarks'), None, None, 'bookmark'), - ), + toc_actions, E.ul( ac(_('Font size'), _('Change text size'), self.overlay.show_font_size_chooser, 'Aa', True), @@ -468,6 +471,12 @@ class Overlay: self.panels.push(TOCOverlay(self)) self.show_current_panel() + def show_bookmarks(self): + self.hide_current_panel() + if runtime.is_standalone_viewer: + ui_operations.toggle_bookmarks() + return + def show_goto(self): self.hide_current_panel() self.panels.push(TOCOverlay(self, create_goto_panel, _('Go to…'))) diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index d370c0e3c9..2a95fde3c7 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -236,6 +236,8 @@ if window is window.top: view.update_font_size() ui_operations.toggle_toc = def(): to_python.toggle_toc() + ui_operations.toggle_bookmarks = def(): + to_python.toggle_bookmarks() ui_operations.update_current_toc_nodes = def(current_node_id, top_level_node_id): to_python.update_current_toc_nodes(current_node_id, top_level_node_id) ui_operations.toggle_full_screen = def():