add possibility to disable/enable listbox selection in multicontent templates
authorghost <andreas.monzner@multimedia-labs.de>
Thu, 11 Feb 2010 22:12:47 +0000 (23:12 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Thu, 11 Feb 2010 22:12:47 +0000 (23:12 +0100)
fixes bug #443

lib/python/Components/Converter/TemplatedMultiContent.py
lib/python/Components/Renderer/Listbox.py
lib/python/Components/Sources/List.py

index b86d94bf5ad3c4c8555a51e713b8b9cb8e5b7168..b5a9844931378cb950ac3e7a35f86ec62b9d8bb4 100644 (file)
@@ -10,8 +10,8 @@ class TemplatedMultiContent(StringList):
                del l["self"] # cleanup locals a bit
                del l["args"]
 
                del l["self"] # cleanup locals a bit
                del l["args"]
 
-               self.template = eval(args, {}, l)
                self.active_style = None
                self.active_style = None
+               self.template = eval(args, {}, l)
                assert "fonts" in self.template
                assert "itemHeight" in self.template
                assert "template" in self.template or "templates" in self.template
                assert "fonts" in self.template
                assert "itemHeight" in self.template
                assert "template" in self.template or "templates" in self.template
@@ -25,7 +25,6 @@ class TemplatedMultiContent(StringList):
                if not self.content:
                        from enigma import eListboxPythonMultiContent
                        self.content = eListboxPythonMultiContent()
                if not self.content:
                        from enigma import eListboxPythonMultiContent
                        self.content = eListboxPythonMultiContent()
-                       self.setTemplate()
 
                        # also setup fonts (also given by source)
                        index = 0
 
                        # also setup fonts (also given by source)
                        index = 0
@@ -35,30 +34,33 @@ class TemplatedMultiContent(StringList):
 
                # if only template changed, don't reload list
                if what[0] == self.CHANGED_SPECIFIC and what[1] == "style":
 
                # if only template changed, don't reload list
                if what[0] == self.CHANGED_SPECIFIC and what[1] == "style":
-                       self.setTemplate()
-                       return
-
-               if self.source:
+                       pass
+               elif self.source:
                        self.content.setList(self.source.list)
                        self.content.setList(self.source.list)
-                       self.setTemplate()
 
 
+               self.setTemplate()
                self.downstream_elements.changed(what)
 
        def setTemplate(self):
                if self.source:
                        style = self.source.style
                self.downstream_elements.changed(what)
 
        def setTemplate(self):
                if self.source:
                        style = self.source.style
+
                        if style == self.active_style:
                        if style == self.active_style:
-                               return # style did not change
+                               return
 
                        # if skin defined "templates", that means that it defines multiple styles in a dict. template should still be a default
                        templates = self.template.get("templates")
                        template = self.template.get("template")
                        itemheight = self.template["itemHeight"]
 
                        # if skin defined "templates", that means that it defines multiple styles in a dict. template should still be a default
                        templates = self.template.get("templates")
                        template = self.template.get("template")
                        itemheight = self.template["itemHeight"]
+                       selectionEnabled = self.template.get("selectionEnabled", True)
 
                        if templates and style and style in templates: # if we have a custom style defined in the source, and different templates in the skin, look it up
                                template = templates[style][1]
                                itemheight = templates[style][0]
 
                        if templates and style and style in templates: # if we have a custom style defined in the source, and different templates in the skin, look it up
                                template = templates[style][1]
                                itemheight = templates[style][0]
+                               if len(templates[style]) > 2:
+                                       selectionEnabled = templates[style][2]
 
                        self.content.setTemplate(template)
 
                        self.content.setTemplate(template)
-
                        self.content.setItemHeight(itemheight)
                        self.content.setItemHeight(itemheight)
+                       self.selectionEnabled = selectionEnabled
+                       self.active_style = style
index 7a895330aa2381f8cc03d5c6348e346096cdabee..640121e1ff97a7ac92cb6ece3e26ed1602dfd3b8 100644 (file)
@@ -77,6 +77,10 @@ class Listbox(Renderer, object):
        selection_enabled = property(lambda self: self.__selection_enabled, setSelectionEnabled)
 
        def changed(self, what):
        selection_enabled = property(lambda self: self.__selection_enabled, setSelectionEnabled)
 
        def changed(self, what):
+               if hasattr(self.source, "selectionEnabled"):
+                       self.selection_enabled = self.source.selectionEnabled
+               if len(what) > 1 and isinstance(what[1], str) and what[1] == "style":
+                       return
                self.content = self.source.content
 
        def entry_changed(self, index):
                self.content = self.source.content
 
        def entry_changed(self, index):
index 1eab32b22db1314cf0ba458b6fa11378592038ce..6f0670a1f6f059d8485d0c0016c8a79847ce7cd8 100644 (file)
@@ -91,8 +91,9 @@ to generate HTML."""
                return self.__style
 
        def setStyle(self, style):
                return self.__style
 
        def setStyle(self, style):
-               self.__style = style
-               self.changed((self.CHANGED_SPECIFIC, "style"))
+               if self.__style != style:
+                       self.__style = style
+                       self.changed((self.CHANGED_SPECIFIC, "style"))
 
        style = property(getStyle, setStyle)
 
 
        style = property(getStyle, setStyle)