Mercurial > boomslang
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 |