mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 18:54:09 -04:00
Edit book: Add options to change the default font families/sizes for the preview panel
This commit is contained in:
parent
77c3f229fd
commit
593ceffece
@ -10,21 +10,31 @@ import string
|
||||
|
||||
from calibre.utils.config import JSONConfig
|
||||
tprefs = JSONConfig('tweak_book_gui')
|
||||
d = tprefs.defaults
|
||||
|
||||
tprefs.defaults['editor_theme'] = None
|
||||
tprefs.defaults['editor_font_family'] = None
|
||||
tprefs.defaults['editor_font_size'] = 12
|
||||
tprefs.defaults['editor_line_wrap'] = True
|
||||
tprefs.defaults['editor_tab_stop_width'] = 2
|
||||
tprefs.defaults['preview_refresh_time'] = 2
|
||||
tprefs.defaults['choose_tweak_fmt'] = True
|
||||
tprefs.defaults['tweak_fmt_order'] = ['EPUB', 'AZW3']
|
||||
tprefs.defaults['update_metadata_from_calibre'] = True
|
||||
tprefs.defaults['nestable_dock_widgets'] = False
|
||||
tprefs.defaults['dock_top_left'] = 'horizontal'
|
||||
tprefs.defaults['dock_top_right'] = 'horizontal'
|
||||
tprefs.defaults['dock_bottom_left'] = 'horizontal'
|
||||
tprefs.defaults['dock_bottom_right'] = 'horizontal'
|
||||
d['editor_theme'] = None
|
||||
d['editor_font_family'] = None
|
||||
d['editor_font_size'] = 12
|
||||
d['editor_line_wrap'] = True
|
||||
d['editor_tab_stop_width'] = 2
|
||||
d['preview_refresh_time'] = 2
|
||||
d['choose_tweak_fmt'] = True
|
||||
d['tweak_fmt_order'] = ['EPUB', 'AZW3']
|
||||
d['update_metadata_from_calibre'] = True
|
||||
d['nestable_dock_widgets'] = False
|
||||
d['dock_top_left'] = 'horizontal'
|
||||
d['dock_top_right'] = 'horizontal'
|
||||
d['dock_bottom_left'] = 'horizontal'
|
||||
d['dock_bottom_right'] = 'horizontal'
|
||||
d['preview_serif_family'] = 'Liberation Serif'
|
||||
d['preview_sans_family'] = 'Liberation Sans'
|
||||
d['preview_mono_family'] = 'Liberation Mono'
|
||||
d['preview_standard_font_family'] = 'serif'
|
||||
d['preview_base_font_size'] = 18
|
||||
d['preview_mono_font_size'] = 14
|
||||
d['preview_minimum_font_size'] = 8
|
||||
|
||||
del d
|
||||
|
||||
ucase_map = {l:string.ascii_uppercase[i] for i, l in enumerate(string.ascii_lowercase)}
|
||||
def capitalize(x):
|
||||
|
@ -14,7 +14,7 @@ from itertools import product
|
||||
from PyQt4.Qt import (
|
||||
QDialog, QGridLayout, QStackedWidget, QDialogButtonBox, QListWidget,
|
||||
QListWidgetItem, QIcon, QWidget, QSize, QFormLayout, Qt, QSpinBox,
|
||||
QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel)
|
||||
QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel, QFont, QFontComboBox)
|
||||
|
||||
from calibre.gui2.keyboard import ShortcutConfig
|
||||
from calibre.gui2.tweak_book import tprefs
|
||||
@ -220,6 +220,38 @@ class MainWindowSettings(BasicSettings):
|
||||
('bottom', 'left'):_('The bottom-left corner'), ('bottom', 'right'):_('The bottom-right corner')}[(v, h)]
|
||||
l.addRow(cn + ':', w)
|
||||
|
||||
class PreviewSettings(BasicSettings):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
BasicSettings.__init__(self, parent)
|
||||
self.l = l = QFormLayout(self)
|
||||
self.setLayout(l)
|
||||
|
||||
def family_getter(w):
|
||||
return unicode(w.currentFont().family())
|
||||
|
||||
def family_setter(w, val):
|
||||
w.setCurrentFont(QFont(val))
|
||||
|
||||
families = {'serif':_('Serif text'), 'sans':_('Sans-serif text'), 'mono':_('Monospaced text')}
|
||||
for fam, text in families.iteritems():
|
||||
w = QFontComboBox(self)
|
||||
self('preview_%s_family' % fam, widget=w, getter=family_getter, setter=family_setter)
|
||||
l.addRow(_('Font family for &%s:') % text, w)
|
||||
|
||||
w = self.choices_widget('preview_standard_font_family', families, 'serif', 'serif')
|
||||
l.addRow(_('&Style for standard text:'), w)
|
||||
|
||||
w = self('preview_base_font_size')
|
||||
w.setMinimum(8), w.setMaximum(100), w.setSuffix(' px')
|
||||
l.addRow(_('&Default font size:'), w)
|
||||
w = self('preview_mono_font_size')
|
||||
w.setMinimum(8), w.setMaximum(100), w.setSuffix(' px')
|
||||
l.addRow(_('&Monospace font size:'), w)
|
||||
w = self('preview_minimum_font_size')
|
||||
w.setMinimum(4), w.setMaximum(100), w.setSuffix(' px')
|
||||
l.addRow(_('Mi&nimum font size:'), w)
|
||||
|
||||
class Preferences(QDialog):
|
||||
|
||||
def __init__(self, gui, initial_panel=None):
|
||||
@ -264,10 +296,12 @@ class Preferences(QDialog):
|
||||
self.editor_panel = EditorSettings(self)
|
||||
self.integration_panel = IntegrationSettings(self)
|
||||
self.main_window_panel = MainWindowSettings(self)
|
||||
self.preview_panel = PreviewSettings(self)
|
||||
|
||||
for name, icon, panel in [
|
||||
(_('Main window'), 'page.png', 'main_window'),
|
||||
(_('Editor settings'), 'modified.png', 'editor'),
|
||||
(_('Preview settings'), 'viewer.png', 'preview'),
|
||||
(_('Keyboard shortcuts'), 'keyboard-prefs.png', 'keyboard'),
|
||||
(_('Integration with calibre'), 'lt.png', 'integration'),
|
||||
]:
|
||||
|
@ -595,3 +595,14 @@ class Preview(QWidget):
|
||||
else:
|
||||
self.stop_split()
|
||||
|
||||
def apply_settings(self):
|
||||
s = self.view.page().settings()
|
||||
s.setFontSize(s.DefaultFontSize, tprefs['preview_base_font_size'])
|
||||
s.setFontSize(s.DefaultFixedFontSize, tprefs['preview_mono_font_size'])
|
||||
s.setFontSize(s.MinimumLogicalFontSize, tprefs['preview_minimum_font_size'])
|
||||
s.setFontSize(s.MinimumFontSize, tprefs['preview_minimum_font_size'])
|
||||
sf, ssf, mf = tprefs['preview_serif_family'], tprefs['preview_sans_family'], tprefs['preview_mono_family']
|
||||
s.setFontFamily(s.StandardFont, {'serif':sf, 'sans':ssf, 'mono':mf, None:sf}[tprefs['preview_standard_font_family']])
|
||||
s.setFontFamily(s.SerifFont, sf)
|
||||
s.setFontFamily(s.SansSerifFont, ssf)
|
||||
s.setFontFamily(s.FixedFont, mf)
|
||||
|
@ -233,6 +233,7 @@ class Main(MainWindow):
|
||||
p = 'dock_%s_%s' % (v, h)
|
||||
area = getattr(Qt, '%sDockWidgetArea' % capitalize({'vertical':h, 'horizontal':v}[tprefs[p] or tprefs.defaults[p]]))
|
||||
self.setCorner(getattr(Qt, '%s%sCorner' % tuple(map(capitalize, (v, h)))), area)
|
||||
self.preview.apply_settings()
|
||||
|
||||
def show_status_message(self, msg, timeout=5):
|
||||
self.status_bar.showMessage(msg, int(timeout*1000))
|
||||
|
Loading…
x
Reference in New Issue
Block a user