Frame.py 3.6 KB

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