Make cmd_on_quit support function callbacks as well.
This commit is contained in:
parent
848f329513
commit
bec6cb438f
1 changed files with 13 additions and 9 deletions
|
|
@ -264,11 +264,13 @@ class EvMenu(object):
|
||||||
allow_quit (bool, optional): Allow user to use quit or
|
allow_quit (bool, optional): Allow user to use quit or
|
||||||
exit to leave the menu at any point. Recommended during
|
exit to leave the menu at any point. Recommended during
|
||||||
development!
|
development!
|
||||||
cmd_on_quit (str or None, optional): When exiting the menu
|
cmd_on_quit (callback, str or None, optional): When exiting the menu
|
||||||
(either by reaching a node with no options or by using the
|
(either by reaching a node with no options or by using the
|
||||||
in-built quit command (activated with `allow_quit`), this
|
in-built quit command (activated with `allow_quit`), this
|
||||||
command string will be executed. Set to None to not call
|
callback function or command string will be executed.
|
||||||
any command.
|
The callback function takes two parameters, the caller then the
|
||||||
|
EvMenu object. This is called after cleanup is complete.
|
||||||
|
Set to None to not call any command.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
EvMenuError: If the start/end node is not found in menu tree.
|
EvMenuError: If the start/end node is not found in menu tree.
|
||||||
|
|
@ -283,7 +285,12 @@ class EvMenu(object):
|
||||||
|
|
||||||
# variables made available to the command
|
# variables made available to the command
|
||||||
self.allow_quit = allow_quit
|
self.allow_quit = allow_quit
|
||||||
|
if isinstance(cmd_on_quit, str):
|
||||||
|
self.cmd_on_quit = lambda caller, menu: caller.execute_cmd(cmd_on_quit)
|
||||||
|
elif callable(cmd_on_quit):
|
||||||
self.cmd_on_quit = cmd_on_quit
|
self.cmd_on_quit = cmd_on_quit
|
||||||
|
else:
|
||||||
|
self.cmd_on_quit = None
|
||||||
self.default = None
|
self.default = None
|
||||||
self.nodetext = None
|
self.nodetext = None
|
||||||
self.helptext = None
|
self.helptext = None
|
||||||
|
|
@ -459,7 +466,6 @@ class EvMenu(object):
|
||||||
cmd = raw_string.strip().lower()
|
cmd = raw_string.strip().lower()
|
||||||
options = self.options
|
options = self.options
|
||||||
allow_quit = self.allow_quit
|
allow_quit = self.allow_quit
|
||||||
cmd_on_quit = self.cmd_on_quit
|
|
||||||
default = self.default
|
default = self.default
|
||||||
|
|
||||||
if cmd in options:
|
if cmd in options:
|
||||||
|
|
@ -476,8 +482,6 @@ class EvMenu(object):
|
||||||
caller.msg(self.helptext)
|
caller.msg(self.helptext)
|
||||||
elif allow_quit and cmd in ("quit", "q", "exit"):
|
elif allow_quit and cmd in ("quit", "q", "exit"):
|
||||||
self.close_menu()
|
self.close_menu()
|
||||||
if cmd_on_quit is not None:
|
|
||||||
caller.execute_cmd(cmd_on_quit)
|
|
||||||
elif default:
|
elif default:
|
||||||
goto, callback = default
|
goto, callback = default
|
||||||
if callback:
|
if callback:
|
||||||
|
|
@ -490,8 +494,6 @@ class EvMenu(object):
|
||||||
if not (options or default):
|
if not (options or default):
|
||||||
# no options - we are at the end of the menu.
|
# no options - we are at the end of the menu.
|
||||||
self.close_menu()
|
self.close_menu()
|
||||||
if cmd_on_quit is not None:
|
|
||||||
caller.execute_cmd(cmd_on_quit)
|
|
||||||
|
|
||||||
|
|
||||||
def callback(self, nodename, raw_string):
|
def callback(self, nodename, raw_string):
|
||||||
|
|
@ -596,6 +598,8 @@ class EvMenu(object):
|
||||||
"""
|
"""
|
||||||
self._caller.cmdset.remove(EvMenuCmdSet)
|
self._caller.cmdset.remove(EvMenuCmdSet)
|
||||||
del self._caller.ndb._menutree
|
del self._caller.ndb._menutree
|
||||||
|
if self.cmd_on_quit is not None:
|
||||||
|
self.cmd_on_quit(self._caller, self)
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue