def __init__(self, menuPairs, finishedCallback, invalidSelectionCallback=None, alphabeticOptions=False): """ menuPairs: [], each element is string or (string, any type) finishedCallback: f( clientId, selectedValue ) invalidSelectionCallback: f( clientId, remaining ) """ isList(menuPairs) isFunc(finishedCallback) if invalidSelectionCallback: isFunc(invalidSelectionCallback) else: invalidSelectionCallback = lambda clientId, remaining: defaultInvalidSelectionCallback( clientId, self.menuStr) self.menuStr = "{!" self.menuMap = CmdMap(invalidSelectionCallback) menuIndex = 1 def finishMenuWithValue(value): return lambda clientId, remaining: finishMenu( clientId, finishedCallback, value) for item in menuPairs: if type(item) == str: self.menuStr += item + "\r\n" continue (menuItemDescription, menuItemValue) = item optionLabel = "" if alphabeticOptions: optionLabel = chr(96 + menuIndex) else: optionLabel = menuIndex isStr(menuItemDescription) self.menuStr = self.menuStr + " {FC%s{FG) - {FU%s\r\n" % ( optionLabel, menuItemDescription) self.menuMap.addCmd("%s" % optionLabel, finishMenuWithValue(menuItemValue)) menuIndex += 1 self.menuStr += "{@"
def columnsFromStrings( strs, widths, columnSeparators ): columns = [] for s in strs: isStr(s) columns.append([]) width = widths.pop(0) while( color.lenNoCodes(s) > 0 ): newlineIndex = s.find("\r\n") if newlineIndex < 0: addStringToColumn( columns, width, s, columnSeparators ) break addStringToColumn( columns, width, s[:newlineIndex ], columnSeparators ) colorState = color.getColorState(s[:newlineIndex]) s = str(colorState) + s[newlineIndex + 2:] return columns
def __init__( self, menuPairs, finishedCallback, invalidSelectionCallback = None, alphabeticOptions = False ): """ menuPairs: [], each element is string or (string, any type) finishedCallback: f( clientId, selectedValue ) invalidSelectionCallback: f( clientId, remaining ) """ isList( menuPairs) isFunc( finishedCallback) if invalidSelectionCallback: isFunc( invalidSelectionCallback ) else: invalidSelectionCallback = lambda clientId, remaining: defaultInvalidSelectionCallback( clientId, self.menuStr ) self.menuStr = "{!" self.menuMap = CmdMap( invalidSelectionCallback ) menuIndex = 1 def finishMenuWithValue( value ): return lambda clientId, remaining: finishMenu( clientId, finishedCallback, value ) for item in menuPairs: if type(item) == str: self.menuStr += item + "\r\n" continue ( menuItemDescription, menuItemValue ) = item optionLabel = "" if alphabeticOptions: optionLabel = chr(96 + menuIndex) else: optionLabel = menuIndex isStr( menuItemDescription) self.menuStr = self.menuStr + " {FC%s{FG) - {FU%s\r\n" % ( optionLabel, menuItemDescription ) self.menuMap.addCmd( "%s" % optionLabel, finishMenuWithValue( menuItemValue ) ) menuIndex += 1 self.menuStr += "{@"
def columnsFromStrings(strs, widths, columnSeparators): columns = [] for s in strs: isStr(s) columns.append([]) width = widths.pop(0) while (color.lenNoCodes(s) > 0): newlineIndex = s.find("\r\n") if newlineIndex < 0: addStringToColumn(columns, width, s, columnSeparators) break addStringToColumn(columns, width, s[:newlineIndex], columnSeparators) colorState = color.getColorState(s[:newlineIndex]) s = str(colorState) + s[newlineIndex + 2:] return columns