moving the list generation to a seperate method
[enigma2.git] / lib / python / Components / ActionMap.py
1 from enigma import *
2
3 class ActionMap:
4         def __init__(self, contexts = [ ], actions = { }, prio=0):
5                 self.actions = actions
6                 self.contexts = contexts
7                 self.prio = prio
8                 self.p = eActionMapPtr()
9                 eActionMap.getInstance(self.p)
10
11         def execBegin(self):
12                 for ctx in self.contexts:
13                         self.p.bindAction(ctx, self.prio, self.action)
14
15         def execEnd(self):
16                 for ctx in self.contexts:
17                         self.p.unbindAction(ctx, self.action)
18
19         def action(self, context, action):
20                 print " ".join(("action -> ", context, action))
21                 if self.actions.has_key(action):
22                         self.actions[action]()
23                         return 1
24                 else:
25                         print "unknown action %s/%s! typo in keymap?" % (context, action)
26                         return 0
27
28 class NumberActionMap(ActionMap):
29         def action(self, contexts, action):
30                 numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
31                 if (action in numbers and self.actions.has_key(action)):
32                         self.actions[action](int(action))
33                         return 1
34                 else:
35                         return ActionMap.action(self, contexts, action)
36
37 class HelpableActionMap(ActionMap):
38         """An Actionmap which automatically puts the actions into the helpList.
39
40         Note that you can only use ONE context here!"""
41         
42         # sorry for this complicated code.
43         # it's not more than converting a "documented" actionmap 
44         # (where the values are possibly (function, help)-tuples)
45         # into a "classic" actionmap, where values are just functions.
46         # the classic actionmap is then passed to the ActionMap constructor,
47         # the collected helpstrings (with correct context, action) is
48         # added to the screen's "helpList", which will be picked up by
49         # the "HelpableScreen".
50         def __init__(self, parent, context, actions = { }, prio=0):
51                 alist = [ ]
52                 adict = { }
53                 for (action, funchelp) in actions.iteritems():
54                         # check if this is a tuple
55                         if type(funchelp) is type(()):
56                                 alist.append((action, funchelp[1]))
57                                 adict[action] = funchelp[0]
58                         else:
59                                 adict[action] = funchelp
60
61                 ActionMap.__init__(self, [context], adict, prio)
62
63                 parent.helpList.append((self, context, alist))