Esempio n. 1
0
class NameTabWidgetTest(unittest.TestCase):

    app = Application(sys.argv)

    def __init__(self, methodName):
        unittest.TestCase.__init__(self, methodName)

    def setUp(self):
        self.infoTab = NameTabWidget(None)

    def test_addNamedTab(self):
        tab1 = QWidget(None)
        tab1.name = "Test1"
        self.infoTab.addNamedTab(tab1)
        tab2 = self.infoTab.widget(0)
        self.assertEqual(tab1, tab2)
        self.assertEqual(tab1.name, tab2.name)

        tab2 = QWidget(None)
        tab2.name = "Test2"
        self.infoTab.addNamedTab(tab2)
        tab2 = self.infoTab.widget(0)
        self.assertEqual(tab1, tab2)
        self.assertEqual(tab1.name, tab2.name)
Esempio n. 2
0
def main():
    global app
    # register representation factories
    baseRepresentationFactories.registerAllFactories()
    representationFactories.registerAllFactories()
    if hasattr(Qt, "AA_EnableHighDpiScaling"):
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    # initialize the app
    app = Application(sys.argv)
    app.setOrganizationName("TruFont")
    app.setOrganizationDomain("trufont.github.io")
    app.setApplicationName("TruFont")
    app.setApplicationVersion(__version__)
    app.setWindowIcon(QIcon(":app.png"))
    app.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
    appFont = platformSpecific.UIFontOverride()
    if appFont is not None:
        app.setFont(appFont)
    app.setStyleSheet(platformSpecific.appStyleSheet())

    # Install stream redirection
    app.outputWindow = OutputWindow()
    # Exception handling
    sys.excepthook = errorReports.exceptionCallback

    # Qt's translation for itself. May not be installed.
    qtTranslator = QTranslator()
    qtTranslator.load(
        "qt_" + QLocale.system().name(),
        QLibraryInfo.location(QLibraryInfo.TranslationsPath),
    )
    app.installTranslator(qtTranslator)

    appTranslator = QTranslator()
    appTranslator.load(
        "trufont_" + QLocale.system().name(),
        os.path.dirname(os.path.realpath(__file__)) + "/resources",
    )
    app.installTranslator(appTranslator)

    # parse options and open fonts
    parser = QCommandLineParser()
    parser.setApplicationDescription(
        QApplication.translate("Command-line parser", "The TruFont font editor.")
    )
    parser.addHelpOption()
    parser.addVersionOption()
    parser.addPositionalArgument(
        QApplication.translate("Command-line parser", "files"),
        QApplication.translate("Command-line parser", "The UFO files to open."),
    )
    parser.process(app)
    # load menu
    if platformSpecific.useGlobalMenuBar():
        app.fetchMenuBar()
        app.setQuitOnLastWindowClosed(False)
    # bootstrap extensions
    folder = app.getExtensionsDirectory()
    for file in os.listdir(folder):
        if not file.rstrip("\\/ ").endswith(".tfExt"):
            continue
        path = os.path.join(folder, file)
        try:
            extension = TExtension(path)
            if extension.launchAtStartup:
                extension.run()
        except Exception as e:
            msg = QApplication.translate(
                "Extensions", f"The extension at {path} could not be run."
            )
            errorReports.showWarningException(e, msg)
            continue
        app.registerExtension(extension)
    # process files
    args = parser.positionalArguments()
    if not args:
        # maybe load recent file
        loadRecentFile = settings.loadRecentFile()
        if loadRecentFile:
            recentFiles = settings.recentFiles()
            if len(recentFiles) and os.path.exists(recentFiles[0]):
                app.openFile(recentFiles[0])
    else:
        for fontPath in args:
            app.openFile(fontPath)
    # if we did not open a font, spawn new font or go headless
    if not app.allFonts():
        if platformSpecific.shouldSpawnDocument():
            app.newFile()
        else:
            # HACK: on OSX we may want to trigger native QMenuBar display
            # without opening any window. Since Qt infers new menu bar on
            # focus change, fire the signal.
            app.focusWindowChanged.emit(None)
    sys.exit(app.exec_())
Esempio n. 3
0
class TabTestCase(unittest.TestCase):

    app = Application(sys.argv)

    def __init__(self, methodName):
        unittest.TestCase.__init__(self, methodName)

    def setUp(self):
        self.font = TFont.new()

        self.mainWindow = FontWindow(self.font)
        self.mainWindow.fontInfo()
        self.fontInfo = self.mainWindow._infoWindow
        self.generalTab = self.fontInfo.tabWidget.widget(0)
        self.legalTab = self.fontInfo.tabWidget.widget(1)
        self.openTypeTab = self.fontInfo.tabWidget.widget(2)
        self.postScriptTab = self.fontInfo.tabWidget.widget(3)
        self.fontInfo.show()

    def tearDown(self):
        self.fontInfo.close()

    def checkString(self, attrName):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        self.assertIsNone(getattr(self.font.info, attrName))
        self.assertEqual(attrEdit.text(), "")

        attrEdit.setText("Typeface " + attrName)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName),
                         "Typeface " + attrName)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))

    def checkMultilineString(self, attrName):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        self.assertIsNone(getattr(self.font.info, attrName))
        self.assertEqual(attrEdit.toPlainText(), "")

        attrEdit.setPlainText("Typeface \n" + attrName)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName),
                         "Typeface \n" + attrName)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))

    def checkInteger(self, attrName, value=0):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        if value == 0:
            self.assertIsNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), 0)
        else:
            self.assertIsNotNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), value)

        attrEdit.setValue(123)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName), 123)

        attrEdit.setValue(0)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName), 0)

        attrEdit.setValue(-123)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName), -123)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))

        self.assertEqual(attrEdit.minimum(), -2147483648)
        self.assertEqual(attrEdit.maximum(), 2147483647)

    def checkPositiveInteger(self, attrName, value=0):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        if value == 0:
            self.assertIsNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), 0)
        else:
            self.assertIsNotNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), value)

        attrEdit.setValue(123)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName), 123)

        attrEdit.setValue(0)
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName), 0)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))

        self.assertEqual(attrEdit.minimum(), 0)
        self.assertEqual(attrEdit.maximum(), 2147483647)

    def checkIntegerFloat(self, attrName, value=0):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        if value == 0:
            self.assertIsNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), 0)
        else:
            self.assertIsNotNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), value)

        attrEdit.setValue(123)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 123)

        attrEdit.setValue(123.000)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 123)

        attrEdit.setValue(123.456)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, float))
        self.assertEqual(attr, 123.456)

        attrEdit.setValue(0)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 0)

        attrEdit.setValue(0.0)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 0)

        attrEdit.setValue(-123)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, -123)

        attrEdit.setValue(-123.000)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, -123)

        attrEdit.setValue(-123.456)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, float))
        self.assertEqual(attr, -123.456)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))

        self.assertEqual(attrEdit.minimum(), -2147483648)
        self.assertEqual(attrEdit.maximum(), 2147483647)

    def checkPositiveIntegerFloat(self, attrName, value=0):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        if value == 0:
            self.assertIsNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), 0)
        else:
            self.assertIsNotNone(getattr(self.font.info, attrName))
            self.assertEqual(attrEdit.value(), value)

        attrEdit.setValue(123)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 123)

        attrEdit.setValue(123.000)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 123)

        attrEdit.setValue(123.456)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, float))
        self.assertEqual(attr, 123.456)

        attrEdit.setValue(0)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 0)

        attrEdit.setValue(0.0)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertTrue(isinstance(attr, int))
        self.assertEqual(attr, 0)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))

        self.assertEqual(attrEdit.minimum(), 0)
        self.assertEqual(attrEdit.maximum(), 2147483647)

    # XXX: Implement maxLen, evenLen?
    def checkIntegerFloatList(self, attrName, maxLen=None, evenLen=None):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        attrEdit.setText("")
        self.fontInfo.accept()
        self.assertEqual(getattr(self.font.info, attrName), [])

        attrEdit.setText("123 456 789 0")
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertEqual(attr, [123, 456, 789, 0])

        attrEdit.setText("123,0 456,1 789.11111112 789,11111113 790 791")
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        self.assertEqual(attr,
                         [123, 456.1, 789.11111112, 789.11111113, 790, 791])

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        attr = getattr(self.font.info, attrName)
        # These are apparently always [], never None.
        if attrName in ["postscriptBlueValues", "postscriptOtherBlues",
                        "postscriptFamilyBlues",
                        "postscriptFamilyOtherBlues",
                        "postscriptStemSnapH", "postscriptStemSnapV"]:
            self.assertEqual(attr, [])
        else:
            self.assertIsNone(attr)

    def checkBoolean(self, attrName):
        attrEdit = getattr(self.tab, attrName + "Edit")
        attrEdit.setEnabled(True)

        # Most checkboxes are governed by a parent checkbox for the field (see
        # Postscript tab for examples), meaning that if the field is unchecked,
        # it is assumed that the user doesn't want to set an explicit value. If
        # the field is checked, the actual checkbox can be either checked or
        # not.
        self.assertFalse(attrEdit.isTristate())

        attrEdit.setCheckState(Qt.Checked)
        self.fontInfo.accept()
        value = attrEdit.checkState()
        self.assertEqual(value, Qt.Checked)
        self.assertEqual(getattr(self.font.info, attrName), True)

        attrEdit.setCheckState(Qt.Unchecked)
        self.fontInfo.accept()
        value = attrEdit.checkState()
        self.assertEqual(value, Qt.Unchecked)
        self.assertEqual(getattr(self.font.info, attrName), False)

        attrEdit.setEnabled(False)
        self.fontInfo.accept()
        self.assertIsNone(getattr(self.font.info, attrName))
Esempio n. 4
0
def main():
    global app
    # register representation factories
    baseRepresentationFactories.registerAllFactories()
    representationFactories.registerAllFactories()
    if hasattr(Qt, "AA_EnableHighDpiScaling"):
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    # initialize the app
    app = Application(sys.argv)
    app.setOrganizationName("TruFont")
    app.setOrganizationDomain("trufont.github.io")
    app.setApplicationName("TruFont")
    app.setApplicationVersion(__version__)
    app.setWindowIcon(QIcon(":app.png"))
    app.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
    app.setStyleSheet(platformSpecific.appStyleSheet())

    # Install stream redirection
    app.outputWindow = OutputWindow()
    # Exception handling
    sys.excepthook = errorReports.exceptionCallback

    # Qt's translation for itself. May not be installed.
    qtTranslator = QTranslator()
    qtTranslator.load("qt_" + QLocale.system().name(),
                      QLibraryInfo.location(QLibraryInfo.TranslationsPath))
    app.installTranslator(qtTranslator)

    appTranslator = QTranslator()
    appTranslator.load("trufont_" + QLocale.system().name(),
                       os.path.dirname(os.path.realpath(__file__)) +
                       "/resources")
    app.installTranslator(appTranslator)

    # parse options and open fonts
    parser = QCommandLineParser()
    parser.setApplicationDescription(QApplication.translate(
        "Command-line parser", "The TruFont font editor."))
    parser.addHelpOption()
    parser.addVersionOption()
    parser.addPositionalArgument(QApplication.translate(
        "Command-line parser", "files"), QApplication.translate(
        "Command-line parser", "The UFO files to open."))
    parser.process(app)
    # bootstrap extensions
    folder = app.getExtensionsDirectory()
    for file in os.listdir(folder):
        if not file.rstrip("\\/ ").endswith(".tfExt"):
            continue
        path = os.path.join(folder, file)
        try:
            extension = TExtension(path)
            if extension.launchAtStartup:
                extension.run()
        except Exception as e:
            msg = QApplication.translate(
                "Extensions", "The extension at {0} could not be run.".format(
                    path))
            errorReports.showWarningException(e, msg)
            continue
        app.registerExtension(extension)
    # load menu
    if platformSpecific.useGlobalMenuBar():
        menuBar = app.fetchMenuBar()  # noqa
        app.setQuitOnLastWindowClosed(False)
    # process files
    args = parser.positionalArguments()
    if not args:
        fontPath = None
        # maybe load recent file
        settings = QSettings()
        loadRecentFile = settings.value("misc/loadRecentFile", False, bool)
        if loadRecentFile:
            recentFiles = settings.value("core/recentFiles", [], type=str)
            if len(recentFiles) and os.path.exists(recentFiles[0]):
                fontPath = recentFiles[0]
                app.openFile(fontPath)
        # otherwise, create a new file
        if fontPath is None:
            app.newFile()
    else:
        for fontPath in args:
            app.openFile(fontPath)
    sys.exit(app.exec_())
Esempio n. 5
0
def main():
    global app
    # register representation factories
    baseRepresentationFactories.registerAllFactories()
    representationFactories.registerAllFactories()
    # initialize the app
    app = Application(sys.argv)
    app.setOrganizationName("TruFont")
    app.setOrganizationDomain("trufont.github.io")
    app.setApplicationName("TruFont")
    app.setApplicationVersion(__version__)
    app.setWindowIcon(QIcon(":app.png"))
    app.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    # Install stream redirection
    app.outputWindow = OutputWindow()
    # Exception handling
    sys.excepthook = exceptionCallback

    # Qt's translation for itself. May not be installed.
    qtTranslator = QTranslator()
    qtTranslator.load("qt_" + QLocale.system().name(),
                      QLibraryInfo.location(QLibraryInfo.TranslationsPath))
    app.installTranslator(qtTranslator)

    appTranslator = QTranslator()
    appTranslator.load("trufont_" + QLocale.system().name(),
                       os.path.dirname(os.path.realpath(__file__)) +
                       "/resources")
    app.installTranslator(appTranslator)

    # parse options and open fonts
    parser = QCommandLineParser()
    parser.setApplicationDescription(QApplication.translate(
        "Command-line parser", "The TruFont font editor."))
    parser.addHelpOption()
    parser.addVersionOption()
    parser.addPositionalArgument(QApplication.translate(
        "Command-line parser", "files"), QApplication.translate(
        "Command-line parser", "The UFO files to open."))
    parser.process(app)
    args = parser.positionalArguments()
    if not args:
        fontPath = None
        # maybe load recent file
        settings = QSettings()
        loadRecentFile = settings.value("misc/loadRecentFile", False, bool)
        if loadRecentFile:
            recentFiles = settings.value("core/recentFiles", [], type=str)
            if len(recentFiles) and os.path.exists(recentFiles[0]):
                fontPath = recentFiles[0]
                app.openFile(fontPath)
        # otherwise, create a new file
        if fontPath is None:
            app.newFile()
    else:
        for fontPath in args:
            app.openFile(fontPath)
    sys.exit(app.exec_())