4 def __init__(self, contexts = [ ], actions = { }, prio=0):
6 self.contexts = contexts
8 self.p = eActionMapPtr()
10 self.exec_active = False
12 eActionMap.getInstance(self.p)
14 def setEnabled(self, enabled):
15 self.enabled = enabled
20 for ctx in self.contexts:
21 self.p.bindAction(ctx, self.prio, self.action)
26 for ctx in self.contexts:
27 self.p.unbindAction(ctx, self.action)
31 if self.exec_active and self.enabled:
37 self.exec_active = True
41 self.exec_active = False
44 def action(self, context, action):
45 print " ".join(("action -> ", context, action))
46 if self.actions.has_key(action):
47 res = self.actions[action]()
52 print "unknown action %s/%s! typo in keymap?" % (context, action)
58 class NumberActionMap(ActionMap):
59 def action(self, contexts, action):
60 numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
61 if (action in numbers and self.actions.has_key(action)):
62 res = self.actions[action](int(action))
67 return ActionMap.action(self, contexts, action)
69 class HelpableActionMap(ActionMap):
70 """An Actionmap which automatically puts the actions into the helpList.
72 Note that you can only use ONE context here!"""
74 # sorry for this complicated code.
75 # it's not more than converting a "documented" actionmap
76 # (where the values are possibly (function, help)-tuples)
77 # into a "classic" actionmap, where values are just functions.
78 # the classic actionmap is then passed to the ActionMap constructor,
79 # the collected helpstrings (with correct context, action) is
80 # added to the screen's "helpList", which will be picked up by
81 # the "HelpableScreen".
82 def __init__(self, parent, context, actions = { }, prio=0):
85 for (action, funchelp) in actions.iteritems():
86 # check if this is a tuple
87 if type(funchelp) is type(()):
88 alist.append((action, funchelp[1]))
89 adict[action] = funchelp[0]
91 adict[action] = funchelp
93 ActionMap.__init__(self, [context], adict, prio)
95 parent.helpList.append((self, context, alist))