mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use editor settings when running ToC editor inside main editor
This commit is contained in:
parent
57fc7739d3
commit
accf3df2ca
@ -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');
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user