Implement toggling of bookmarks panel

This commit is contained in:
Kovid Goyal 2019-08-08 13:45:27 +05:30
parent d97db810c0
commit 45fa8525ba
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 31 additions and 5 deletions

View File

@ -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)

View File

@ -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 = {}

View File

@ -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…')))

View File

@ -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():