comparison pyntnclick/widgets/base.py @ 559:b7d8b89de71a pyntnclick

Rip out keyboard handling
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 11 Feb 2012 14:42:24 +0200
parents f9f04cb35697
children 1aac5a3b17e1
comparison
equal deleted inserted replaced
558:f9f04cb35697 559:b7d8b89de71a
1 import collections 1 import collections
2 2
3 import pygame 3 import pygame
4 from pygame.locals import (KEYDOWN, K_DOWN, K_LEFT, K_RETURN, K_RIGHT, K_UP, 4 from pygame.locals import (MOUSEBUTTONDOWN, MOUSEBUTTONUP,
5 K_KP_ENTER, MOUSEBUTTONDOWN, MOUSEBUTTONUP,
6 MOUSEMOTION, SRCALPHA, USEREVENT) 5 MOUSEMOTION, SRCALPHA, USEREVENT)
7 6
8 from pyntnclick.constants import UP, DOWN, LEFT, RIGHT
9 from pyntnclick.engine import UserEvent 7 from pyntnclick.engine import UserEvent
10 8
11 9
12 class Widget(object): 10 class Widget(object):
13 11
102 class Button(Widget): 100 class Button(Widget):
103 101
104 def event(self, ev): 102 def event(self, ev):
105 if super(Button, self).event(ev): 103 if super(Button, self).event(ev):
106 return True 104 return True
107 if (ev.type == MOUSEBUTTONDOWN 105 if ev.type == MOUSEBUTTONDOWN:
108 or (ev.type == KEYDOWN and ev.key in (K_RETURN, K_KP_ENTER))):
109 for callback, args in self.callbacks['clicked']: 106 for callback, args in self.callbacks['clicked']:
110 if callback(ev, self, *args): 107 if callback(ev, self, *args):
111 return True 108 return True
112 return False 109 return False
113 110
140 if not child.grab_focus(): 137 if not child.grab_focus():
141 continue 138 continue
142 if child.event(ev): 139 if child.event(ev):
143 return True 140 return True
144 141
145 elif ev.type == KEYDOWN:
146 for i, child in enumerate(self.children):
147 if child.focussed or i == self.focussed_child:
148 if child.event(ev):
149 return True
150 else: 142 else:
151 # Other events go to all children first 143 # Other events go to all children first
152 for child in self.children[:]: 144 for child in self.children[:]:
153 if child.event(ev): 145 if child.event(ev):
154 return True 146 return True
155 if super(Container, self).event(ev): 147 if super(Container, self).event(ev):
156 return True 148 return True
157 if (self.parent is None and ev.type == KEYDOWN
158 and ev.key in (K_UP, K_DOWN)):
159 return self.adjust_focus(1 if ev.key == K_DOWN else -1)
160 149
161 def add(self, widget): 150 def add(self, widget):
162 widget.parent = self 151 widget.parent = self
163 self.children.append(widget) 152 self.children.append(widget)
164 self.rect = self.rect.union(widget.rect) 153 self.rect = self.rect.union(widget.rect)
247 236
248 def __init__(self, width, rect=None): 237 def __init__(self, width, rect=None):
249 super(GridContainer, self).__init__(rect) 238 super(GridContainer, self).__init__(rect)
250 self.width = width 239 self.width = width
251 240
252 def event(self, ev):
253 if (ev.type == KEYDOWN and ev.key in (K_UP, K_DOWN, K_LEFT, K_RIGHT)):
254 direction = None
255 if ev.key == K_UP:
256 direction = UP
257 elif ev.key == K_DOWN:
258 direction = DOWN
259 elif ev.key == K_LEFT:
260 direction = LEFT
261 elif ev.key == K_RIGHT:
262 direction = RIGHT
263 return self.adjust_focus(direction)
264 super(GridContainer, self).event(ev)
265
266 def add(self, widget): 241 def add(self, widget):
267 assert not isinstance(widget, Container) 242 assert not isinstance(widget, Container)
268 assert not widget.modal 243 assert not widget.modal
269 super(GridContainer, self).add(widget) 244 super(GridContainer, self).add(widget)
270 245