2
0

Button.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. from ShowBaseGlobal import *
  2. from DirectObject import *
  3. from GuiGlobals import *
  4. import GuiButton
  5. import Label
  6. class Button(DirectObject):
  7. def __init__(self, name,
  8. label = None,
  9. scale = 0.1,
  10. width = None,
  11. drawOrder = getDefaultDrawOrder(),
  12. font = getDefaultFont(),
  13. pos = (0, 0),
  14. geomRect = None):
  15. self.name = name
  16. self.width = width
  17. # if no label given, use the button name
  18. if (label == None):
  19. label = self.name
  20. # check to see if this is an actual guiLabel or just text
  21. if (type(label) == type('')):
  22. # text label, make text button
  23. self.label = label
  24. self.l1 = Label.textLabel(self.label, Label.ButtonUp,
  25. scale, width, drawOrder, font)
  26. if width == None:
  27. width = self.l1.getWidth() / scale
  28. self.width = width
  29. self.l2 = Label.textLabel(self.label, Label.ButtonLit,
  30. scale, width, drawOrder, font)
  31. self.l3 = Label.textLabel(self.label, Label.ButtonDown,
  32. scale, width, drawOrder, font)
  33. elif (isinstance(label, NodePath)):
  34. # If it's a NodePath, assume it's a little texture card.
  35. self.l1 = Label.modelLabel(label,
  36. geomRect = geomRect,
  37. scale = scale,
  38. drawOrder = drawOrder)
  39. if width == None:
  40. width = self.l1.getWidth() / scale
  41. self.width = width
  42. self.l2 = self.l1
  43. self.l3 = self.l1
  44. else:
  45. # label provided, use it for all labels
  46. self.l1 = self.l2 = self.l3 = label
  47. if width == None:
  48. width = self.l1.getWidth()
  49. self.button = GuiButton.GuiButton(self.name, self.l1, self.l2,
  50. self.l3, self.l3, self.l1)
  51. self.button.setDrawOrder(drawOrder)
  52. self.setPos(pos[0], pos[1])
  53. self.managed = 0
  54. return None
  55. def cleanup(self):
  56. if (self.managed):
  57. self.button.unmanage()
  58. self.l1 = None
  59. self.l2 = None
  60. self.button = None
  61. return None
  62. def __str__(self):
  63. return "Button: %s" % self.name
  64. def getName(self):
  65. return self.name
  66. def getLabel(self):
  67. return self.label
  68. def getGuiItem(self):
  69. return self.button
  70. def getWidth(self):
  71. return self.width
  72. def setWidth(self, width):
  73. self.l1.setWidth(width)
  74. self.l2.setWidth(width)
  75. self.l3.setWidth(width)
  76. def freeze(self):
  77. self.l1.freeze()
  78. self.l2.freeze()
  79. self.l3.freeze()
  80. self.button.freeze()
  81. def thaw(self):
  82. self.l1.thaw()
  83. self.l2.thaw()
  84. self.l3.thaw()
  85. self.button.thaw()
  86. def manage(self, nodepath = aspect2d):
  87. if nodepath:
  88. self.button.manage(guiMgr, base.eventMgr.eventHandler,
  89. nodepath.node())
  90. else:
  91. self.button.manage(guiMgr, base.eventMgr.eventHandler)
  92. self.managed = 1
  93. def unmanage(self):
  94. self.button.unmanage()
  95. self.managed = 0
  96. def getPos(self):
  97. return self.button.getPos()
  98. def setPos(self, x, y, node = None):
  99. if node == None:
  100. v3 = Vec3(x, 0., y)
  101. else:
  102. mat = node.getMat(base.render2d)
  103. v3 = Vec3(mat.xformPoint(Point3(x, 0., y)))
  104. self.button.setPos(v3)