Edit book: Add options to change the default font families/sizes for the preview panel

This commit is contained in:
Kovid Goyal 2013-12-15 13:43:36 +05:30
parent 77c3f229fd
commit 593ceffece
4 changed files with 71 additions and 15 deletions

View File

@ -10,21 +10,31 @@ import string
from calibre.utils.config import JSONConfig from calibre.utils.config import JSONConfig
tprefs = JSONConfig('tweak_book_gui') tprefs = JSONConfig('tweak_book_gui')
d = tprefs.defaults
tprefs.defaults['editor_theme'] = None d['editor_theme'] = None
tprefs.defaults['editor_font_family'] = None d['editor_font_family'] = None
tprefs.defaults['editor_font_size'] = 12 d['editor_font_size'] = 12
tprefs.defaults['editor_line_wrap'] = True d['editor_line_wrap'] = True
tprefs.defaults['editor_tab_stop_width'] = 2 d['editor_tab_stop_width'] = 2
tprefs.defaults['preview_refresh_time'] = 2 d['preview_refresh_time'] = 2
tprefs.defaults['choose_tweak_fmt'] = True d['choose_tweak_fmt'] = True
tprefs.defaults['tweak_fmt_order'] = ['EPUB', 'AZW3'] d['tweak_fmt_order'] = ['EPUB', 'AZW3']
tprefs.defaults['update_metadata_from_calibre'] = True d['update_metadata_from_calibre'] = True
tprefs.defaults['nestable_dock_widgets'] = False d['nestable_dock_widgets'] = False
tprefs.defaults['dock_top_left'] = 'horizontal' d['dock_top_left'] = 'horizontal'
tprefs.defaults['dock_top_right'] = 'horizontal' d['dock_top_right'] = 'horizontal'
tprefs.defaults['dock_bottom_left'] = 'horizontal' d['dock_bottom_left'] = 'horizontal'
tprefs.defaults['dock_bottom_right'] = '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)} ucase_map = {l:string.ascii_uppercase[i] for i, l in enumerate(string.ascii_lowercase)}
def capitalize(x): def capitalize(x):

View File

@ -14,7 +14,7 @@ from itertools import product
from PyQt4.Qt import ( from PyQt4.Qt import (
QDialog, QGridLayout, QStackedWidget, QDialogButtonBox, QListWidget, QDialog, QGridLayout, QStackedWidget, QDialogButtonBox, QListWidget,
QListWidgetItem, QIcon, QWidget, QSize, QFormLayout, Qt, QSpinBox, 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.keyboard import ShortcutConfig
from calibre.gui2.tweak_book import tprefs 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)] ('bottom', 'left'):_('The bottom-left corner'), ('bottom', 'right'):_('The bottom-right corner')}[(v, h)]
l.addRow(cn + ':', w) 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): class Preferences(QDialog):
def __init__(self, gui, initial_panel=None): def __init__(self, gui, initial_panel=None):
@ -264,10 +296,12 @@ class Preferences(QDialog):
self.editor_panel = EditorSettings(self) self.editor_panel = EditorSettings(self)
self.integration_panel = IntegrationSettings(self) self.integration_panel = IntegrationSettings(self)
self.main_window_panel = MainWindowSettings(self) self.main_window_panel = MainWindowSettings(self)
self.preview_panel = PreviewSettings(self)
for name, icon, panel in [ for name, icon, panel in [
(_('Main window'), 'page.png', 'main_window'), (_('Main window'), 'page.png', 'main_window'),
(_('Editor settings'), 'modified.png', 'editor'), (_('Editor settings'), 'modified.png', 'editor'),
(_('Preview settings'), 'viewer.png', 'preview'),
(_('Keyboard shortcuts'), 'keyboard-prefs.png', 'keyboard'), (_('Keyboard shortcuts'), 'keyboard-prefs.png', 'keyboard'),
(_('Integration with calibre'), 'lt.png', 'integration'), (_('Integration with calibre'), 'lt.png', 'integration'),
]: ]:

View File

@ -595,3 +595,14 @@ class Preview(QWidget):
else: else:
self.stop_split() 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)

View File

@ -233,6 +233,7 @@ class Main(MainWindow):
p = 'dock_%s_%s' % (v, h) p = 'dock_%s_%s' % (v, h)
area = getattr(Qt, '%sDockWidgetArea' % capitalize({'vertical':h, 'horizontal':v}[tprefs[p] or tprefs.defaults[p]])) 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.setCorner(getattr(Qt, '%s%sCorner' % tuple(map(capitalize, (v, h)))), area)
self.preview.apply_settings()
def show_status_message(self, msg, timeout=5): def show_status_message(self, msg, timeout=5):
self.status_bar.showMessage(msg, int(timeout*1000)) self.status_bar.showMessage(msg, int(timeout*1000))