add count() to List source
[vuplus_dvbapp] / lib / python / Components / Sources / List.py
1 from Source import Source
2 from Components.Element import cached
3
4 class List(Source, object):
5         """The datasource of a listbox. Currently, the format depends on the used converter. So
6 if you put a simple string list in here, you need to use a StringList converter, if you are
7 using a "multi content list styled"-list, you need to use the StaticMultiList converter, and
8 setup the "fonts". 
9
10 This has been done so another converter could convert the list to a different format, for example
11 to generate HTML."""
12         def __init__(self, list = [ ], enableWrapAround = False, item_height = 25, fonts = [ ]):
13                 Source.__init__(self)
14                 self.__list = list
15                 self.onSelectionChanged = [ ]
16                 self.item_height = item_height
17                 self.fonts = fonts
18                 self.disable_callbacks = False
19
20         def setList(self, list):
21                 self.__list = list
22                 self.changed((self.CHANGED_ALL,))
23
24         list = property(lambda self: self.__list, setList)
25
26         def entry_changed(self, index):
27                 if not self.disable_callbacks:
28                         self.downstream_elements.entry_changed(self, index)
29                         
30         def count(self):
31                 return len(self.__list)
32
33         def selectionChanged(self, index):
34                 if self.disable_callbacks:
35                         return
36
37                 for x in self.onSelectionChanged:
38                         x()
39
40         @cached
41         def getCurrent(self):
42                 return self.master is not None and self.master.current
43
44         current = property(getCurrent)
45
46         def setIndex(self, index):
47                 if self.master is not None:
48                         self.master.index = index
49
50         @cached
51         def getIndex(self):
52                 if self.master is not None:
53                         return self.master.index
54                 else:
55                         return None
56
57         setCurrentIndex = setIndex
58
59         index = property(getIndex, setIndex)
60
61         def updateList(self, list):
62                 """Changes the list without changing the selection or emitting changed Events"""
63                 assert len(list) == len(self.__list)
64                 print "get old index"
65                 old_index = self.index
66                 print "disable callback"
67                 self.disable_callbacks = True
68                 print "set list"
69                 self.list = list
70                 print "set index"
71                 self.index = old_index
72                 print "reenable callbacks"
73                 self.disable_callbacks = False
74                 print "done"