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
+
+