def __init__(self):
     self.glyphOrder = []
     self.orderFileName = ''
     self.formats = ['otf', 'ttf', 'pfa']
     self.format = 'otf'
     self.decompose = True
     self.overlap = True
     self.autohint = True
     self.release = True
     
     self.w = FloatingWindow((200,270), "Generate", minSize=(200,270),)
     self.w.getEncoding = Button((10, 10, 180, 20), 'Get .enc file', callback=self.getEncodingCallback)
     self.w.viewEncoding = Button((10, 75, 180, 20), 'View encoding', callback=self.viewEncodingCallback)
     self.w.line = HorizontalLine((12, 103, -12, 1))
     
     self.w.formatLabel    = TextBox((15, 117, 60, 20), "Format")
     self.w.formatChoice   = PopUpButton((70, 115, 80, 20), self.formats, callback=self.formatCallback)
     self.w.decomposeCheck = CheckBox((20, 141, -10, 20), "Decompose", callback=self.decomposeCallback, value=self.decompose)
     self.w.overlapCheck   = CheckBox((20, 161, -10, 20), "Remove Overlap", callback=self.overlapCallback, value=self.overlap)
     self.w.autohintCheck  = CheckBox((20, 181, -10, 20), "Autohint", callback=self.autohintCallback, value=self.autohint)
     self.w.releaseCheck   = CheckBox((20, 201, -10, 20), "Release Mode", callback=self.releaseCallback, value=self.release)
     self.w.generate = Button((10, 232, 180, 20), 'Generate Font', callback=self.generateCallback)
 
     self.w.decomposeCheck.enable(False)
     
     self.w.viewEncoding.enable(False)
     self.w.formatChoice.enable(False)
     self.w.overlapCheck.enable(False)
     self.w.autohintCheck.enable(False)
     self.w.releaseCheck.enable(False)
     self.w.generate.enable(False)
     
     self.d = Drawer((170, 400), self.w, preferredEdge="right")
     self.d.text = TextEditor((10, 10, -10, -10), readOnly=True)
     
     self.d.open()
     self.d.toggle()
     self.w.open()
class GenerateWithOrder(object):
    """A simple extension to generate font with order from a FL Encoding file """
    def __init__(self):
        self.glyphOrder = []
        self.orderFileName = ''
        self.formats = ['otf', 'ttf', 'pfa']
        self.format = 'otf'
        self.decompose = True
        self.overlap = True
        self.autohint = True
        self.release = True
        
        self.w = FloatingWindow((200,270), "Generate", minSize=(200,270),)
        self.w.getEncoding = Button((10, 10, 180, 20), 'Get .enc file', callback=self.getEncodingCallback)
        self.w.viewEncoding = Button((10, 75, 180, 20), 'View encoding', callback=self.viewEncodingCallback)
        self.w.line = HorizontalLine((12, 103, -12, 1))
        
        self.w.formatLabel    = TextBox((15, 117, 60, 20), "Format")
        self.w.formatChoice   = PopUpButton((70, 115, 80, 20), self.formats, callback=self.formatCallback)
        self.w.decomposeCheck = CheckBox((20, 141, -10, 20), "Decompose", callback=self.decomposeCallback, value=self.decompose)
        self.w.overlapCheck   = CheckBox((20, 161, -10, 20), "Remove Overlap", callback=self.overlapCallback, value=self.overlap)
        self.w.autohintCheck  = CheckBox((20, 181, -10, 20), "Autohint", callback=self.autohintCallback, value=self.autohint)
        self.w.releaseCheck   = CheckBox((20, 201, -10, 20), "Release Mode", callback=self.releaseCallback, value=self.release)
        self.w.generate = Button((10, 232, 180, 20), 'Generate Font', callback=self.generateCallback)
    
        self.w.decomposeCheck.enable(False)
        
        self.w.viewEncoding.enable(False)
        self.w.formatChoice.enable(False)
        self.w.overlapCheck.enable(False)
        self.w.autohintCheck.enable(False)
        self.w.releaseCheck.enable(False)
        self.w.generate.enable(False)
        
        self.d = Drawer((170, 400), self.w, preferredEdge="right")
        self.d.text = TextEditor((10, 10, -10, -10), readOnly=True)
        
        self.d.open()
        self.d.toggle()
        self.w.open()

    def process_enc(self, p):
        order = []
        
        f = open(p)
        for line in f:
            if line.startswith(('#', '%')):
                pass
            else:
                l = line.split()
                if len(l[0]) != 0:
                    for i in l:
                        if not i.startswith(('#', '%', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9')) and len(i) != 0:
                            order.append(i)
        f.close()
        
        self.glyphOrder = order

                
    def getEncodingCallback(self, sender):
        getFile(parentWindow=self.w, fileTypes=['enc', 'Enc'], resultCallback=self.processEncodingCallback)

    def viewEncodingCallback(self, sender):
        if not self.d.isOpen():
            t = "\n".join(self.glyphOrder)
            self.d.text.set(t)
        self.d.toggle()

    def processEncodingCallback(self, sender):
        if sender[0] is not None:
            fn = os.path.split(sender[0])[1]
            self.process_enc(sender[0])
            self.w.encodingTitle = TextBox((15, 34, 180, 17), "Encoding File:", alignment="left")
            self.w.encodingFileTitle = TextBox((15, 52, 180, 17), fn, alignment="left")
            
            self.w.viewEncoding.enable(True)
            self.w.formatChoice.enable(True)
            self.w.overlapCheck.enable(True)
            self.w.autohintCheck.enable(True)
            self.w.releaseCheck.enable(True)
            self.w.generate.enable(True)
            
    def formatCallback(self, sender):
        self.format = self.formats[sender.get()]
        if self.format == 'otf' or self.format == 'pfa':
            self.decompose = True
            self.w.decomposeCheck.enable(False)
            self.w.decomposeCheck.set(True)
        else:
            self.w.decomposeCheck.enable(True)

    def decomposeCallback(self, sender):
        if sender.get() == 0:
            self.decompose = False
        else:
            self.decompose = True

    def overlapCallback(self, sender):
        if sender.get() == 0:
            self.overlap = False
        else:
            self.overlap = True

    def autohintCallback(self, sender):
        if sender.get() == 0:
            self.autohint = False
        else:
            self.autohint = True

    def releaseCallback(self, sender):
        if sender.get() == 0:
            self.release = False
        else:
            self.release = True
            
    def generateCallback(self, sender):
        font = CurrentFont()
        d,f = os.path.split(font.path)
        f = f[:-3] + self.format
        putFile(messageText="Save Font", directory=d, fileName=f, parentWindow=self.w, resultCallback=self.processGenerateCallback)
        
    def processGenerateCallback(self, sender):
        path = sender
        font = CurrentFont()
        font.generate(path, self.format, decompose=self.decompose, autohint=self.autohint, releaseMode=self.release, glyphOrder=self.glyphOrder)