Advertisement
Guest User

Untitled

a guest
Dec 28th, 2022
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.54 KB | None | 0 0
  1. class ListBoxEx(Window):
  2.     class Item(Window):
  3.         def __init__(self):
  4.             Window.__init__(self)
  5.  
  6.         def __del__(self):
  7.             Window.__del__(self)
  8.  
  9.         def SetParent(self, parent):
  10.             Window.SetParent(self, parent)
  11.             self.parent = proxy(parent)
  12.  
  13.         def OnMouseLeftButtonDown(self):
  14.             self.parent.SelectItem(self)
  15.  
  16.         def OnRender(self):
  17.             if self.parent.GetSelectedItem() == self:
  18.                 self.OnSelectedRender()
  19.  
  20.         def OnSelectedRender(self):
  21.             x, y = self.GetGlobalPosition()
  22.             grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.7, 0.7))
  23.             grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
  24.  
  25.     def __init__(self):
  26.         Window.__init__(self)
  27.  
  28.         self.viewItemCount = 10
  29.         self.basePos = 0
  30.         self.itemHeight = 16
  31.         self.itemStep = 20
  32.         self.selItem = 0
  33.         self.itemList = []
  34.         self.onSelectItemEvent = lambda *arg: None
  35.  
  36.         if localeInfo.IsARABIC():
  37.             self.itemWidth = 130
  38.         else:
  39.             self.itemWidth = 100
  40.  
  41.         self.scrollBar = None
  42.         self.__UpdateSize()
  43.  
  44.     def __del__(self):
  45.         Window.__del__(self)
  46.  
  47.     def __UpdateSize(self):
  48.         height = self.itemStep * self.__GetViewItemCount()
  49.  
  50.         self.SetSize(self.itemWidth, height)
  51.  
  52.     def IsEmpty(self):
  53.         if len(self.itemList) == 0:
  54.             return 1
  55.         return 0
  56.  
  57.     def SetItemStep(self, itemStep):
  58.         self.itemStep = itemStep
  59.         self.__UpdateSize()
  60.  
  61.     def SetItemSize(self, itemWidth, itemHeight):
  62.         self.itemWidth = itemWidth
  63.         self.itemHeight = itemHeight
  64.         self.__UpdateSize()
  65.  
  66.     def SetViewItemCount(self, viewItemCount):
  67.         self.viewItemCount = viewItemCount
  68.  
  69.     def SetSelectEvent(self, event):
  70.         self.onSelectItemEvent = event
  71.  
  72.     def SetBasePos(self, basePos):
  73.         if app.__BL_CLIP_MASK__:
  74.             self.basePos = basePos
  75.  
  76.             curbp = self.basePos
  77.  
  78.             itemheight = self.itemStep * len(self.itemList)
  79.             myheight = self.GetHeight()
  80.  
  81.             if itemheight < myheight:
  82.                 curbp = 0
  83.  
  84.             fromPos = curbp
  85.             curPos = 0
  86.             toPos = curbp + self.GetHeight()
  87.             for item in self.itemList:
  88.                 if curPos + self.itemStep < fromPos or curPos > toPos:
  89.                     item.Hide()
  90.                 else:
  91.                     item.Show()
  92.  
  93.                 item.SetPosition(0, curPos - fromPos)
  94.                 curPos += self.itemStep
  95.         else:
  96.             for oldItem in self.itemList[self.basePos:self.basePos + self.viewItemCount]:
  97.                 oldItem.Hide()
  98.  
  99.             self.basePos = basePos
  100.  
  101.             pos = basePos
  102.             for newItem in self.itemList[self.basePos:self.basePos + self.viewItemCount]:
  103.                 (x, y) = self.GetItemViewCoord(pos, newItem.GetWidth())
  104.                 newItem.SetPosition(x, y)
  105.                 newItem.Show()
  106.                 pos += 1
  107.  
  108.     def GetItemIndex(self, argItem):
  109.         return self.itemList.index(argItem)
  110.  
  111.     def GetSelectedItem(self):
  112.         return self.selItem
  113.  
  114.     def SelectIndex(self, index):
  115.  
  116.         if index >= len(self.itemList) or index < 0:
  117.             self.selItem = None
  118.             return
  119.  
  120.         try:
  121.             self.selItem = self.itemList[index]
  122.         except:
  123.             pass
  124.  
  125.     def SelectItem(self, selItem):
  126.         self.selItem = selItem
  127.         self.onSelectItemEvent(selItem)
  128.  
  129.     def RemoveAllItems(self):
  130.         for item in self.itemList:
  131.             item.Hide()
  132.  
  133.         self.selItem = None
  134.         self.itemList = []
  135.  
  136.         if self.scrollBar:
  137.             self.scrollBar.SetPos(0)
  138.  
  139.     def RemoveItem(self, delItem):
  140.         if delItem == self.selItem:
  141.             self.selItem = None
  142.  
  143.         self.itemList.remove(delItem)
  144.  
  145.     def AppendItem(self, newItem):
  146.         newItem.SetParent(self)
  147.         newItem.SetSize(self.itemWidth, self.itemHeight)
  148.  
  149.         if app.__BL_CLIP_MASK__:
  150.             newItem.SetClippingMaskWindow(self)
  151.  
  152.         pos = len(self.itemList)
  153.         if self.__IsInViewRange(pos):
  154.             (x, y) = self.GetItemViewCoord(pos, newItem.GetWidth())
  155.             newItem.SetPosition(x, y)
  156.             newItem.Show()
  157.         else:
  158.             newItem.Hide()
  159.  
  160.         self.itemList.append(newItem)
  161.  
  162.     def SetScrollBar(self, scrollBar):
  163.         scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
  164.         self.scrollBar = scrollBar
  165.  
  166.     def __OnScroll(self):
  167.         if app.__BL_CLIP_MASK__:
  168.             self.SetBasePos(int(self.scrollBar.GetPos() * (self.__GetItemCount() - 1) * self.itemStep))
  169.         else:
  170.             self.SetBasePos(int(self.scrollBar.GetPos() * self.__GetScrollLen()))
  171.  
  172.     def __GetScrollLen(self):
  173.         scrollLen = self.__GetItemCount() - self.__GetViewItemCount()
  174.         if scrollLen < 0:
  175.             return 0
  176.  
  177.         return scrollLen
  178.  
  179.     def __GetViewItemCount(self):
  180.         return self.viewItemCount
  181.  
  182.     def __GetItemCount(self):
  183.         return len(self.itemList)
  184.  
  185.     def GetItemViewCoord(self, pos, itemWidth):
  186.         if localeInfo.IsARABIC():
  187.             return (self.GetWidth() - itemWidth - 10, (pos - self.basePos) * self.itemStep)
  188.         else:
  189.             return (0, (pos - self.basePos) * self.itemStep)
  190.  
  191.     def __IsInViewRange(self, pos):
  192.         if pos < self.basePos:
  193.             return 0
  194.         if pos >= self.basePos + self.viewItemCount:
  195.             return 0
  196.         return 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement