from enigma import * class ActionMap: def __init__(self, contexts = [ ], actions = { }, prio=0): self.actions = actions self.contexts = contexts self.prio = prio self.p = eActionMapPtr() eActionMap.getInstance(self.p) def execBegin(self): for ctx in self.contexts: self.p.bindAction(ctx, self.prio, self.action) def execEnd(self): for ctx in self.contexts: self.p.unbindAction(ctx, self.action) def action(self, context, action): print " ".join(("action -> ", context, action)) if self.actions.has_key(action): self.actions[action]() return 1 else: print "unknown action %s/%s! typo in keymap?" % (context, action) return 0 class NumberActionMap(ActionMap): def action(self, contexts, action): numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] if (action in numbers and self.actions.has_key(action)): self.actions[action](int(action)) return 1 else: return ActionMap.action(self, contexts, action) class HelpableActionMap(ActionMap): """An Actionmap which automatically puts the actions into the helpList. Note that you can only use ONE context here!""" # sorry for this complicated code. # it's not more than converting a "documented" actionmap # (where the values are possibly (function, help)-tuples) # into a "classic" actionmap, where values are just functions. # the classic actionmap is then passed to the ActionMap constructor, # the collected helpstrings (with correct context, action) is # added to the screen's "helpList", which will be picked up by # the "HelpableScreen". def __init__(self, parent, context, actions = { }, prio=0): alist = [ ] adict = { } for (action, funchelp) in actions.iteritems(): # check if this is a tuple if type(funchelp) is type(()): alist.append((action, funchelp[1])) adict[action] = funchelp[0] else: adict[action] = funchelp ActionMap.__init__(self, [context], adict, prio) parent.helpList.append((self, context, alist))