Example #1
0
    def __init__(self):
        # set defaults
        self.wordCount = 20
        self.minLength = 3
        self.maxLength = 10
        self.case = 0
        self.requiredLetters = ['a', 'o']
        self.bannedLetters = ['-']
        self.requiredGroups = [[], [], []]
        self.limitToCharset = False
        self.banRepetitions = False
        self.randomize = True
        self.outputWords = []
        
        fileName      = 'ukacd'
        contentLimit  = '*****' # If word list file contains a header (e.g. copyright notice), start looking for content after this delimiter
        
        bundle = ExtensionBundle("word-o-mat")
        fo = open(bundle.getResourceFilePath(fileName, ext="txt"))
        lines = fo.read()
        fo.close()
        self.allWords = lines.splitlines()
        try:
            contentStart = self.allWords.index(contentLimit) + 1
            self.allWords = self.allWords[contentStart:]
        except ValueError:
            pass
        
        # preset character groups
        groupPresets = [
            ["Ascenders", ["b", "f", "h", "k", "l"]], 
            ["Descenders", ["g", "j", "p", "q", "y"]], 
            ["Ball-and-Stick", ["b", "d", "p", "q"]], 
            ["Arches", ["n", "m", "h", "u"]], 
            ["Diagonals", ["v", "w", "x", "y"]]]
            
        addObserver(self, "fontOpened", "fontDidOpen")
        addObserver(self, "fontClosed", "fontWillClose")
        
        # dialog window
        self.w = FloatingWindow((325, 518), 'word-o-mat')
        interval = 28
        padding = 10
        boxPadding = 3
        y = 10
        
        self.w.basicsBox = Box((padding, y, -padding, interval*3.85))
        self.w.basicsBox.wcText = TextBox((boxPadding, 5, 170, 22), 'Make this many words:') 
        self.w.basicsBox.lenTextOne = TextBox((boxPadding, 5 + interval * 1.25, 90, 22), 'Word length:') 
        self.w.basicsBox.lenTextTwo = TextBox((141, 5 + interval * 1.25, 20, 22), 'to') 
        self.w.basicsBox.lenTextThree = TextBox((212, 5 + interval * 1.25, 80, 22), 'characters') 
        self.w.basicsBox.wordCount = EditText((160, 3, 40, 22), text=self.wordCount, placeholder=str(20))
        self.w.basicsBox.minLength = EditText((95, 3 + interval * 1.25, 40, 22), text=self.minLength, placeholder=str(3))
        self.w.basicsBox.maxLength = EditText((165, 3 + interval * 1.25, 40, 22), text=self.maxLength, placeholder=str(10))  
        self.w.basicsBox.caseLabel = TextBox((boxPadding, 3 + interval * 2.5, 45, 22), 'Case:') 
        self.w.basicsBox.case = PopUpButton((50, 2 + interval * 2.5, -10, 20), ["leave as is", "all lowercase", "Capitalize", "ALL CAPS"])
        y += interval*4.2

        self.w.reqBox = Box((padding, y, -padding, interval*8.9))
        labelY = [5, 5 + interval*2.25, 5 + interval*6.375]
        labelText = ["Required characters:", "Groups (require at least one in each group):", "Excluded characters:"]
        for i in range(3):
            setattr(self.w.reqBox, "reqLabel%s" % i, TextBox((boxPadding, labelY[i], -boxPadding, 22), labelText[i]))
        self.w.reqBox.mustLettersBox = EditText((boxPadding, 5 + interval*.8, -boxPadding, 22), text=", ".join(self.requiredLetters))
        self.w.reqBox.notLettersBox = EditText((boxPadding, 5 + interval * 7.175, -boxPadding, 22), text=", ".join(self.bannedLetters))
        
        y2 = interval*2.25
        attrNameTemplate = "group%sbox"
        for i in range(3):
            j = i+1
            y2 += interval
            optionsList = ["%s: %s" % (key, ", ".join(value)) for key, value in groupPresets]
            if len(self.requiredGroups[i]) > 0:
                optionsList.insert(0, "Current: " + ", ".join(self.requiredGroups[i]))
            attrName = attrNameTemplate % j
            setattr(self.w.reqBox, attrName, ComboBox((boxPadding, y2-3, -boxPadding, 22), optionsList)) 
        y += interval*9.25
          
        self.w.optionsBox = Box((padding, y, -padding, interval*3.125))
        chkNameTemplate = "checkbox%s"
        chkLabel = ["Limit to characters available in current font", "No repeating characters", "Randomize output"]
        chkValues = [self.limitToCharset, self.banRepetitions, self.randomize]
        for i in range(3):
            y3 = i*interval*.875
            attrName = chkNameTemplate % i
            setattr(self.w.optionsBox, attrName, CheckBox((boxPadding, y3+3, -boxPadding, 22), chkLabel[i], value=chkValues[i])) 
        self.w.optionsBox.checkbox0.enable(CurrentFont()) 
        y += interval*3.5
        self.w.submit = Button((10,y,-10, 22), 'words please!', callback=self.makeWords)
        self.w.bind("close", self.windowClose)
        self.w.open()