- 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 = 50
- 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):
- 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):
- self.selItem=None
- self.itemList=[]
- if self.scrollBar:
- self.scrollBar.SetPos(0)
- def RemoveAllItems(self):
- for i in self.itemList:
- if i.IsShow():
- i.Hide()
- self.selItem=None
- del self.itemList[:]
- self.itemList=[]
- if self.scrollBar:
- self.scrollBar.SetPos(0)
- if app.ENABLE_SWITCHBOT:
- def GetItems(self):
- return self.itemList
- 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)
- 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):
- 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