Added a simple get_input convenience function to utils.evmenu, for asking simple questions of the user.
This commit is contained in:
parent
7d3ed681ac
commit
61d591409a
1 changed files with 76 additions and 0 deletions
|
|
@ -575,6 +575,82 @@ class EvMenu(object):
|
||||||
del self._caller.ndb._menutree
|
del self._caller.ndb._menutree
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Simple input shortcuts
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class CmdGetInput(Command):
|
||||||
|
"""
|
||||||
|
Enter your data and press return.
|
||||||
|
"""
|
||||||
|
key = _CMD_NOMATCH
|
||||||
|
aliases = _CMD_NOINPUT
|
||||||
|
|
||||||
|
def func(self):
|
||||||
|
"This is called when user enters anything."
|
||||||
|
caller = self.caller
|
||||||
|
callback = caller.ndb._getinputcallback
|
||||||
|
prompt = caller.ndb._getinputprompt
|
||||||
|
result = self.raw_string
|
||||||
|
|
||||||
|
ok = not callback(caller, prompt, result)
|
||||||
|
if ok:
|
||||||
|
# only clear the state if the callback does not return
|
||||||
|
# anything
|
||||||
|
del caller.ndb._getinputcallback
|
||||||
|
del caller.ndb._getinputprompt
|
||||||
|
caller.cmdset.remove(InputCmdSet)
|
||||||
|
|
||||||
|
|
||||||
|
class InputCmdSet(CmdSet):
|
||||||
|
"""
|
||||||
|
This stores the input command
|
||||||
|
"""
|
||||||
|
key = "input_cmdset"
|
||||||
|
priority = 1
|
||||||
|
mergetype = "Replace"
|
||||||
|
no_objs = True
|
||||||
|
no_exits = True
|
||||||
|
no_channels = False
|
||||||
|
|
||||||
|
def at_cmdset_creation(self):
|
||||||
|
"called once at creation"
|
||||||
|
self.add(CmdGetInput())
|
||||||
|
|
||||||
|
|
||||||
|
def get_input(caller, prompt, callback):
|
||||||
|
"""
|
||||||
|
This is a helper function for easily request input from
|
||||||
|
the caller.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
caller (Player or Object): The entity being asked
|
||||||
|
the question. This should usually be an object
|
||||||
|
controlled by a user.
|
||||||
|
prompt (str): This text will be shown to the user,
|
||||||
|
in order to let them know their input is needed.
|
||||||
|
callback (callable): A function that will be called
|
||||||
|
when the user enters a reply. It must take three
|
||||||
|
arguments: the `caller`, the `prompt` text and the
|
||||||
|
`result` of the input given by the user. If the
|
||||||
|
callback doesn't return anything or return False,
|
||||||
|
the input prompt will be cleaned up and exited. If
|
||||||
|
returning True, the prompt will remain and continue to
|
||||||
|
accept input.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
RuntimeError: If the given callback is not callable.
|
||||||
|
|
||||||
|
"""
|
||||||
|
if not callable(callback):
|
||||||
|
raise RuntimeError("get_input: input callback is not callable.")
|
||||||
|
caller.ndb._getinputcallback = callback
|
||||||
|
caller.ndb._getinputprompt = prompt
|
||||||
|
caller.cmdset.add(InputCmdSet)
|
||||||
|
caller.msg(prompt)
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue