def setupUI(self):
        self.centralwidget = QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_3 = QHBoxLayout(self.centralwidget)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.splitter_2 = QSplitter(self.centralwidget)
        self.splitter_2.setOrientation(Qt.Horizontal)
        self.splitter_2.setObjectName("splitter_2")
        self.splitter = QSplitter(self.splitter_2)
        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth())
        self.splitter.setSizePolicy(sizePolicy)
        self.splitter.setMinimumSize(QSize(150, 0))
        self.splitter.setMaximumSize(QSize(400, 16777215))
        self.splitter.setOrientation(Qt.Vertical)
        self.splitter.setObjectName("splitter")
        self.widget = QWidget(self.splitter)
        self.widget.setObjectName("widget")
        self.verticalLayout = QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QLabel(self.widget)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
        self.label.setSizePolicy(sizePolicy)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.lstMapFiles = QListWidget(self.widget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lstMapFiles.sizePolicy().hasHeightForWidth())
        self.lstMapFiles.setSizePolicy(sizePolicy)
        self.lstMapFiles.setObjectName("lstMapFiles")
        self.verticalLayout.addWidget(self.lstMapFiles)
        self.widget1 = QWidget(self.splitter)
        self.widget1.setObjectName("widget1")
        self.verticalLayout_2 = QVBoxLayout(self.widget1)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QLabel(self.widget1)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
        self.label_2.setSizePolicy(sizePolicy)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.lstFont = QListWidget(self.widget1)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lstFont.sizePolicy().hasHeightForWidth())
        self.lstFont.setSizePolicy(sizePolicy)
        self.lstFont.setObjectName("lstFont")
        self.verticalLayout_2.addWidget(self.lstFont)
        self.widget2 = QWidget(self.splitter_2)
        self.widget2.setObjectName("widget2")
        self.verticalLayout_6 = QVBoxLayout(self.widget2)
        self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_3 = QLabel(self.widget2)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout.addWidget(self.label_3)
        self.lineEdit = QLineEdit(self.widget2)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.btnGenerate = QPushButton(self.widget2)
        self.btnGenerate.setObjectName("btnGenerate")
        self.horizontalLayout.addWidget(self.btnGenerate)
        self.verticalLayout_6.addLayout(self.horizontalLayout)
        self.tabWidget = QTabWidget(self.widget2)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QWidget()
        self.tab.setObjectName("tab")
        self.verticalLayout_3 = QVBoxLayout(self.tab)
        self.verticalLayout_3.setObjectName("verticalLayout_3")

        self.tswSerif = QTypescriptWidget(self.tab)
        self.tswSerif.setObjectName("tswSerif")
        self.verticalLayout_3.addWidget(self.tswSerif)

        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QWidget()
        self.tab_2.setObjectName("tab_2")
        self.verticalLayout_4 = QVBoxLayout(self.tab_2)
        self.verticalLayout_4.setObjectName("verticalLayout_4")

        self.tswSans = QTypescriptWidget(self.tab_2)
        self.tswSans.setObjectName("tswSans")
        self.verticalLayout_4.addWidget(self.tswSans)

        self.tabWidget.addTab(self.tab_2, "")
        self.tab_3 = QWidget()
        self.tab_3.setObjectName("tab_3")
        self.horizontalLayout_2 = QHBoxLayout(self.tab_3)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")

        self.tswMono = QTypescriptWidget(self.tab_3)
        self.tswMono.setObjectName("tswMono")
        self.horizontalLayout_2.addWidget(self.tswMono)

        self.tabWidget.addTab(self.tab_3, "")
        self.tab_4 = QWidget()
        self.tab_4.setObjectName("tab_4")
        self.verticalLayout_5 = QVBoxLayout(self.tab_4)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.txtTexResult = QTextEdit(self.tab_4)
        self.txtTexResult.setObjectName("txtTexResult")
        self.verticalLayout_5.addWidget(self.txtTexResult)
        self.tabWidget.addTab(self.tab_4, "")
        self.verticalLayout_6.addWidget(self.tabWidget)
        self.horizontalLayout_3.addWidget(self.splitter_2)
        self.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        self.menu_File = QMenu(self.menubar)
        self.menu_File.setObjectName("menu_File")
        self.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.action_Load_Map_File = QAction(self)
        self.action_Load_Map_File.setObjectName("action_Load_Map_File")
        self.actionE_xit = QAction(self)
        self.actionE_xit.setObjectName("actionE_xit")
        self.menu_File.addAction(self.action_Load_Map_File)
        self.menu_File.addSeparator()
        self.menu_File.addAction(self.actionE_xit)
        self.menubar.addAction(self.menu_File.menuAction())
        self.tabWidget.setCurrentIndex(0)


        pass
class QTSMainWindow(QMainWindow):

    def __init__(self):
        super(QTSMainWindow, self).__init__()
        self.setupUI()
        self.retranslateUi()
        self.connect_signals_slot()

        self.map_files = {}
        self.current_map_fonts = {}


    def setupUI(self):
        self.centralwidget = QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_3 = QHBoxLayout(self.centralwidget)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.splitter_2 = QSplitter(self.centralwidget)
        self.splitter_2.setOrientation(Qt.Horizontal)
        self.splitter_2.setObjectName("splitter_2")
        self.splitter = QSplitter(self.splitter_2)
        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth())
        self.splitter.setSizePolicy(sizePolicy)
        self.splitter.setMinimumSize(QSize(150, 0))
        self.splitter.setMaximumSize(QSize(400, 16777215))
        self.splitter.setOrientation(Qt.Vertical)
        self.splitter.setObjectName("splitter")
        self.widget = QWidget(self.splitter)
        self.widget.setObjectName("widget")
        self.verticalLayout = QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QLabel(self.widget)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
        self.label.setSizePolicy(sizePolicy)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.lstMapFiles = QListWidget(self.widget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lstMapFiles.sizePolicy().hasHeightForWidth())
        self.lstMapFiles.setSizePolicy(sizePolicy)
        self.lstMapFiles.setObjectName("lstMapFiles")
        self.verticalLayout.addWidget(self.lstMapFiles)
        self.widget1 = QWidget(self.splitter)
        self.widget1.setObjectName("widget1")
        self.verticalLayout_2 = QVBoxLayout(self.widget1)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QLabel(self.widget1)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
        self.label_2.setSizePolicy(sizePolicy)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.lstFont = QListWidget(self.widget1)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lstFont.sizePolicy().hasHeightForWidth())
        self.lstFont.setSizePolicy(sizePolicy)
        self.lstFont.setObjectName("lstFont")
        self.verticalLayout_2.addWidget(self.lstFont)
        self.widget2 = QWidget(self.splitter_2)
        self.widget2.setObjectName("widget2")
        self.verticalLayout_6 = QVBoxLayout(self.widget2)
        self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_3 = QLabel(self.widget2)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout.addWidget(self.label_3)
        self.lineEdit = QLineEdit(self.widget2)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.btnGenerate = QPushButton(self.widget2)
        self.btnGenerate.setObjectName("btnGenerate")
        self.horizontalLayout.addWidget(self.btnGenerate)
        self.verticalLayout_6.addLayout(self.horizontalLayout)
        self.tabWidget = QTabWidget(self.widget2)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QWidget()
        self.tab.setObjectName("tab")
        self.verticalLayout_3 = QVBoxLayout(self.tab)
        self.verticalLayout_3.setObjectName("verticalLayout_3")

        self.tswSerif = QTypescriptWidget(self.tab)
        self.tswSerif.setObjectName("tswSerif")
        self.verticalLayout_3.addWidget(self.tswSerif)

        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QWidget()
        self.tab_2.setObjectName("tab_2")
        self.verticalLayout_4 = QVBoxLayout(self.tab_2)
        self.verticalLayout_4.setObjectName("verticalLayout_4")

        self.tswSans = QTypescriptWidget(self.tab_2)
        self.tswSans.setObjectName("tswSans")
        self.verticalLayout_4.addWidget(self.tswSans)

        self.tabWidget.addTab(self.tab_2, "")
        self.tab_3 = QWidget()
        self.tab_3.setObjectName("tab_3")
        self.horizontalLayout_2 = QHBoxLayout(self.tab_3)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")

        self.tswMono = QTypescriptWidget(self.tab_3)
        self.tswMono.setObjectName("tswMono")
        self.horizontalLayout_2.addWidget(self.tswMono)

        self.tabWidget.addTab(self.tab_3, "")
        self.tab_4 = QWidget()
        self.tab_4.setObjectName("tab_4")
        self.verticalLayout_5 = QVBoxLayout(self.tab_4)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.txtTexResult = QTextEdit(self.tab_4)
        self.txtTexResult.setObjectName("txtTexResult")
        self.verticalLayout_5.addWidget(self.txtTexResult)
        self.tabWidget.addTab(self.tab_4, "")
        self.verticalLayout_6.addWidget(self.tabWidget)
        self.horizontalLayout_3.addWidget(self.splitter_2)
        self.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        self.menu_File = QMenu(self.menubar)
        self.menu_File.setObjectName("menu_File")
        self.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.action_Load_Map_File = QAction(self)
        self.action_Load_Map_File.setObjectName("action_Load_Map_File")
        self.actionE_xit = QAction(self)
        self.actionE_xit.setObjectName("actionE_xit")
        self.menu_File.addAction(self.action_Load_Map_File)
        self.menu_File.addSeparator()
        self.menu_File.addAction(self.actionE_xit)
        self.menubar.addAction(self.menu_File.menuAction())
        self.tabWidget.setCurrentIndex(0)


        pass

    def retranslateUi(self):
        self.setWindowTitle(QApplication.translate("TypescriptMainWindow", "MainWindow", None, QApplication.UnicodeUTF8))
        self.label.setText(QApplication.translate("TypescriptMainWindow", "Map Files", None, QApplication.UnicodeUTF8))
        self.label_2.setText(QApplication.translate("TypescriptMainWindow", "Fonts", None, QApplication.UnicodeUTF8))
        self.label_3.setText(QApplication.translate("TypescriptMainWindow", "TextLabel", None, QApplication.UnicodeUTF8))
        self.btnGenerate.setText(QApplication.translate("TypescriptMainWindow", "Generate Typescript", None, QApplication.UnicodeUTF8))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QApplication.translate("TypescriptMainWindow", "Serif", None, QApplication.UnicodeUTF8))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QApplication.translate("TypescriptMainWindow", "Sans", None, QApplication.UnicodeUTF8))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), QApplication.translate("TypescriptMainWindow", "Mono", None, QApplication.UnicodeUTF8))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), QApplication.translate("TypescriptMainWindow", "TeX Result", None, QApplication.UnicodeUTF8))
        self.menu_File.setTitle(QApplication.translate("TypescriptMainWindow", "&File", None, QApplication.UnicodeUTF8))
        self.action_Load_Map_File.setText(QApplication.translate("TypescriptMainWindow", "&Load Map File", None, QApplication.UnicodeUTF8))
        self.actionE_xit.setText(QApplication.translate("TypescriptMainWindow", "E&xit", None, QApplication.UnicodeUTF8))

    def connect_signals_slot(self):
        self.action_Load_Map_File.triggered.connect(self.on_action_load_map_file)
        self.actionE_xit.triggered.connect(self.on_exit)
        self.lstMapFiles.currentItemChanged.connect(self.on_lst_map_files_current_item_changed)
        self.lstFont.currentItemChanged.connect(self.on_lst_font_current_item_changed)
        self.tswSans.buttonPressed.connect(self.on_typescripteditor_pressed)
        self.tswSerif.buttonPressed.connect(self.on_typescripteditor_pressed)
        self.tswMono.buttonPressed.connect(self.on_typescripteditor_pressed)
        self.btnGenerate.clicked.connect(self.on_generate_typescript)
        pass

    def on_generate_typescript(self):

        txt = ""
        for h in range(0, self.lstMapFiles.count()):
            i = self.lstMapFiles.item(h)
            txt += "\\loadmapfile[%s]\n" % (i.text())
        txt += "\n\n"


        ts = TSFramework.Structures.Typescript()
        ts.typescript_name = self.lineEdit.text()
        if (ts.typescript_name == "" ):
            ts.typescript_name = "ff-pytype"
        ts.mono = self.tswMono.typescript()
        ts.serif = self.tswSerif.typescript()
        ts.sans = self.tswSans.typescript()

        txt += "\n\n"+ts.typescript()+"\n\n" + "\\usetypescript[%s]\n\\setupbodyfont[%s,rm,10pt]\n\n" % (ts.typescript_name,ts.typescript_name)
        txt += TEX_TEMPLATE
        txt += "\n\\SpecimenFamily{%s}{rm}{%s}\n" % (ts.typescript_name,self.tswSerif.typescript().symbolic_name)
        txt += "\n\\SpecimenFamily{%s}{ss}{%s}\n" % (ts.typescript_name,self.tswSans.typescript().symbolic_name)
        txt += "\n\\SpecimenFamily{%s}{tt}{%s}\n" % (ts.typescript_name,self.tswMono.typescript().symbolic_name)
        txt += "\n\\DemoBlockFamily{rm}\n"
        txt += "\n\\DemoBlockFamily{ss}\n"
        txt += "\n\\DemoBlockFamily{tt}\n"
        txt += "\n\\stoptext\n"
        self.txtTexResult.setPlainText(txt)
        pass

    def on_typescripteditor_pressed(self,tswWidget,tswFontItem, tswEdit):
        current_item = self.lstFont.currentItem()
        print tswFontItem
        if (current_item is not None):
            txt = self.lstFont.currentItem().text()
            map_line = self.current_map_fonts[txt]
            if tswFontItem == "TF":
                tswWidget.TF = map_line
            elif tswFontItem == "BF":
                tswWidget.BF = map_line
            elif tswFontItem == "BI":
                tswWidget.BI = map_line
            elif tswFontItem == "BS":
                tswWidget.BS = map_line
            elif tswFontItem == "IT":
                tswWidget.IT = map_line
            elif tswFontItem == "SC":
                tswWidget.SC = map_line
            elif tswFontItem == "SL":
                tswWidget.SL = map_line
            tswFontItem = map_line
            tswEdit.setText(map_line.virtual_font_file)
        pass

    def on_lst_font_current_item_changed(self,current,previous):
        print "current font item changed", current.text()

        pass

    def on_lst_map_files_current_item_changed(self,current,previous):
        print "current map item changed"
        txt_file = current.text()
        map_lines = self.map_files[txt_file].map_lines
        self.current_map_fonts.clear()
        for map_line in map_lines:
            self.current_map_fonts[map_line.symbolic_name] = map_line
        self.lstFont.clear()
        my_keys = self.current_map_fonts.keys()
        my_keys.sort()
        for f in my_keys:
            self.lstFont.addItem(str(f))
        pass

    def on_action_load_map_file(self):
        print "load map file"
        try:
            (filename, mask) = QFileDialog.getOpenFileName(self,
                                               "Load Map File",
                                                "C:\\tex\\share\\texmf-local\\fonts\\map\\pdftex\\context",
                                               "TeX font map files (*.map)")
            if filename is not None or filename != "":
                print "Load map  from ", filename
                map_file = TSFramework.Structures.TTFMapFile(filename)
                print map_file
                if not map_file.map_file in self.map_files:
                    self.map_files[map_file.map_file] = map_file
                    self.lstMapFiles.addItem(map_file.map_file)
                    self.lstFont.clear()
        except Exception as exc:
            print "an error has occurred: ", exc
            pass

    def on_exit(self):
        print "exit"
        exit()
        pass