From f41348a5e14fc6a7faec235d83cb244e633a954f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 17 Nov 2019 09:22:39 +0530 Subject: [PATCH] Viewer: Allow customizing what actions appear on the toolbar (Preferences->Miscellaneous->Customize toolbar). Fixes #1852017 [Rearrange the optional toolbar icons](https://bugs.launchpad.net/calibre/+bug/1852017) --- src/calibre/gui2/viewer/toolbars.py | 7 +++++++ src/calibre/gui2/viewer/web_view.py | 3 +++ src/pyj/read_book/prefs/misc.pyj | 8 ++++++-- src/pyj/viewer-main.pyj | 2 ++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/viewer/toolbars.py b/src/calibre/gui2/viewer/toolbars.py index 5e6f3a595a..ed659d3637 100644 --- a/src/calibre/gui2/viewer/toolbars.py +++ b/src/calibre/gui2/viewer/toolbars.py @@ -108,6 +108,7 @@ class ActionsToolBar(ToolBar): page = web_view.page() web_view.paged_mode_changed.connect(self.update_mode_action) web_view.standalone_misc_settings_changed.connect(self.update_visibility) + web_view.customize_toolbar.connect(self.customize, type=Qt.QueuedConnection) self.back_action = page.action(QWebEnginePage.Back) self.back_action.setIcon(aa.back.icon) @@ -199,6 +200,11 @@ class ActionsToolBar(ToolBar): def update_visibility(self): self.setVisible(bool(get_session_pref('show_actions_toolbar', default=False))) + def customize(self): + d = ConfigureToolBar(parent=self.parent()) + if d.exec_() == d.Accepted: + self.add_actions() + class ActionsList(QListWidget): @@ -323,6 +329,7 @@ class ConfigureToolBar(Dialog): vprefs.__delitem__('actions-toolbar-actions') else: vprefs.set('actions-toolbar-actions', ans) + return Dialog.accept(self) if __name__ == '__main__': diff --git a/src/calibre/gui2/viewer/web_view.py b/src/calibre/gui2/viewer/web_view.py index 30a897fbf4..22b36d438c 100644 --- a/src/calibre/gui2/viewer/web_view.py +++ b/src/calibre/gui2/viewer/web_view.py @@ -258,6 +258,7 @@ class ViewerBridge(Bridge): print_book = from_js() clear_history = from_js() reset_interface = from_js() + customize_toolbar = from_js() create_view = to_js() start_book_load = to_js() @@ -414,6 +415,7 @@ class WebView(RestartingWebEngineView): show_error = pyqtSignal(object, object, object) print_book = pyqtSignal() reset_interface = pyqtSignal() + customize_toolbar = pyqtSignal() shortcuts_changed = pyqtSignal(object) paged_mode_changed = pyqtSignal() standalone_misc_settings_changed = pyqtSignal(object) @@ -452,6 +454,7 @@ class WebView(RestartingWebEngineView): self.bridge.print_book.connect(self.print_book) self.bridge.clear_history.connect(self.clear_history) self.bridge.reset_interface.connect(self.reset_interface) + self.bridge.customize_toolbar.connect(self.customize_toolbar) self.bridge.export_shortcut_map.connect(self.set_shortcut_map) self.shortcut_map = {} self.bridge.report_cfi.connect(self.call_callback) diff --git a/src/pyj/read_book/prefs/misc.pyj b/src/pyj/read_book/prefs/misc.pyj index 96d99e4808..610897561d 100644 --- a/src/pyj/read_book/prefs/misc.pyj +++ b/src/pyj/read_book/prefs/misc.pyj @@ -7,9 +7,10 @@ from gettext import gettext as _ from book_list.globals import get_session_data from dom import unique_id -from session import defaults +from read_book.globals import ui_operations from read_book.prefs.utils import create_button_box - +from session import defaults +from widgets import create_button CONTAINER = unique_id('standalone-misc-settings') DEFAULTS = { @@ -46,6 +47,9 @@ def create_misc_panel(container, apply_func, cancel_func): container.append(cb('remember_window_geometry', _('Remember last used window size and position'))) container.append(cb('show_actions_toolbar', _('Show a toolbar with the most useful actions'))) + container.lastChild.append(E.span('\xa0')) + container.lastChild.append( + create_button(_('Customize toolbar'), action=ui_operations.customize_toolbar)) container.append(cb('remember_last_read', _('Remember current page when quitting'))) container.append(cb('save_annotations_in_ebook', _('Keep a copy of annotations/bookmarks in the e-book file, for easy sharing'))) container.append(cb('singleinstance', _('Allow only a single instance of the viewer (needs restart)'))) diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index e7c149a3d7..5ef516c38e 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -377,6 +377,8 @@ if window is window.top: to_python.print_book() ui_operations.clear_history = def(): to_python.clear_history() + ui_operations.customize_toolbar = def(): + to_python.customize_toolbar() document.body.appendChild(E.div(id='view')) window.onerror = onerror