diff --git a/src/calibre/gui2/viewer/config.py b/src/calibre/gui2/viewer/config.py index 8631d9e6a4..db2d67e0e3 100644 --- a/src/calibre/gui2/viewer/config.py +++ b/src/calibre/gui2/viewer/config.py @@ -76,6 +76,9 @@ def config(defaults=None): return c +def load_themes(): + return JSONConfig('viewer_themes') + class ConfigDialog(QDialog, Ui_Dialog): def __init__(self, shortcuts, parent=None): @@ -113,7 +116,7 @@ class ConfigDialog(QDialog, Ui_Dialog): self.hyphenate_default_lang.setVisible(False) self.hyphenate_label.setVisible(False) - self.themes = JSONConfig('viewer_themes') + self.themes = load_themes() self.save_theme_button.clicked.connect(self.save_theme) self.load_theme_button.m = m = QMenu() self.load_theme_button.setMenu(m) diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 55791afd4a..80dba06afd 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -21,7 +21,7 @@ from calibre.customize.ui import all_viewer_plugins from calibre.gui2.viewer.keys import SHORTCUTS from calibre.gui2.viewer.javascript import JavaScriptLoader from calibre.gui2.viewer.position import PagePosition -from calibre.gui2.viewer.config import config, ConfigDialog +from calibre.gui2.viewer.config import config, ConfigDialog, load_themes from calibre.gui2.viewer.image_popup import ImagePopup from calibre.ebooks.oeb.display.webview import load_html from calibre.constants import isxp, iswindows @@ -31,8 +31,7 @@ class Document(QWebPage): # {{{ page_turn = pyqtSignal(object) - def set_font_settings(self): - opts = config().parse() + def set_font_settings(self, opts): settings = self.settings() settings.setFontSize(QWebSettings.DefaultFontSize, opts.default_font_size) settings.setFontSize(QWebSettings.DefaultFixedFontSize, opts.mono_font_size) @@ -47,11 +46,15 @@ class Document(QWebPage): # {{{ def do_config(self, parent=None): d = ConfigDialog(self.shortcuts, parent) if d.exec_() == QDialog.Accepted: - with self.page_position: - self.set_font_settings() - self.set_user_stylesheet() - self.misc_config() - self.after_load() + opts = config().parse() + self.apply_settings(opts) + + def apply_settings(self, opts): + with self.page_position: + self.set_font_settings(opts) + self.set_user_stylesheet(opts) + self.misc_config(opts) + self.after_load() def __init__(self, shortcuts, parent=None, debug_javascript=False): QWebPage.__init__(self, parent) @@ -87,7 +90,8 @@ class Document(QWebPage): # {{{ self.all_viewer_plugins = tuple(all_viewer_plugins()) for pl in self.all_viewer_plugins: pl.load_fonts() - self.set_font_settings() + opts = config().parse() + self.set_font_settings(opts) # Security settings.setAttribute(QWebSettings.JavaEnabled, False) @@ -98,8 +102,8 @@ class Document(QWebPage): # {{{ # Miscellaneous settings.setAttribute(QWebSettings.LinksIncludedInFocusChain, True) settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True) - self.set_user_stylesheet() - self.misc_config() + self.set_user_stylesheet(opts) + self.misc_config(opts) # Load javascript self.mainFrame().javaScriptWindowObjectCleared.connect( @@ -112,8 +116,7 @@ class Document(QWebPage): # {{{ mf.setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) mf.setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) - def set_user_stylesheet(self): - opts = config().parse() + def set_user_stylesheet(self, opts): bg = opts.background_color or 'white' brules = ['background-color: %s !important'%bg] prefix = ''' @@ -127,8 +130,7 @@ class Document(QWebPage): # {{{ data += b64encode(raw.encode('utf-8')) self.settings().setUserStyleSheetUrl(QUrl(data)) - def misc_config(self): - opts = config().parse() + def misc_config(self, opts): self.hyphenate = opts.hyphenate self.hyphenate_default_lang = opts.hyphenate_default_lang self.do_fit_images = opts.fit_images @@ -560,6 +562,15 @@ class DocumentView(QWebView): # {{{ self.document.switch_to_fullscreen_mode() self.setFocus(Qt.OtherFocusReason) + def load_theme(self, theme_id): + themes = load_themes() + theme = themes[theme_id] + opts = config(theme).parse() + self.document.apply_settings(opts) + if self.document.in_fullscreen_mode: + self.document.switch_to_fullscreen_mode() + self.setFocus(Qt.OtherFocusReason) + def bookmark(self): return self.document.bookmark() diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index a63fb2c8c6..ffc5ae2ac7 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -245,8 +245,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer): self.action_back.triggered[bool].connect(self.back) self.action_forward.triggered[bool].connect(self.forward) self.action_bookmark.triggered[bool].connect(self.bookmark) - self.action_preferences.triggered.connect(lambda : - self.view.config(self)) + self.action_preferences.triggered.connect(self.do_config) self.pos.editingFinished.connect(self.goto_page_num) self.vertical_scrollbar.valueChanged[int].connect(lambda x:self.goto_page(x/100.)) @@ -259,6 +258,10 @@ class EbookViewer(MainWindow, Ui_EbookViewer): self.action_bookmark.setMenu(self.bookmarks_menu) self.set_bookmarks([]) + self.themes_menu = QMenu() + self.action_load_theme.setMenu(self.themes_menu) + self.tool_bar.widgetForAction(self.action_load_theme).setPopupMode(QToolButton.InstantPopup) + self.load_theme_menu() if pathtoebook is not None: f = functools.partial(self.load_ebook, pathtoebook, open_at=open_at) @@ -845,6 +848,21 @@ class EbookViewer(MainWindow, Ui_EbookViewer): getattr(self, o).setEnabled(False) self.setCursor(Qt.BusyCursor) + def load_theme_menu(self): + from calibre.gui2.viewer.config import load_themes + self.themes_menu.clear() + for key in load_themes(): + title = key[len('theme_'):] + self.themes_menu.addAction(title, partial(self.load_theme, + key)) + + def load_theme(self, theme_id): + self.view.load_theme(theme_id) + + def do_config(self): + self.view.config(self) + self.load_theme_menu() + def bookmark(self, *args): num = 1 bm = None diff --git a/src/calibre/gui2/viewer/main.ui b/src/calibre/gui2/viewer/main.ui index ddc4cfb776..d6deb315b2 100644 --- a/src/calibre/gui2/viewer/main.ui +++ b/src/calibre/gui2/viewer/main.ui @@ -7,7 +7,7 @@ 0 0 653 - 672 + 746 @@ -141,6 +141,7 @@ + @@ -332,6 +333,18 @@ Toggle Paged mode + + + + :/images/wizard.png:/images/wizard.png + + + Load theme + + + Load a theme + +