Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ListBoxEx(Window):
- class Item(Window):
- def __init__(self):
- Window.__init__(self)
- def __del__(self):
- Window.__del__(self)
- def SetParent(self, parent):
- Window.SetParent(self, parent)
- self.parent = proxy(parent)
- def OnMouseLeftButtonDown(self):
- self.parent.SelectItem(self)
- def OnRender(self):
- if self.parent.GetSelectedItem() == self:
- self.OnSelectedRender()
- def OnSelectedRender(self):
- x, y = self.GetGlobalPosition()
- grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.7, 0.7))
- grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
- def __init__(self):
- Window.__init__(self)
- self.viewItemCount = 10
- self.basePos = 0
- self.itemHeight = 16
- self.itemStep = 20
- self.selItem = 0
- self.itemList = []
- self.onSelectItemEvent = lambda *arg: None
- if localeInfo.IsARABIC():
- self.itemWidth = 130
- else:
- self.itemWidth = 100
- self.scrollBar = None
- self.__UpdateSize()
- def __del__(self):
- Window.__del__(self)
- def __UpdateSize(self):
- height = self.itemStep * self.__GetViewItemCount()
- self.SetSize(self.itemWidth, height)
- def IsEmpty(self):
- if len(self.itemList) == 0:
- return 1
- return 0
- def SetItemStep(self, itemStep):
- self.itemStep = itemStep
- self.__UpdateSize()
- def SetItemSize(self, itemWidth, itemHeight):
- self.itemWidth = itemWidth
- self.itemHeight = itemHeight
- self.__UpdateSize()
- def SetViewItemCount(self, viewItemCount):
- self.viewItemCount = viewItemCount
- def SetSelectEvent(self, event):
- self.onSelectItemEvent = event
- def SetBasePos(self, basePos):
- if app.__BL_CLIP_MASK__:
- self.basePos = basePos
- curbp = self.basePos
- itemheight = self.itemStep * len(self.itemList)
- myheight = self.GetHeight()
- if itemheight < myheight:
- curbp = 0
- fromPos = curbp
- curPos = 0
- toPos = curbp + self.GetHeight()
- for item in self.itemList:
- if curPos + self.itemStep < fromPos or curPos > toPos:
- item.Hide()
- else:
- item.Show()
- item.SetPosition(0, curPos - fromPos)
- curPos += self.itemStep
- else:
- for oldItem in self.itemList[self.basePos:self.basePos + self.viewItemCount]:
- oldItem.Hide()
- self.basePos = basePos
- pos = basePos
- for newItem in self.itemList[self.basePos:self.basePos + self.viewItemCount]:
- (x, y) = self.GetItemViewCoord(pos, newItem.GetWidth())
- newItem.SetPosition(x, y)
- newItem.Show()
- pos += 1
- def GetItemIndex(self, argItem):
- return self.itemList.index(argItem)
- def GetSelectedItem(self):
- return self.selItem
- def SelectIndex(self, index):
- if index >= len(self.itemList) or index < 0:
- self.selItem = None
- return
- try:
- self.selItem = self.itemList[index]
- except:
- pass
- def SelectItem(self, selItem):
- self.selItem = selItem
- self.onSelectItemEvent(selItem)
- def RemoveAllItems(self):
- for item in self.itemList:
- item.Hide()
- self.selItem = None
- self.itemList = []
- if self.scrollBar:
- self.scrollBar.SetPos(0)
- def RemoveItem(self, delItem):
- if delItem == self.selItem:
- self.selItem = None
- self.itemList.remove(delItem)
- def AppendItem(self, newItem):
- newItem.SetParent(self)
- newItem.SetSize(self.itemWidth, self.itemHeight)
- if app.__BL_CLIP_MASK__:
- newItem.SetClippingMaskWindow(self)
- pos = len(self.itemList)
- if self.__IsInViewRange(pos):
- (x, y) = self.GetItemViewCoord(pos, newItem.GetWidth())
- newItem.SetPosition(x, y)
- newItem.Show()
- else:
- newItem.Hide()
- self.itemList.append(newItem)
- def SetScrollBar(self, scrollBar):
- scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
- self.scrollBar = scrollBar
- def __OnScroll(self):
- if app.__BL_CLIP_MASK__:
- self.SetBasePos(int(self.scrollBar.GetPos() * (self.__GetItemCount() - 1) * self.itemStep))
- else:
- self.SetBasePos(int(self.scrollBar.GetPos() * self.__GetScrollLen()))
- def __GetScrollLen(self):
- scrollLen = self.__GetItemCount() - self.__GetViewItemCount()
- if scrollLen < 0:
- return 0
- return scrollLen
- def __GetViewItemCount(self):
- return self.viewItemCount
- def __GetItemCount(self):
- return len(self.itemList)
- def GetItemViewCoord(self, pos, itemWidth):
- if localeInfo.IsARABIC():
- return (self.GetWidth() - itemWidth - 10, (pos - self.basePos) * self.itemStep)
- else:
- return (0, (pos - self.basePos) * self.itemStep)
- def __IsInViewRange(self, pos):
- if pos < self.basePos:
- return 0
- if pos >= self.basePos + self.viewItemCount:
- return 0
- return 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement