fixes bug #436
[enigma2.git] / lib / python / Components / HelpMenuList.py
old mode 100644 (file)
new mode 100755 (executable)
index e7806bd..66139df
@@ -1,26 +1,28 @@
-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):
+       def __init__(self, helplist, callback):
                GUIComponent.__init__(self)
                self.onSelChanged = [ ]
                self.l = eListboxPythonMultiContent()
                self.callback = callback
+               self.extendedHelp = False
 
                l = [ ]
-               for (actionmap, context, actions) in list:
+               for (actionmap, context, actions) in helplist:
                        for (action, help) in actions:
-                               entry = [ ]
-
                                buttons = queryKeyBinding(context, action)
 
+                               # do not display entries which are not accessible from keys
+                               if not len(buttons):
+                                       continue
+
                                name = None
                                flags = 0
 
@@ -30,17 +32,30 @@ class HelpMenuList(GUIComponent):
                                                break
 
                                if flags & 8: # for long keypresses, prepend l_ into the key name.
-                                       name = ("l_" + name[0], name[1], name[2])
-
-                               entry.append( (actionmap, context, action, name ) )
-                               entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 28, 0, 0, help) )
-
+                                       name = (name[0], "long")
+                                       
+                               entry = [ (actionmap, context, action, name ) ]
+
+                               if isinstance(help, list):
+                                       self.extendedHelp = True
+                                       print "extendedHelpEntry found"
+                                       entry.extend((
+                                               (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 26, 0, 0, help[0]),
+                                               (eListboxPythonMultiContent.TYPE_TEXT, 0, 28, 400, 20, 1, 0, help[1])
+                                       ))
+                               else:
+                                       entry.append( (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 400, 28, 0, 0, help) )
+                                       
                                l.append(entry)
 
                self.l.setList(l)
-
-               self.l.setFont(0, gFont("Regular", 26))
-               self.l.setItemHeight(42)
+               if self.extendedHelp is True:
+                       self.l.setFont(0, gFont("Regular", 24))
+                       self.l.setFont(1, gFont("Regular", 18))
+                       self.l.setItemHeight(50)
+               else:
+                       self.l.setFont(0, gFont("Regular", 24))
+                       self.l.setItemHeight(38)
 
        def ok(self):
                # a list entry has a "private" tuple as first entry...
@@ -59,9 +74,12 @@ class HelpMenuList(GUIComponent):
 
        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()