open_toontown_panda3d/direct/src/gui/ListBox.py

117 lines
3.1 KiB
Python

from ShowBaseGlobal import *
from DirectObject import *
from GuiGlobals import *
import Button
import Label
import types
class ListBox(DirectObject):
def __init__(self, name, numSlots,
scale = 0.1,
width = None,
drawOrder = getDefaultDrawOrder(),
font = getDefaultFont()):
self.name = name
self.numSlots = numSlots
self.scale = scale
self.width = width
self.drawOrder = drawOrder
self.font = font
arrow = loader.loadModelOnce('phase_3/models/props/scroll-arrow')
arrowScale = 0.1
self.up = Button.Button(name + '-up', arrow,
left = -1, right = 1,
bottom = 0, top = 0.5,
scale = arrowScale,
drawOrder = drawOrder)
arrow.setR(180)
self.down = Button.Button(name + '-down', arrow,
left = -1, right = 1,
bottom = -0.5, top = 0,
scale = arrowScale,
drawOrder = drawOrder)
arrow.removeNode()
self.listBox = GuiListBox(self.name + '-lb', self.numSlots,
self.up.button, self.down.button)
self.managed = 0
self.items = []
return None
def addItem(self, item, label):
button = Button.Button(item, label,
scale = self.scale,
width = self.width,
drawOrder = self.drawOrder,
font = self.font)
self.items.append((item, button))
self.listBox.addItem(button.button)
def addItems(self, items):
for i in items:
if isinstance(i, types.StringType):
self.addItem(i, i)
else:
self.addItem(i[0], i[1])
def cleanup(self):
if (self.managed):
self.unmanage()
for i in self.items:
i[1].cleanup()
self.up.cleanup()
self.down.cleanup()
self.listBox = None
return None
def __str__(self):
return "ListBox: %s" % (self.name)
def getName(self):
return self.name
def getNumSlots(self):
return self.numSlots
def getGuiItem(self):
return self.listBox
def getUpButton(self):
return self.up
def getDownButton(self):
return self.down
def freeze(self):
self.listBox.freeze()
def thaw(self):
self.listBox.thaw()
def manage(self, nodepath = aspect2d):
if nodepath:
self.listBox.manage(guiMgr, base.eventMgr.eventHandler,
nodepath.node())
else:
self.listBox.manage(guiMgr, base.eventMgr.eventHandler)
self.listBox.startBehavior()
self.managed = 1
def unmanage(self):
self.listBox.unmanage()
self.listBox.stopBehavior()
self.managed = 0
def setPos(self, x, y):
self.listBox.setPos(Vec3(x, 0., y))