Frame.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from ShowBaseGlobal import *
  2. import GuiManager
  3. import GuiFrame
  4. import Vec3
  5. guiMgr = GuiManager.GuiManager.getPtr(base.win, base.mak.node())
  6. font = (loader.loadModelOnce("fonts/ttf-comic")).node()
  7. class Frame:
  8. # special methods
  9. def __init__(self, name):
  10. self.name = name
  11. self.managed = 0
  12. self.offset = 0
  13. self.frame = GuiFrame.GuiFrame(name)
  14. self.items = []
  15. def __del__(self):
  16. if (self.managed):
  17. self.frame.unmanage()
  18. del(self.frame)
  19. def __str__(self):
  20. return "Frame: %s = %s" % self.name, self.items
  21. # accessing
  22. def getName(self):
  23. return self.name
  24. def setPos(self, x, y):
  25. v3 = Vec3.Vec3(x, 0., y)
  26. self.frame.setPos(v3)
  27. def setScale(self, scale):
  28. self.frame.setScale(scale)
  29. def getOffset(self):
  30. return self.offset
  31. def setOffset(self, offset):
  32. self.offset = offset
  33. # actions
  34. def manage(self):
  35. self.frame.manage(guiMgr, base.eventMgr.eventHandler)
  36. self.managed = 1
  37. def unmanage(self):
  38. self.frame.unmanage()
  39. self.managed = 0
  40. def recompute(self):
  41. self.frame.recompute()
  42. # content functions
  43. def addItem(self, item):
  44. self.frame.addItem(item.getGuiItem())
  45. self.items.append(item)
  46. def removeItem(self, item):
  47. self.frame.removeItem(item.getGuiItem())
  48. self.items.remove(item)
  49. def getItems(self):
  50. return self.items
  51. def printItems(self):
  52. print "frame items: %s" % (self.items)
  53. def packItem(self, itemNum, relation, otherItemNum):
  54. self.frame.packItem(self.items[itemNum].getGuiItem(), relation,
  55. self.items[otherItemNum].getGuiItem(), self.offset)
  56. # convenience functions
  57. def makeVertical(self):
  58. # remove any previous packing
  59. self.frame.clearAllPacking()
  60. # make each item (except first) align under the last
  61. for itemNum in range(1, len(self.items)):
  62. self.packItem(itemNum, GuiFrame.GuiFrame.UNDER, itemNum - 1)
  63. self.packItem(itemNum, GuiFrame.GuiFrame.ALIGNLEFT, itemNum - 1)
  64. self.frame.recompute()
  65. def makeHorizontal(self):
  66. # remove any previous packing
  67. self.frame.clearAllPacking()
  68. # make each item (except first) align right of the last
  69. for itemNum in range(1, len(self.items)):
  70. self.packItem(itemNum, GuiFrame.GuiFrame.RIGHT, itemNum - 1)
  71. self.packItem(itemNum, GuiFrame.GuiFrame.ALIGNABOVE, itemNum - 1)
  72. self.frame.recompute()
  73. def makeWideAsWidest(self):
  74. # make all the buttons as wide as the widest button in
  75. # the frame
  76. widest = 0
  77. widestWidth = 0.0
  78. # find the widest
  79. for item in self.items:
  80. thisWidth = item.getWidth()
  81. if (thisWidth > widestWidth):
  82. widest = self.items.index(item)
  83. widestWidth = thisWidth
  84. # re-pack based on new widths
  85. self.frame.recompute()
  86. # make them all this wide
  87. for item in self.items:
  88. item.setWidth(widestWidth)