From accf3df2ca597cbdd32741253e5a227221b7fc7b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 9 May 2021 13:55:04 +0530 Subject: [PATCH] Use editor settings when running ToC editor inside main editor --- resources/toc.js | 3 +-- src/calibre/gui2/toc/location.py | 34 ++++++++++++++---------- src/calibre/gui2/tweak_book/preview.py | 36 ++++++++++++++------------ 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/resources/toc.js b/resources/toc.js index 8fafa3f49c..86ff2af2e6 100644 --- a/resources/toc.js +++ b/resources/toc.js @@ -62,8 +62,7 @@ function apply_css() { var css = ''; - var border_shade = settings.is_dark_theme ? 'lightGreen' : 'green'; - css += '.calibre_toc_hover:hover { cursor: pointer !important; border-top: solid 5px ' + border_shade + ' !important }\n\n'; + css += '.calibre_toc_hover:hover { cursor: pointer !important; border-top: solid 5px green !important }\n\n'; if (settings.link) css += 'html > body :link, html > body :link * { color: ' + settings.link + ' !important; }\n\n'; if (settings.is_dark_theme) { css += dark_css; } var style = document.createElement('style'); diff --git a/src/calibre/gui2/toc/location.py b/src/calibre/gui2/toc/location.py index 072c3c1f83..91e880e481 100644 --- a/src/calibre/gui2/toc/location.py +++ b/src/calibre/gui2/toc/location.py @@ -4,14 +4,14 @@ import json - from qt.core import ( QFrame, QGridLayout, QIcon, QLabel, QLineEdit, QListWidget, QPushButton, QSize, - QSplitter, Qt, QUrl, QVBoxLayout, QWidget, pyqtSignal, QApplication, QPalette + QSplitter, Qt, QUrl, QVBoxLayout, QWidget, pyqtSignal ) from qt.webengine import QWebEnginePage, QWebEngineScript, QWebEngineView -from calibre.gui2 import error_dialog, gprefs, question_dialog +from calibre.gui2 import error_dialog, gprefs, is_dark_theme, question_dialog +from calibre.gui2.palette import dark_color, dark_link_color, dark_text_color from calibre.gui2.webengine import secure_webengine from calibre.utils.logging import default_log from calibre.utils.short_uuid import uuid4 @@ -23,7 +23,7 @@ class Page(QWebEnginePage): # {{{ elem_clicked = pyqtSignal(object, object, object, object, object) frag_shown = pyqtSignal(object) - def __init__(self): + def __init__(self, prefs): self.log = default_log self.current_frag = None self.com_id = unicode_type(uuid4()) @@ -37,13 +37,19 @@ class Page(QWebEnginePage): # {{{ s.setRunsOnSubFrames(True) s.setWorldId(QWebEngineScript.ScriptWorldId.ApplicationWorld) js = P('toc.js', allow_user_override=False, data=True).decode('utf-8').replace('COM_ID', self.com_id, 1) - pal = QApplication.instance().palette() - settings = { - 'is_dark_theme': QApplication.instance().is_dark_theme, - 'bg': pal.color(QPalette.ColorRole.Window).name(), - 'fg': pal.color(QPalette.ColorRole.WindowText).name(), - 'link': pal.color(QPalette.ColorRole.Link).name(), - } + if 'preview_background' in prefs.defaults and 'preview_foreground' in prefs.defaults: + from calibre.gui2.tweak_book.preview import get_editor_settings + settings = get_editor_settings(prefs) + else: + if is_dark_theme(): + settings = { + 'is_dark_theme': True, + 'bg': dark_color.name(), + 'fg': dark_text_color.name(), + 'link': dark_link_color.name(), + } + else: + settings = {} js = js.replace('SETTINGS', json.dumps(settings), 1) dark_mode_css = P('dark_mode.css', data=True, allow_user_override=False).decode('utf-8') js = js.replace('CSS', json.dumps(dark_mode_css), 1) @@ -88,9 +94,9 @@ class WebView(QWebEngineView): # {{{ elem_clicked = pyqtSignal(object, object, object, object, object) frag_shown = pyqtSignal(object) - def __init__(self, parent): + def __init__(self, parent, prefs): QWebEngineView.__init__(self, parent) - self._page = Page() + self._page = Page(prefs) self._page.elem_clicked.connect(self.elem_clicked) self._page.frag_shown.connect(self.frag_shown) self.setPage(self._page) @@ -133,7 +139,7 @@ class ItemEdit(QWidget): w = self.w = QWidget(self) l = w.l = QGridLayout() w.setLayout(l) - self.view = WebView(self) + self.view = WebView(self, self.prefs) self.view.elem_clicked.connect(self.elem_clicked) self.view.frag_shown.connect(self.update_dest_label, type=Qt.ConnectionType.QueuedConnection) self.view.loadFinished.connect(self.load_finished, type=Qt.ConnectionType.QueuedConnection) diff --git a/src/calibre/gui2/tweak_book/preview.py b/src/calibre/gui2/tweak_book/preview.py index 304bfa796c..6571fe0fd5 100644 --- a/src/calibre/gui2/tweak_book/preview.py +++ b/src/calibre/gui2/tweak_book/preview.py @@ -235,6 +235,25 @@ def uniq(vals): return tuple(x for x in vals if x not in seen and not seen_add(x)) +def get_editor_settings(tprefs): + dark = is_dark_theme() + + def get_color(name, dark_val): + ans = tprefs[name] + if ans == 'auto' and dark: + ans = dark_val.name() + if ans in ('auto', 'unset'): + return None + return ans + + return { + 'is_dark_theme': dark, + 'bg': get_color('preview_background', dark_color), + 'fg': get_color('preview_foreground', dark_text_color), + 'link': get_color('preview_link_color', dark_link_color), + } + + def create_dark_mode_script(): dark_mode_css = P('dark_mode.css', data=True, allow_user_override=False).decode('utf-8') return create_script('dark-mode.js', ''' @@ -404,22 +423,7 @@ class WebView(RestartingWebEngineView, OpenWithHandler): return self._size_hint def update_settings(self): - dark = is_dark_theme() - - def get_color(name, dark_val): - ans = tprefs[name] - if ans == 'auto' and dark: - ans = dark_val.name() - if ans in ('auto', 'unset'): - return None - return ans - - settings = { - 'is_dark_theme': dark, - 'bg': get_color('preview_background', dark_color), - 'fg': get_color('preview_foreground', dark_text_color), - 'link': get_color('preview_link_color', dark_link_color), - } + settings = get_editor_settings(tprefs) p = self._page.profile() ua = p.httpUserAgent().split('|')[0] + '|' + json.dumps(settings) p.setHttpUserAgent(ua)