fix entry_changed
[enigma2.git] / lib / python / Components / Converter / StringList.py
index ed2646519978415b1b14e02bdcd45f53ebe3781c..b21a7cf9647ae62655cff8b438f6fc38e647f5a7 100644 (file)
@@ -1,33 +1,45 @@
 from Converter import Converter
 from enigma import eListboxPythonStringContent
-
+from Components.Element import cached
 
 class StringList(Converter):
        """Turns a simple python list into a list which can be used in a listbox."""
        def __init__(self, type):
                Converter.__init__(self, type)
+               self.content = None
 
        def changed(self, what):
-               self.content = eListboxPythonStringContent()
+               if not self.content:
+                       self.content = eListboxPythonStringContent()
+
                if self.source:
                        self.content.setList(self.source.list)
                self.downstream_elements.changed(what)
 
        def selectionChanged(self, index):
                self.source.selectionChanged(index)
+
+       def setIndex(self, index):
                # update all non-master targets
                for x in self.downstream_elements:
                        if x is not self.master:
                                x.index = index
 
+       def getIndex(self, index):
+               return None
+       
+       index = property(getIndex, setIndex)
+
+       @cached
        def getCurrent(self):
-               if self.source is None:
+               if self.source is None or self.index is None or self.index >= len(self.source.list):
                        return None
                return self.source.list[self.index]
 
        current = property(getCurrent)
 
        # pass through: getIndex / setIndex to master
+       @cached
        def getIndex(self):
                if self.master is None:
                        return None
@@ -36,5 +48,9 @@ class StringList(Converter):
        def setIndex(self, index):
                if self.master is not None:
                        self.master.index = index
-       
+
        index = property(getIndex, setIndex)
+
+       def entry_changed(self, index):
+               if self.content:
+                       self.content.invalidateEntry(index)