Use editor settings when running ToC editor inside main editor

This commit is contained in:
Kovid Goyal 2021-05-09 13:55:04 +05:30
parent 57fc7739d3
commit accf3df2ca
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 41 additions and 32 deletions

View File

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

View File

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

View File

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