allow burning DVDs with multiple titles where playback automatically jumps to the...
[enigma2.git] / lib / python / Components / HelpMenuList.py
index 34eb4119449f59c252e5f0f1a985a4bacf97b166..25c9b8b6bcbb397ad085eb62690f530a7d1b8349 100644 (file)
@@ -1,50 +1,76 @@
-from GUIComponent import *
+from GUIComponent import GUIComponent
 
 from enigma import eListboxPythonMultiContent, eListbox, gFont
 
+from Tools.KeyBindings import queryKeyBinding, getKeyDescription
+#getKeyPositions
+
 # [ ( actionmap, context, [(action, help), (action, help), ...] ), (actionmap, ... ), ... ]
 
 class HelpMenuList(GUIComponent):
        def __init__(self, list, callback):
                GUIComponent.__init__(self)
-               
+               self.onSelChanged = [ ]
                self.l = eListboxPythonMultiContent()
                self.callback = callback
-               
+
                l = [ ]
                for (actionmap, context, actions) in list:
-                       
-                       print "actionmap:"  + str(actionmap)
-                       print "context: " + str(context)
-                       print "actions: " + str(actions)
-                       
                        for (action, help) in actions:
                                entry = [ ]
-                               
-                               entry.append( (actionmap, context, action) )
-                               entry.append( (0, 36, 200, 20, 1, 0, "you can also press a secret button") )
-                               entry.append( (0, 0, 200, 36, 0, 0, help) )
-                               
+
+                               buttons = queryKeyBinding(context, action)
+
+                               # do not display entries which are not accessible from keys
+                               if not len(buttons):
+                                       continue
+
+                               name = None
+                               flags = 0
+
+                               for n in buttons:
+                                       (name, flags) = (getKeyDescription(n[0]), n[1])
+                                       if name is not None:
+                                               break
+
+                               if flags & 8: # for long keypresses, prepend l_ into the key name.
+                                       name = (name[0], "long")
+                                       
+                               print "name:", name
+
+                               entry.append( (actionmap, context, action, name ) )
+                               entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 28, 0, 0, help) )
+
                                l.append(entry)
-               
+
                self.l.setList(l)
-               
-               self.l.setFont(0, gFont("Arial", 36))
-               self.l.setFont(1, gFont("Arial", 18))
-       
-       def GUIcreate(self, parent):
-               self.instance = eListbox(parent)
-               self.instance.setContent(self.l)
-               self.instance.setItemHeight(75)
-       
-       def GUIdelete(self):
-               self.instance.setContent(None)
-               self.instance = None
+
+               self.l.setFont(0, gFont("Regular", 24))
+               self.l.setItemHeight(38)
 
        def ok(self):
                # a list entry has a "private" tuple as first entry...
-               l = self.l.getCurrentSelection()[0]
-               
-               # ...containing (Actionmap, Context, Action).
+               l = self.getCurrent()
+               if l is None:
+                       return
+               # ...containing (Actionmap, Context, Action, keydata).
                # we returns this tuple to the callback.
                self.callback(l[0], l[1], l[2])
+
+       def getCurrent(self):
+               sel = self.l.getCurrentSelection()
+               return sel and sel[0]
+
+       GUI_WIDGET = eListbox
+
+       def postWidgetCreate(self, instance):
+               instance.setContent(self.l)
+               instance.selectionChanged.get().append(self.selectionChanged)
+
+       def preWidgetRemove(self, instance):
+               instance.setContent(None)
+               instance.selectionChanged.get().remove(self.selectionChanged)
+
+       def selectionChanged(self):
+               for x in self.onSelChanged:
+                       x()