MenuList -> List
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 12 Apr 2007 19:56:03 +0000 (19:56 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 12 Apr 2007 19:56:03 +0000 (19:56 +0000)
lib/python/Components/Sources/List.py [new file with mode: 0644]
lib/python/Components/Sources/Makefile.am
lib/python/Components/Sources/MenuList.py [deleted file]

diff --git a/lib/python/Components/Sources/List.py b/lib/python/Components/Sources/List.py
new file mode 100644 (file)
index 0000000..6d083f0
--- /dev/null
@@ -0,0 +1,72 @@
+from Source import Source
+from Tools.Event import Event
+from Components.Element import cached
+
+class List(Source, object):
+       """The datasource of a listbox. Currently, the format depends on the used converter. So
+if you put a simple string list in here, you need to use a StringList converter, if you are
+using a "multi content list styled"-list, you need to use the StaticMultiList converter, and
+setup the "fonts". 
+
+This has been done so another converter could convert the list to a different format, for example
+to generate HTML."""
+       def __init__(self, list = [ ], enableWrapAround = False, item_height = 25, fonts = [ ]):
+               Source.__init__(self)
+               self.__list = list
+               self.onSelectionChanged = [ ]
+               self.item_height = item_height
+               self.fonts = fonts
+               self.disable_callbacks = False
+
+       def setList(self, list):
+               self.__list = list
+               self.changed((self.CHANGED_ALL,))
+
+       list = property(lambda self: self.__list, setList)
+
+       def entry_changed(self, index):
+               if not self.disable_callbacks:
+                       self.downstream_elements.entry_changed(self, index)
+
+       def selectionChanged(self, index):
+               if self.disable_callbacks:
+                       return
+                       
+               for x in self.onSelectionChanged:
+                       x()
+
+       @cached
+       def getCurrent(self):
+               return self.master is not None and self.master.current
+
+       current = property(getCurrent)
+
+       def setIndex(self, index):
+               if self.master is not None:
+                       self.master.index = index
+
+       @cached
+       def getIndex(self):
+               if self.master is not None:
+                       return self.master.index
+               else:
+                       return -1
+
+       setCurrentIndex = setIndex
+
+       index = property(getIndex, setIndex)
+
+       def updateList(self, list):
+               """Changes the list without changing the selection or emitting changed Events"""
+               assert len(list) == len(self.__list)
+               print "get old index"
+               old_index = self.index
+               print "disable callback"
+               self.disable_callbacks = True
+               print "set list"
+               self.list = list
+               print "set index"
+               self.index = old_index
+               print "reenable callbacks"
+               self.disable_callbacks = False
+               print "done"
index b5e16d98445446c765c50265aaacdb5eb4f0723b..6deb423d97466681c3f1306f2b144314f9ad010c 100644 (file)
@@ -1,6 +1,6 @@
 installdir = $(LIBDIR)/enigma2/python/Components/Sources
 
 install_PYTHON = \
-       __init__.py Clock.py EventInfo.py Source.py MenuList.py CurrentService.py \
+       __init__.py Clock.py EventInfo.py Source.py List.py CurrentService.py \
        FrontendStatus.py Boolean.py Config.py ServiceList.py RdsDecoder.py StreamService.py \
        StaticText.py
diff --git a/lib/python/Components/Sources/MenuList.py b/lib/python/Components/Sources/MenuList.py
deleted file mode 100644 (file)
index e69de29..0000000