def getOneLine( clientId, submitCallback ): """ activates a text input widget for clientId, which returns one line of text submitCallback: func( clientId, text ) """ assert isInt( clientId ) assert isFunc( submitCallback) pushCmdHandler( clientId, CmdMap( lambda x, remaining: _submitText( x, submitCallback, remaining ) ) )
def __init__( self, menuItems, submitCallback, invalidSelectionCallback = "DEFAULT", alphabeticOptions = False ): """ creates a form menu widget, used to contain other menu widgets """ assert isList( menuItems ) assert isFunc( submitCallback ) assert isBool( alphabeticOptions ) # invalidSelectionCallback may be: # "DEFAULT" - an internal hack to bind to self.menu # None - meaning an invalid selection defers to a later cmdHandler # Func - a client-supplied invalidSelectionCallback if invalidSelectionCallback == "DEFAULT": invalidSelectionCallback = lambda clientId, remaining: defaultInvalidSelectionCallback( clientId, self.menu) if isDefined( invalidSelectionCallback ): assert isFunc( invalidSelectionCallback ) assert len(menuItems) > 0 self.menuItems = menuItems self.prompt = "{!{FB<options: " self.cmdMap = CmdMap( invalidSelectionCallback ) self.alphabeticOptions = alphabeticOptions menuIndex = 1 self.cmdMap.addCmd( "f", lambda clientId, remaining: submitCallback( clientId ) ) self.cmdMap.addCmd( "a", lambda clientId, remaining: submitCallback( clientId, abort=True ) ) for item in self.menuItems: if isString( item ): continue assert isTuple( item ) # item wasn't tuple or string assert len( item ) == 3 ( itemDesc, itemSelectedFunc, itemValueDescFunc ) = item assert isString( itemDesc ) assert isFunc( itemSelectedFunc) assert isFunc( itemValueDescFunc) itemLabel = menuIndex if self.alphabeticOptions: itemLabel = chr(96 + menuIndex ) self.cmdMap.addCmd( "%s" % itemLabel, lambda clientId, remaining: itemSelectedFunc( clientId ) ) self.prompt += "{FC%s{FB, " % itemLabel menuIndex += 1 self.prompt += "{FCa{FB, {FCf{FB> "
def __init__(self, modeName, modeCmd, modeDefaultCallback=None, modeAddDefaultCmds=True): assert isString(modeCmd) assert isString(modeName) if not modeDefaultCallback: modeDefaultCallback = lambda clientId, remaining: sendToClient( clientId, "Invalid %s mode command. ({!{FC!{@ to exit, {!{FCcommands{@ for help)\r\n" % self.modeName) self.modeCmd = modeCmd self.modeName = modeName self.modeMap = CmdMap(modeDefaultCallback) def enterMode(clientId, remaining): pushCmdHandler(clientId, self.modeMap) sendToClient( clientId, "\r\n{!{FG[{FYEntering %s mode{FG] {@({!{FC!{@ to exit)\r\n" % self.modeName) if modeAddDefaultCmds: sendToClient(clientId, self.modeMap.commands()) sendToClient(clientId, "\r\n") def exitMode(clientId, remaining): popCmdHandler(clientId) sendToClient(clientId, "{!{FG[{FYExiting %s Mode{FG]\r\n" % self.modeName) self.enterModeCallback = enterMode self.modeMap.addCmd("!", exitMode) if modeAddDefaultCmds: self.modeMap.addCmd("exit", exitMode) self.modeMap.addCmd( "commands", lambda clientId, remaining: sendToClient( clientId, self.modeMap.commands()))
def __init__(self, clientId, nameOfEdit, initialText, submitCallback, invalidSelectionCallback="DEFAULT"): """ creates a text editor widget and activates it for clientId, used to input arbitrarily formatted text submitCallback: func( clientId, text ) """ assert isString(nameOfEdit) assert isString(initialText) assert isFunc(submitCallback) # invalidSelectionCallback may be: # "DEFAULT" - an internal hack to bind to self.menu # None - meaning an invalid selection defers to a later cmdHandler # Func - a client-supplied invalidSelectionCallback if invalidSelectionCallback == "DEFAULT": invalidSelectionCallback = lambda clientId, remaining: _defaultInvalidSelectionCallback( clientId, self.menu) if isDefined(invalidSelectionCallback): assert isFunc(invalidSelectionCallback) self.text = initialText self.submitCallback = submitCallback self.menu = endl + "{!{FYEditing %s" % nameOfEdit + endl self.cmdMap = CmdMap(invalidSelectionCallback) _addDisplay(self) _addFinish(self) self.menu += endl _activate(clientId, self)
from pydispatch import dispatcher from mud.parser.cmdMap import CmdMap from cmds import pushCmdHandler from send import sendToClient import signals def invalidCmd( clientId, remaining ): sendToClient( clientId, "Invalid command. ({!{FCcommands{@ for help)\r\n") rootCmdMap = CmdMap( invalidCmd ) rootCmdMap.addCmd("commands", lambda clientId, remaining: sendToClient( clientId, rootCmdMap.commands() ) ) def addRootMap( clientId ): pushCmdHandler( clientId, rootCmdMap ) signals.connect( addRootMap, signals.CONNECTED )