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() {
|
function apply_css() {
|
||||||
var css = '';
|
var css = '';
|
||||||
var border_shade = settings.is_dark_theme ? 'lightGreen' : 'green';
|
css += '.calibre_toc_hover:hover { cursor: pointer !important; border-top: solid 5px green !important }\n\n';
|
||||||
css += '.calibre_toc_hover:hover { cursor: pointer !important; border-top: solid 5px ' + border_shade + ' !important }\n\n';
|
|
||||||
if (settings.link) css += 'html > body :link, html > body :link * { color: ' + settings.link + ' !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; }
|
if (settings.is_dark_theme) { css += dark_css; }
|
||||||
var style = document.createElement('style');
|
var style = document.createElement('style');
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
|
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QFrame, QGridLayout, QIcon, QLabel, QLineEdit, QListWidget, QPushButton, QSize,
|
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 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.gui2.webengine import secure_webengine
|
||||||
from calibre.utils.logging import default_log
|
from calibre.utils.logging import default_log
|
||||||
from calibre.utils.short_uuid import uuid4
|
from calibre.utils.short_uuid import uuid4
|
||||||
@ -23,7 +23,7 @@ class Page(QWebEnginePage): # {{{
|
|||||||
elem_clicked = pyqtSignal(object, object, object, object, object)
|
elem_clicked = pyqtSignal(object, object, object, object, object)
|
||||||
frag_shown = pyqtSignal(object)
|
frag_shown = pyqtSignal(object)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, prefs):
|
||||||
self.log = default_log
|
self.log = default_log
|
||||||
self.current_frag = None
|
self.current_frag = None
|
||||||
self.com_id = unicode_type(uuid4())
|
self.com_id = unicode_type(uuid4())
|
||||||
@ -37,13 +37,19 @@ class Page(QWebEnginePage): # {{{
|
|||||||
s.setRunsOnSubFrames(True)
|
s.setRunsOnSubFrames(True)
|
||||||
s.setWorldId(QWebEngineScript.ScriptWorldId.ApplicationWorld)
|
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)
|
js = P('toc.js', allow_user_override=False, data=True).decode('utf-8').replace('COM_ID', self.com_id, 1)
|
||||||
pal = QApplication.instance().palette()
|
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 = {
|
settings = {
|
||||||
'is_dark_theme': QApplication.instance().is_dark_theme,
|
'is_dark_theme': True,
|
||||||
'bg': pal.color(QPalette.ColorRole.Window).name(),
|
'bg': dark_color.name(),
|
||||||
'fg': pal.color(QPalette.ColorRole.WindowText).name(),
|
'fg': dark_text_color.name(),
|
||||||
'link': pal.color(QPalette.ColorRole.Link).name(),
|
'link': dark_link_color.name(),
|
||||||
}
|
}
|
||||||
|
else:
|
||||||
|
settings = {}
|
||||||
js = js.replace('SETTINGS', json.dumps(settings), 1)
|
js = js.replace('SETTINGS', json.dumps(settings), 1)
|
||||||
dark_mode_css = P('dark_mode.css', data=True, allow_user_override=False).decode('utf-8')
|
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)
|
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)
|
elem_clicked = pyqtSignal(object, object, object, object, object)
|
||||||
frag_shown = pyqtSignal(object)
|
frag_shown = pyqtSignal(object)
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent, prefs):
|
||||||
QWebEngineView.__init__(self, parent)
|
QWebEngineView.__init__(self, parent)
|
||||||
self._page = Page()
|
self._page = Page(prefs)
|
||||||
self._page.elem_clicked.connect(self.elem_clicked)
|
self._page.elem_clicked.connect(self.elem_clicked)
|
||||||
self._page.frag_shown.connect(self.frag_shown)
|
self._page.frag_shown.connect(self.frag_shown)
|
||||||
self.setPage(self._page)
|
self.setPage(self._page)
|
||||||
@ -133,7 +139,7 @@ class ItemEdit(QWidget):
|
|||||||
w = self.w = QWidget(self)
|
w = self.w = QWidget(self)
|
||||||
l = w.l = QGridLayout()
|
l = w.l = QGridLayout()
|
||||||
w.setLayout(l)
|
w.setLayout(l)
|
||||||
self.view = WebView(self)
|
self.view = WebView(self, self.prefs)
|
||||||
self.view.elem_clicked.connect(self.elem_clicked)
|
self.view.elem_clicked.connect(self.elem_clicked)
|
||||||
self.view.frag_shown.connect(self.update_dest_label, type=Qt.ConnectionType.QueuedConnection)
|
self.view.frag_shown.connect(self.update_dest_label, type=Qt.ConnectionType.QueuedConnection)
|
||||||
self.view.loadFinished.connect(self.load_finished, 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))
|
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():
|
def create_dark_mode_script():
|
||||||
dark_mode_css = P('dark_mode.css', data=True, allow_user_override=False).decode('utf-8')
|
dark_mode_css = P('dark_mode.css', data=True, allow_user_override=False).decode('utf-8')
|
||||||
return create_script('dark-mode.js', '''
|
return create_script('dark-mode.js', '''
|
||||||
@ -404,22 +423,7 @@ class WebView(RestartingWebEngineView, OpenWithHandler):
|
|||||||
return self._size_hint
|
return self._size_hint
|
||||||
|
|
||||||
def update_settings(self):
|
def update_settings(self):
|
||||||
dark = is_dark_theme()
|
settings = get_editor_settings(tprefs)
|
||||||
|
|
||||||
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),
|
|
||||||
}
|
|
||||||
p = self._page.profile()
|
p = self._page.profile()
|
||||||
ua = p.httpUserAgent().split('|')[0] + '|' + json.dumps(settings)
|
ua = p.httpUserAgent().split('|')[0] + '|' + json.dumps(settings)
|
||||||
p.setHttpUserAgent(ua)
|
p.setHttpUserAgent(ua)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user