1 from Source import Source
2 from Components.Element import cached
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
10 This has been done so another converter could convert the list to a different format, for example
12 def __init__(self, list = [ ], enableWrapAround = False, item_height = 25, fonts = [ ]):
15 self.onSelectionChanged = [ ]
16 self.item_height = item_height
18 self.disable_callbacks = False
19 self.enableWrapAround = enableWrapAround
20 self.__style = "default" # style might be an optional string which can be used to define different visualisations in the skin
22 def setList(self, list):
24 self.changed((self.CHANGED_ALL,))
26 list = property(lambda self: self.__list, setList)
28 def entry_changed(self, index):
29 if not self.disable_callbacks:
30 self.downstream_elements.entry_changed(self, index)
32 def modifyEntry(self, index, data):
33 self.__list[index] = data
34 self.entry_changed(index)
37 return len(self.__list)
39 def selectionChanged(self, index):
40 if self.disable_callbacks:
43 for x in self.onSelectionChanged:
48 return self.master is not None and self.master.current
50 current = property(getCurrent)
52 def setIndex(self, index):
53 if self.master is not None:
54 self.master.index = index
55 self.selectionChanged(index)
59 if self.master is not None:
60 return self.master.index
64 setCurrentIndex = setIndex
66 index = property(getIndex, setIndex)
69 if self.getIndex() + 1 >= self.count():
70 if self.enableWrapAround:
74 self.setIndex(self.index)
76 def selectPrevious(self):
77 if self.getIndex() - 1 < 0:
78 if self.enableWrapAround:
79 self.index = self.count() - 1
82 self.setIndex(self.index)
88 def setStyle(self, style):
90 self.changed((self.CHANGED_SPECIFIC, "style"))
92 style = property(getStyle, setStyle)
94 def updateList(self, list):
95 """Changes the list without changing the selection or emitting changed Events"""
96 assert len(list) == len(self.__list)
97 old_index = self.index
98 self.disable_callbacks = True
100 self.index = old_index
101 self.disable_callbacks = False