diff --git a/src/calibre/gui2/tweak_book/__init__.py b/src/calibre/gui2/tweak_book/__init__.py index 7bcb058ab3..d185f60cde 100644 --- a/src/calibre/gui2/tweak_book/__init__.py +++ b/src/calibre/gui2/tweak_book/__init__.py @@ -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): diff --git a/src/calibre/gui2/tweak_book/preferences.py b/src/calibre/gui2/tweak_book/preferences.py index 323c60b154..4119ec53ae 100644 --- a/src/calibre/gui2/tweak_book/preferences.py +++ b/src/calibre/gui2/tweak_book/preferences.py @@ -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'), ]: diff --git a/src/calibre/gui2/tweak_book/preview.py b/src/calibre/gui2/tweak_book/preview.py index 2fabbaad85..dc7902d7a7 100644 --- a/src/calibre/gui2/tweak_book/preview.py +++ b/src/calibre/gui2/tweak_book/preview.py @@ -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) diff --git a/src/calibre/gui2/tweak_book/ui.py b/src/calibre/gui2/tweak_book/ui.py index 856a6ad353..a22db6a7b7 100644 --- a/src/calibre/gui2/tweak_book/ui.py +++ b/src/calibre/gui2/tweak_book/ui.py @@ -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))