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()