|
@@ -0,0 +1,59 @@
|
|
|
|
|
+from direct.gui.DirectGui import *
|
|
|
|
|
+from pandac.PandaModules import *
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class DirectCheckBox(DirectButton):
|
|
|
|
|
+ """
|
|
|
|
|
+ DirectCheckBox(parent) - Create a DirectGuiWidget which responds
|
|
|
|
|
+ to mouse clicks by setting a state of True or False and executes
|
|
|
|
|
+ a callback function if defined.
|
|
|
|
|
+
|
|
|
|
|
+ Uses an image swap rather than a text change to indicate state.
|
|
|
|
|
+ """
|
|
|
|
|
+ def __init__(self, parent = None, **kw):
|
|
|
|
|
+
|
|
|
|
|
+ optiondefs = (
|
|
|
|
|
+ # Define type of DirectGuiWidget
|
|
|
|
|
+ ('pgFunc', PGButton, None),
|
|
|
|
|
+ ('numStates', 4, None),
|
|
|
|
|
+ ('state', DGG.NORMAL, None),
|
|
|
|
|
+ ('relief', DGG.RAISED, None),
|
|
|
|
|
+ ('invertedFrames', (1,), None),
|
|
|
|
|
+ # Command to be called on button click
|
|
|
|
|
+ ('command', None, None),
|
|
|
|
|
+ ('extraArgs', [], None),
|
|
|
|
|
+ # Which mouse buttons can be used to click the button
|
|
|
|
|
+ ('commandButtons', (DGG.LMB,), self.setCommandButtons),
|
|
|
|
|
+ # Sounds to be used for button events
|
|
|
|
|
+ ('rolloverSound', DGG.getDefaultRolloverSound(), self.setRolloverSound),
|
|
|
|
|
+ ('clickSound', DGG.getDefaultClickSound(), self.setClickSound),
|
|
|
|
|
+ # Can only be specified at time of widget contruction
|
|
|
|
|
+ # Do the text/graphics appear to move when the button is clicked
|
|
|
|
|
+ ('pressEffect', 1, DGG.INITOPT),
|
|
|
|
|
+ ('uncheckedImage', None, None),
|
|
|
|
|
+ ('checkedImage', None, None),
|
|
|
|
|
+ ('isChecked', False, None),
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ # Merge keyword options with default options
|
|
|
|
|
+ self.defineoptions(kw, optiondefs)
|
|
|
|
|
+
|
|
|
|
|
+ DirectButton.__init__(self,parent)
|
|
|
|
|
+
|
|
|
|
|
+ self.initialiseoptions(DirectCheckBox)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ def commandFunc(self, event):
|
|
|
|
|
+ self['isChecked'] = not self['isChecked']
|
|
|
|
|
+
|
|
|
|
|
+ if self['isChecked']:
|
|
|
|
|
+ self['image'] = self['checkedImage']
|
|
|
|
|
+ else:
|
|
|
|
|
+ self['image'] = self['uncheckedImage']
|
|
|
|
|
+
|
|
|
|
|
+ self.setImage()
|
|
|
|
|
+
|
|
|
|
|
+ if self['command']:
|
|
|
|
|
+ # Pass any extra args to command
|
|
|
|
|
+ apply(self['command'], [self['isChecked']] + self['extraArgs'])
|
|
|
|
|
+
|