diff --git a/src/calibre/gui2/font_family_chooser.py b/src/calibre/gui2/font_family_chooser.py index 7d5e318315..b4ad3331c2 100644 --- a/src/calibre/gui2/font_family_chooser.py +++ b/src/calibre/gui2/font_family_chooser.py @@ -18,6 +18,34 @@ from PyQt5.Qt import (QFontInfo, QFontMetrics, Qt, QFont, QFontDatabase, QPen, from calibre.constants import config_dir from calibre.gui2 import choose_files, error_dialog, info_dialog + +def add_fonts(parent): + from calibre.utils.fonts.metadata import FontMetadata + files = choose_files(parent, 'add fonts to calibre', + _('Select font files'), filters=[(_('TrueType/OpenType Fonts'), + ['ttf', 'otf'])], all_files=False) + if not files: + return + families = set() + for f in files: + try: + with open(f, 'rb') as stream: + fm = FontMetadata(stream) + except: + import traceback + error_dialog(parent, _('Corrupt font'), + _('Failed to read metadata from the font file: %s')% + f, det_msg=traceback.format_exc(), show=True) + return + families.add(fm.font_family) + families = sorted(families) + + dest = os.path.join(config_dir, 'fonts') + for f in files: + shutil.copyfile(f, os.path.join(dest, os.path.basename(f))) + + return families + def writing_system_for_font(font): has_latin = True systems = QFontDatabase().writingSystems(font.family()) @@ -136,8 +164,8 @@ class Typefaces(QLabel): '''%(_('Available faces for %s')%family) entries = [] for font in faces: - sf = (font['wws_subfamily_name'] or font['preferred_subfamily_name'] - or font['subfamily_name']) + sf = (font['wws_subfamily_name'] or font['preferred_subfamily_name'] or + font['subfamily_name']) entries.append('''
{sf}
font-stretch: {width} font-weight: {weight} font-style: @@ -261,29 +289,9 @@ class FontFamilyDialog(QDialog): self.m.setStringList(self.families) def add_fonts(self): - from calibre.utils.fonts.metadata import FontMetadata - files = choose_files(self, 'add fonts to calibre', - _('Select font files'), filters=[(_('TrueType/OpenType Fonts'), - ['ttf', 'otf'])], all_files=False) - if not files: + families = add_fonts(self) + if not families: return - families = set() - for f in files: - try: - with open(f, 'rb') as stream: - fm = FontMetadata(stream) - except: - import traceback - error_dialog(self, _('Corrupt font'), - _('Failed to read metadata from the font file: %s')% - f, det_msg=traceback.format_exc(), show=True) - return - families.add(fm.font_family) - families = sorted(families) - - dest = os.path.join(config_dir, 'fonts') - for f in files: - shutil.copyfile(f, os.path.join(dest, os.path.basename(f))) self.font_scanner.do_scan() self.m.beginResetModel() self.build_font_list() diff --git a/src/calibre/gui2/tweak_book/manage_fonts.py b/src/calibre/gui2/tweak_book/manage_fonts.py index 4c52d473e0..5787cc5f36 100644 --- a/src/calibre/gui2/tweak_book/manage_fonts.py +++ b/src/calibre/gui2/tweak_book/manage_fonts.py @@ -6,21 +6,51 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2014, Kovid Goyal ' -import sys +import sys, textwrap from PyQt5.Qt import ( QSplitter, QVBoxLayout, QTableView, QWidget, QLabel, QAbstractTableModel, - Qt, QApplication, QTimer, QPushButton, pyqtSignal, QFormLayout, QLineEdit, - QIcon, QSize) + Qt, QTimer, QPushButton, pyqtSignal, QFormLayout, QLineEdit, QIcon, QSize, + QHBoxLayout, QTextEdit) from calibre.ebooks.oeb.polish.container import get_container from calibre.ebooks.oeb.polish.fonts import font_family_data, change_font -from calibre.gui2 import error_dialog +from calibre.gui2 import error_dialog, info_dialog from calibre.gui2.tweak_book import current_container, set_current_container from calibre.gui2.tweak_book.widgets import Dialog, BusyCursor from calibre.utils.icu import primary_sort_key as sort_key from calibre.utils.fonts.scanner import font_scanner, NoFonts +class EmbeddingData(Dialog): + + def __init__(self, family, faces, parent=None): + Dialog.__init__(self, _('Font faces for %s') % family, 'editor-embedding-data', parent) + self.family, self.faces = family, faces + self.populate_text() + + def sizeHint(self): + return QSize(600, 500) + + def setup_ui(self): + self.l = l = QVBoxLayout(self) + self.text = t = QTextEdit(self) + t.setReadOnly(True) + l.addWidget(t), l.addWidget(self.bb) + self.bb.clear(), self.bb.setStandardButtons(self.bb.Close) + + def populate_text(self): + text = ['

' + self.windowTitle() + '