diff options
| author | Adrien Tétar | 2015-06-10 11:15:06 +0200 |
|---|---|---|
| committer | Adrien Tétar | 2015-06-10 11:15:06 +0200 |
| commit | 7e3af461d8516c2c761e3134aa86c4ecc7a2d05f (patch) | |
| tree | a15a5b5b2fcefae8c4cfe357f3323de3c8a4148f /Lib/defconQt/fontInfo.py | |
| parent | 68df4237592fe9734f69d95b0bc188fc324298c0 (diff) | |
| download | trufont-7e3af461d8516c2c761e3134aa86c4ecc7a2d05f.tar.bz2 | |
Correct some file names case
Diffstat (limited to 'Lib/defconQt/fontInfo.py')
| -rw-r--r-- | Lib/defconQt/fontInfo.py | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/Lib/defconQt/fontInfo.py b/Lib/defconQt/fontInfo.py new file mode 100644 index 0000000..8adb94e --- /dev/null +++ b/Lib/defconQt/fontInfo.py @@ -0,0 +1,263 @@ +from PyQt5.QtCore import QDate, QDateTime, QTime, Qt +from PyQt5.QtGui import QDoubleValidator, QIntValidator +from PyQt5.QtWidgets import QComboBox, QDateTimeEdit, QDialog, QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QScrollArea, QTabWidget, QVBoxLayout, QWidget + +class TabDialog(QDialog): + + def __init__(self, font, parent=None): + super(TabDialog, self).__init__(parent) + + # TODO: figure a proper correspondence to set and fetch widgets... + self.tabs = { + "General": 0, + "Metrics": 1, + "OpenType": 2 + } + + self.font = font + self.tabWidget = QTabWidget() + self.tabWidget.addTab(GeneralTab(self.font), "General") + self.tabWidget.addTab(MetricsTab(self.font), "Metrics") +# self.tabWidget.addTab(ApplicationsTab(fileInfo), "OpenType") +# self.tabWidget.addTab(ApplicationsTab(fileInfo), "PostScript") +# self.tabWidget.addTab(ApplicationsTab(fileInfo), "Miscellaneous") + + buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + + buttonBox.accepted.connect(self.accept) + buttonBox.rejected.connect(self.reject) + + mainLayout = QVBoxLayout() + mainLayout.addWidget(self.tabWidget) + mainLayout.addWidget(buttonBox) + self.setLayout(mainLayout) + + self.setWindowTitle("%s%s%s%s" % ("Font Info – ", self.font.info.familyName, " ", self.font.info.styleName)) + + def accept(self): + self.tabWidget.widget(self.tabs["General"]).writeValues(self.font) + self.tabWidget.widget(self.tabs["Metrics"]).writeValues(self.font) + super(TabDialog, self).accept() + +class GeneralTab(QWidget): + def __init__(self, font, parent=None): + super(GeneralTab, self).__init__(parent) + mainLayout = QGridLayout(self) + + familyNameLabel = QLabel("Family name:", self) + self.familyNameEdit = QLineEdit(font.info.familyName, self) + styleNameLabel = QLabel("Style name:", self) + self.styleNameEdit = QLineEdit(font.info.styleName, self) + + mainLayout.addWidget(familyNameLabel, 0, 0) + mainLayout.addWidget(self.familyNameEdit, 0, 1, 1, 3) + mainLayout.addWidget(styleNameLabel, 0, 4) + mainLayout.addWidget(self.styleNameEdit, 0, 5) + + designerLabel = QLabel("Designer:", self) + self.designerEdit = QLineEdit(font.info.openTypeNameDesigner, self) + + mainLayout.addWidget(designerLabel, 1, 0) + mainLayout.addWidget(self.designerEdit, 1, 1, 1, 5) + + designerURLLabel = QLabel("Designer URL:", self) + self.designerURLEdit = QLineEdit(font.info.openTypeNameDesignerURL, self) + + mainLayout.addWidget(designerURLLabel, 2, 0) + mainLayout.addWidget(self.designerURLEdit, 2, 1, 1, 5) + + manufacturerLabel = QLabel("Manufacturer:", self) + self.manufacturerEdit = QLineEdit(font.info.openTypeNameManufacturer, self) + + mainLayout.addWidget(manufacturerLabel, 3, 0) + mainLayout.addWidget(self.manufacturerEdit, 3, 1, 1, 5) + + manufacturerURLLabel = QLabel("Manufacturer URL:", self) + self.manufacturerURLEdit = QLineEdit(font.info.openTypeNameManufacturerURL, self) + + mainLayout.addWidget(manufacturerURLLabel, 4, 0) + mainLayout.addWidget(self.manufacturerURLEdit, 4, 1, 1, 5) + + copyrightLabel = QLabel("Copyright:", self) + self.copyrightEdit = QLineEdit(font.info.copyright, self) + + mainLayout.addWidget(copyrightLabel, 5, 0) + mainLayout.addWidget(self.copyrightEdit, 5, 1, 1, 5) + + # TODO: give visual feedback of input data validity using QLineEdit lose focus event + # http://snorf.net/blog/2014/08/09/using-qvalidator-in-pyqt4-to-validate-user-input/ + versionLabel = QLabel("Version:", self) + versionMajor = str(font.info.versionMajor) if font.info.versionMajor is not None else '' + self.versionMajorEdit = QLineEdit(versionMajor, self) + self.versionMajorEdit.setAlignment(Qt.AlignRight) + self.versionMajorEdit.setValidator(QIntValidator(self)) + versionDotLabel = QLabel(".", self) + versionMinor = str(font.info.versionMinor) if font.info.versionMinor is not None else '' + self.versionMinorEdit = QLineEdit(versionMinor, self) + self.versionMinorEdit.setValidator(QIntValidator(self)) + + mainLayout.addWidget(versionLabel, 6, 0) + mainLayout.addWidget(self.versionMajorEdit, 6, 1) + mainLayout.addWidget(versionDotLabel, 6, 2) + mainLayout.addWidget(self.versionMinorEdit, 6, 3) + + dateCreatedLabel = QLabel("Date created:", self) + dateTime = QDateTime() + #dateTime.fromString(font.info.openTypeHeadCreated, "yyyy/MM/dd hh:mm:ss") # XXX: why does this not work? + dateCreated = font.info.openTypeHeadCreated + if dateCreated: + parse = dateCreated.split(" ") + if len(parse) == 2: + date = parse[0].split("/") + date = QDate(*(int(val) for val in date)) + dateTime.setDate(date) + time = parse[1].split(":") + time = QTime(*(int(val) for val in time)) + dateTime.setTime(time) + if not dateCreated: + cur = QDateTime.currentDateTime() + dateTime.setDate(cur.date()) + dateTime.setTime(cur.time()) + self.dateCreatedEdit = QDateTimeEdit(dateTime, self) + + mainLayout.addWidget(dateCreatedLabel, 6, 4) + mainLayout.addWidget(self.dateCreatedEdit, 6, 5) + + licenseLabel = QLabel("License:", self) + self.licenseEdit = QLineEdit(font.info.openTypeNameLicense, self) + + mainLayout.addWidget(licenseLabel, 7, 0) + mainLayout.addWidget(self.licenseEdit, 7, 1, 1, 5) + + licenseURLLabel = QLabel("License URL:", self) + self.licenseURLEdit = QLineEdit(font.info.openTypeNameLicenseURL, self) + + mainLayout.addWidget(licenseURLLabel, 8, 0) + mainLayout.addWidget(self.licenseURLEdit, 8, 1, 1, 5) + + trademarkLabel = QLabel("Trademark:", self) + self.trademarkEdit = QLineEdit(font.info.trademark, self) + + mainLayout.addWidget(trademarkLabel, 9, 0) + mainLayout.addWidget(self.trademarkEdit, 9, 1, 1, 5) + + self.setLayout(mainLayout) + + def writeValues(self, font): + font.info.familyName = self.familyNameEdit.text() + font.info.styleName = self.styleNameEdit.text() + font.info.openTypeNameDesigner = self.designerEdit.text() + font.info.openTypeNameDesignerURL = self.designerURLEdit.text() + font.info.openTypeNameManufacturer = self.manufacturerEdit.text() + font.info.openTypeNameManufacturerURL = self.manufacturerURLEdit.text() + font.info.copyright = self.copyrightEdit.text() + versionMajor = self.versionMajorEdit.text() + font.info.versionMajor = int(versionMajor) if versionMajor else None + versionMinor = self.versionMinorEdit.text() + font.info.versionMinor = int(versionMinor) if versionMinor else None + font.info.openTypeHeadCreated = self.dateCreatedEdit.dateTime().toString("yyyy/MM/dd hh:mm:ss") + font.info.openTypeNameLicense = self.licenseEdit.text() + font.info.openTypeNameLicenseURL = self.licenseURLEdit.text() + font.info.trademark = self.trademarkEdit.text() + +class MetricsTab(QWidget): + def __init__(self, font, parent=None): + super(MetricsTab, self).__init__(parent) + mainLayout = QGridLayout() + + styleMapFamilyLabel = QLabel("Style map family name:", self) + self.styleMapFamilyEdit = QLineEdit(font.info.styleMapFamilyName, self) +# self.styleMapFamilyCBox = QCheckBox("Use default value", self) + + styleMapStyleLabel = QLabel("Style map style name:", self) + self.styleMapStyleDrop = QComboBox(self) +# items = ["None", "Regular", "Italic", "Bold", "Bold Italic"] + styleMapStyle = { + "None": 0, + "Regular": 1, + "Italic": 2, + "Bold": 3, + "Bold Italic": 4 + } + for name,index in styleMapStyle.items(): + self.styleMapStyleDrop.insertItem(index, name) + sn = font.info.styleMapStyleName + # TODO: index to set is statically known, should eventually get rid of dict overhead if any? + if sn == "regular": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Regular"]) + elif sn == "regular italic": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Italic"]) + elif sn == "bold": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Bold"]) + elif sn == "bold italic": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Bold Italic"]) + else: self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["None"]) +# self.styleMapStyleCBox = QCheckBox("Use default value") + + mainLayout.addWidget(styleMapFamilyLabel, 0, 0) + mainLayout.addWidget(self.styleMapFamilyEdit, 0, 1, 1, 3) + mainLayout.addWidget(styleMapStyleLabel, 0, 4) + mainLayout.addWidget(self.styleMapStyleDrop, 0, 5) + + ascenderLabel = QLabel("Ascender:", self) + ascender = str(font.info.ascender) if font.info.ascender is not None else '' + self.ascenderEdit = QLineEdit(ascender, self) + self.ascenderEdit.setValidator(QIntValidator(self)) + + descenderLabel = QLabel("Descender:", self) + descender = str(font.info.descender) if font.info.descender is not None else '' + self.descenderEdit = QLineEdit(descender, self) + self.descenderEdit.setValidator(QIntValidator(self)) + + unitsPerEmLabel = QLabel("Units per em:", self) + unitsPerEm = str(font.info.unitsPerEm) if font.info.unitsPerEm is not None else '' + self.unitsPerEmEdit = QLineEdit(unitsPerEm, self) + self.unitsPerEmEdit.setValidator(QIntValidator(self)) + + mainLayout.addWidget(ascenderLabel, 1, 0) + mainLayout.addWidget(self.ascenderEdit, 1, 1) + mainLayout.addWidget(descenderLabel, 1, 2) + mainLayout.addWidget(self.descenderEdit, 1, 3) + mainLayout.addWidget(unitsPerEmLabel, 1, 4) + mainLayout.addWidget(self.unitsPerEmEdit, 1, 5) + + xHeightLabel = QLabel("x-height:", self) + xHeight = str(font.info.xHeight) if font.info.xHeight is not None else '' + self.xHeightEdit = QLineEdit(xHeight, self) + self.xHeightEdit.setValidator(QIntValidator(self)) + + capHeightLabel = QLabel("Cap height:", self) + capHeight = str(font.info.capHeight) if font.info.capHeight is not None else '' + self.capHeightEdit = QLineEdit(capHeight, self) + self.capHeightEdit.setValidator(QIntValidator(self)) + + italicAngleLabel = QLabel("Italic angle:", self) + italicAngle = str(font.info.italicAngle) if font.info.italicAngle is not None else '' + self.italicAngleEdit = QLineEdit(italicAngle, self) + self.italicAngleEdit.setValidator(QDoubleValidator(self)) + + mainLayout.addWidget(xHeightLabel, 2, 0) + mainLayout.addWidget(self.xHeightEdit, 2, 1) + mainLayout.addWidget(capHeightLabel, 2, 2) + mainLayout.addWidget(self.capHeightEdit, 2, 3) + mainLayout.addWidget(italicAngleLabel, 2, 4) + mainLayout.addWidget(self.italicAngleEdit, 2, 5) + + self.setLayout(mainLayout) + + def writeValues(self, font): + font.info.styleMapFamilyName = self.styleMapFamilyEdit.text() + sn = self.styleMapStyleDrop.currentIndex() + if sn == 1: font.info.styleMapStyleName = "regular" + elif sn == 2: font.info.styleMapStyleName = "italic" + elif sn == 3: font.info.styleMapStyleName = "bold" + elif sn == 4: font.info.styleMapStyleName = "bold italic" + else: font.info.styleMapStyleName = None + ascender = self.ascenderEdit.text() + font.info.ascender = int(ascender) if ascender else None + descender = self.descenderEdit.text() + font.info.descender = int(descender) if descender else None + unitsPerEm = self.unitsPerEmEdit.text() + font.info.unitsPerEm = int(unitsPerEm) if unitsPerEm else None + xHeight = self.xHeightEdit.text() + font.info.xHeight = int(xHeight) if xHeight else None + capHeight = self.capHeightEdit.text() + font.info.capHeight = int(capHeight) if capHeight else None + italicAngle = self.italicAngleEdit.text() + font.info.italicAngle = float(italicAngle) if italicAngle else None |
