Package libavg :: Module button

Source Code for Module libavg.button

  1  avg = None 
  2  g_Player = None 
  3   
  4  try: 
  5      from . import avg 
  6  except ValueError: 
  7      pass 
  8   
9 -class Button:
10 - def __init__(self, node, clickCallback, id=None):
11 global g_Player 12 g_Player = avg.Player.get() 13 self.__node = node 14 self.__clickCallback = clickCallback 15 self.__isDisabled = False 16 self.__id = id 17 upNode = node.getChild(0) 18 node.width = upNode.width 19 node.height = upNode.height 20 if self.__isMouseOver(): 21 self.__setMode(2) 22 else: 23 self.__setMode(0) 24 self.__isClicking = False 25 self.__node.setEventHandler(avg.CURSORDOWN, avg.MOUSE, self.__onDown) 26 self.__node.setEventHandler(avg.CURSOROUT, avg.MOUSE, self.__onOut) 27 self.__node.setEventHandler(avg.CURSOROVER, avg.MOUSE, self.__onOver) 28 self.__node.setEventHandler(avg.CURSORDOWN, avg.TOUCH, self.__onDown) 29 self.__node.setEventHandler(avg.CURSOROUT, avg.TRACK, self.__onOut) 30 self.__node.setEventHandler(avg.CURSOROVER, avg.TRACK, self.__onOver)
31 - def delete(self):
32 self.__node.setEventHandler(avg.CURSORDOWN, avg.MOUSE, None) 33 self.__node.setEventHandler(avg.CURSOROUT, avg.MOUSE, None) 34 self.__node.setEventHandler(avg.CURSOROVER, avg.MOUSE, None) 35 self.__node.setEventHandler(avg.CURSORUP, avg.MOUSE, None)
36 - def __isMouseOver(self):
37 Event = g_Player.getMouseState() 38 relPos = self.__node.getRelPos((Event.x, Event.y)) 39 return (relPos[0] > 0 and relPos[0] < self.__node.width and 40 relPos[1] > 0 and relPos[1] < self.__node.height)
41 - def __onDown(self, event):
42 if self.__isDisabled or self.__isClicking: 43 return 44 self.__node.setEventCapture(event.cursorid) 45 if event.source == avg.MOUSE: 46 self.__node.setEventHandler(avg.CURSORUP, avg.MOUSE, self.__onUp) 47 else: 48 self.__node.setEventHandler(avg.CURSORUP, avg.TOUCH, self.__onUp) 49 self.__isClicking = True 50 self.__setMode(1)
51 - def __onUp(self, event):
52 if self.__isDisabled or not(self.__isClicking): 53 return 54 self.__node.setEventHandler(avg.CURSORUP, avg.MOUSE, None) 55 self.__node.setEventHandler(avg.CURSORUP, avg.TOUCH, None) 56 try: 57 self.__node.releaseEventCapture(event.cursorid) 58 except RuntimeError: 59 # Ignore 'releaseEventCapture called, but cursor not captured' errors. 60 pass 61 if self.__mode == 1: 62 self.__setMode(2) 63 self.__clickCallback(self) 64 self.__isClicking = False
65 - def __onOver(self, event):
66 if self.__isDisabled: 67 return 68 if self.__isClicking: 69 self.__setMode(1) 70 else: 71 self.__setMode(2)
72 - def __onOut(self, event):
73 if self.__isDisabled: 74 return 75 self.__setMode(0)
76 - def __setMode(self, newMode):
77 self.__mode = newMode 78 for i in range(4): 79 childNode = self.__node.getChild(i) 80 if i == newMode: 81 childNode.opacity = 1 82 else: 83 childNode.opacity = 0
84 # TODO: if setDisabled(False) and mouse is over the button it remains disabled
85 - def setDisabled(self, disabled):
86 self.__isDisabled = disabled 87 if disabled: 88 try: 89 self.__node.releaseEventCapture() 90 except: 91 pass 92 self.__setMode(3) 93 else: 94 self.__setMode(0)
95 - def getID(self):
96 return self.__id
97
98 -class Checkbox(Button):
99 - def __init__(self, node, clickCallback=None, id=None):
100 self.__node = node 101 self.__setChecked(False) 102 self.__clickCallback = clickCallback 103 Button.__init__(self, node, self.__onClick, id)
104 - def getState(self):
105 return self.__isChecked
106 - def setState(self, checked):
107 self.__setChecked(checked)
108 - def __setChecked(self, checked):
109 self.__isChecked = checked 110 if checked: 111 self.__node.getChild(4).opacity = 1 112 else: 113 self.__node.getChild(4).opacity = 0
114 - def __onClick(self, Event):
115 self.__setChecked(not(self.__isChecked)) 116 if self.__clickCallback != None: 117 self.__clickCallback(self)
118
119 -class Radio(Checkbox):
120 - def __init__(self, node, clickCallback=None, id=None):
121 self.__node = node 122 self.__setChecked(False) 123 self.__clickCallback = clickCallback 124 Button.__init__(self, node, self.__onClick, id)
125 - def getState(self):
126 return self.__isChecked
127 - def setState(self, checked):
128 self.__setChecked(checked)
129 - def __setChecked(self, checked):
130 self.__isChecked = checked 131 if checked: 132 self.__node.getChild(4).opacity = 1 133 else: 134 self.__node.getChild(4).opacity = 0
135 - def __onClick(self, Event):
136 self.__setChecked(True) 137 if self.__clickCallback != None: 138 self.__clickCallback(self)
139
140 -def init(g_avg):
141 global avg 142 avg = g_avg
143