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
21 def setList(self, list):
23 self.changed((self.CHANGED_ALL,))
25 list = property(lambda self: self.__list, setList)
27 def entry_changed(self, index):
28 if not self.disable_callbacks:
29 self.downstream_elements.entry_changed(self, index)
32 return len(self.__list)
34 def selectionChanged(self, index):
35 if self.disable_callbacks:
38 for x in self.onSelectionChanged:
43 return self.master is not None and self.master.current
45 current = property(getCurrent)
47 def setIndex(self, index):
48 if self.master is not None:
49 self.master.index = index
50 self.selectionChanged(index)
54 if self.master is not None:
55 return self.master.index
59 setCurrentIndex = setIndex
61 index = property(getIndex, setIndex)
64 if self.getIndex() + 1 >= self.count():
65 if self.enableWrapAround:
69 self.setIndex(self.index)
71 def selectPrevious(self):
72 if self.getIndex() - 1 < 0:
73 if self.enableWrapAround:
74 self.index = self.count() - 1
77 self.setIndex(self.index)
79 def updateList(self, list):
80 """Changes the list without changing the selection or emitting changed Events"""
81 assert len(list) == len(self.__list)
83 old_index = self.index
84 print "disable callback"
85 self.disable_callbacks = True
89 self.index = old_index
90 print "reenable callbacks"
91 self.disable_callbacks = False