# HG changeset patch # User Stefano Rivera # Date 1328964144 -7200 # Node ID b7d8b89de71adb039bd0a6fbd33ab536fb479622 # Parent f9f04cb35697f13794d2b4f170b2a1999bc9a163 Rip out keyboard handling diff -r f9f04cb35697 -r b7d8b89de71a pyntnclick/widgets/base.py --- a/pyntnclick/widgets/base.py Sat Feb 11 14:33:23 2012 +0200 +++ b/pyntnclick/widgets/base.py Sat Feb 11 14:42:24 2012 +0200 @@ -1,11 +1,9 @@ import collections import pygame -from pygame.locals import (KEYDOWN, K_DOWN, K_LEFT, K_RETURN, K_RIGHT, K_UP, - K_KP_ENTER, MOUSEBUTTONDOWN, MOUSEBUTTONUP, +from pygame.locals import (MOUSEBUTTONDOWN, MOUSEBUTTONUP, MOUSEMOTION, SRCALPHA, USEREVENT) -from pyntnclick.constants import UP, DOWN, LEFT, RIGHT from pyntnclick.engine import UserEvent @@ -104,8 +102,7 @@ def event(self, ev): if super(Button, self).event(ev): return True - if (ev.type == MOUSEBUTTONDOWN - or (ev.type == KEYDOWN and ev.key in (K_RETURN, K_KP_ENTER))): + if ev.type == MOUSEBUTTONDOWN: for callback, args in self.callbacks['clicked']: if callback(ev, self, *args): return True @@ -142,11 +139,6 @@ if child.event(ev): return True - elif ev.type == KEYDOWN: - for i, child in enumerate(self.children): - if child.focussed or i == self.focussed_child: - if child.event(ev): - return True else: # Other events go to all children first for child in self.children[:]: @@ -154,9 +146,6 @@ return True if super(Container, self).event(ev): return True - if (self.parent is None and ev.type == KEYDOWN - and ev.key in (K_UP, K_DOWN)): - return self.adjust_focus(1 if ev.key == K_DOWN else -1) def add(self, widget): widget.parent = self @@ -249,20 +238,6 @@ super(GridContainer, self).__init__(rect) self.width = width - def event(self, ev): - if (ev.type == KEYDOWN and ev.key in (K_UP, K_DOWN, K_LEFT, K_RIGHT)): - direction = None - if ev.key == K_UP: - direction = UP - elif ev.key == K_DOWN: - direction = DOWN - elif ev.key == K_LEFT: - direction = LEFT - elif ev.key == K_RIGHT: - direction = RIGHT - return self.adjust_focus(direction) - super(GridContainer, self).event(ev) - def add(self, widget): assert not isinstance(widget, Container) assert not widget.modal diff -r f9f04cb35697 -r b7d8b89de71a pyntnclick/widgets/game.py --- a/pyntnclick/widgets/game.py Sat Feb 11 14:33:23 2012 +0200 +++ b/pyntnclick/widgets/game.py Sat Feb 11 14:42:24 2012 +0200 @@ -1,10 +1,7 @@ """Display the game area.""" from pygame.rect import Rect -from pygame.locals import (KEYDOWN, K_LEFT, K_RIGHT, K_DOWN, K_UP, K_p, - K_SPACE, K_PAUSE) -from pyntnclick.constants import UP, DOWN, LEFT, RIGHT from pyntnclick.widgets.base import Widget from pyntnclick.engine import FlipArrowsEvent @@ -12,31 +9,11 @@ class GameWidget(Widget): def __init__(self, world, offset=(0, 0)): self.world = world - self.actions = self.create_action_map() rect = Rect(offset, world.get_size()) super(GameWidget, self).__init__(rect) self.focussable = True - self.add_callback(KEYDOWN, self.action_callback) self.add_callback(FlipArrowsEvent, self.flip_arrows) - def create_action_map(self): - actions = {} - pause = (self.world.toggle_pause, ()) - actions[K_LEFT] = (self.world.snake.send_new_direction, (LEFT,)) - actions[K_RIGHT] = (self.world.snake.send_new_direction, (RIGHT,)) - actions[K_DOWN] = (self.world.snake.send_new_direction, (DOWN,)) - actions[K_UP] = (self.world.snake.send_new_direction, (UP,)) - actions[K_p] = pause - actions[K_SPACE] = pause - actions[K_PAUSE] = pause - return actions - - def action_callback(self, ev, widget): - if ev.key in self.actions: - func, args = self.actions[ev.key] - func(*args) - return True - def flip_arrows(self, ev, widget): self.world.level.flip_arrows() @@ -46,5 +23,4 @@ def restart(self): self.world.restart() - self.actions = self.create_action_map() self.grab_focus() diff -r f9f04cb35697 -r b7d8b89de71a pyntnclick/widgets/listbox.py --- a/pyntnclick/widgets/listbox.py Sat Feb 11 14:33:23 2012 +0200 +++ b/pyntnclick/widgets/listbox.py Sat Feb 11 14:42:24 2012 +0200 @@ -8,8 +8,7 @@ def __init__(self, rect, text, widget_list, page_length=8): super(ListBox, self).__init__(rect) self.message = TextWidget(rect, text) - self.toolbar = ToolListWidget(rect, widget_list, page_length, - start_key=None) + self.toolbar = ToolListWidget(rect, widget_list, page_length) self.prepare() self.modal = True diff -r f9f04cb35697 -r b7d8b89de71a pyntnclick/widgets/text.py --- a/pyntnclick/widgets/text.py Sat Feb 11 14:33:23 2012 +0200 +++ b/pyntnclick/widgets/text.py Sat Feb 11 14:42:24 2012 +0200 @@ -1,6 +1,5 @@ import pygame -from pygame.constants import (SRCALPHA, KEYDOWN, K_ESCAPE, K_RETURN, K_UP, - K_DOWN, K_SPACE, K_KP_ENTER) +from pygame.constants import SRCALPHA from pyntnclick.constants import COLOR, FONT_SIZE, FOCUS_COLOR, DELETE_KEYS from pyntnclick.widgets.base import Widget, Button @@ -75,57 +74,3 @@ if self._focussed != self.focussed: self.prepare() super(TextButton, self).draw(surface) - - def event(self, ev): - if ev.type == KEYDOWN and ev.key == K_SPACE: - return self.forced_click() - return super(TextButton, self).event(ev) - - -class EntryTextWidget(TextWidget): - def __init__(self, rect, text, **kwargs): - self.focus_color = kwargs.pop('focus_color', FOCUS_COLOR) - self.prompt = kwargs.pop('prompt', 'Entry:') - self.value = text - text = '%s %s' % (self.prompt, text) - self.base_color = COLOR - self.update_func = kwargs.pop('update', None) - super(EntryTextWidget, self).__init__(rect, text, **kwargs) - if not isinstance(self.focus_color, pygame.Color): - self.focus_color = pygame.Color(self.focus_color) - self.focussable = True - self.base_color = self.color - self.add_callback(KEYDOWN, self.update) - - def update(self, ev, widget): - old_value = self.value - if ev.key in DELETE_KEYS: - if self.value: - self.value = self.value[:-1] - elif ev.key in (K_ESCAPE, K_RETURN, K_KP_ENTER, K_UP, K_DOWN): - return False # ignore these - else: - self.value += ev.unicode - if old_value != self.value: - self.text = '%s %s' % (self.prompt, self.value) - self.prepare() - return True - - def prepare(self): - self.color = self.focus_color if self.focussed else self.base_color - super(EntryTextWidget, self).prepare() - self._focussed = self.focussed - - def draw(self, surface): - if self._focussed != self.focussed: - self.prepare() - super(EntryTextWidget, self).draw(surface) - if self.focussed: - text_rect = self.text_rect - # Warning, 00:30 AM code on the last Saturday - cur_start = text_rect.move( - (self.rect.left + 2, self.rect.top + 3)).topright - cur_end = text_rect.move( - (self.rect.left + 2, self.rect.top - 3)).bottomright - pygame.draw.line(surface, self.focus_color, - cur_start, cur_end, 2) diff -r f9f04cb35697 -r b7d8b89de71a pyntnclick/widgets/toollist.py --- a/pyntnclick/widgets/toollist.py Sat Feb 11 14:33:23 2012 +0200 +++ b/pyntnclick/widgets/toollist.py Sat Feb 11 14:42:24 2012 +0200 @@ -1,5 +1,3 @@ -from pygame.constants import KEYUP, K_1, K_PAGEDOWN, K_PAGEUP - from pyntntclick.widgets.base import Container from pyntntclick.widgets.text import TextButton @@ -7,37 +5,29 @@ class ToolListWidget(Container): """List of other widgets, with some paging trickery""" - def __init__(self, rect, widget_list, page_length, start_key=K_1, - padding=2): + def __init__(self, rect, widget_list, page_length, + padding=2): widget_list.sort(key=lambda w: w.text) self.widget_list = widget_list self.page_length = page_length self.padding = padding self.page = 0 - self.start_key = start_key super(ToolListWidget, self).__init__(rect) self.prev_but = None self.next_but = None self.fill_page() - # We do this to avoid needing to worry about focus too much - self.add_callback(KEYUP, self.handle_key) self.focussable = True def fill_page(self): for widget in self.children[:]: self.remove(widget) - self.hot_keys = {} start_page = self.page * self.page_length end_page = start_page + self.page_length button_height = self.rect.top + self.padding button_left = self.rect.left + self.padding - key = self.start_key for widget in self.widget_list[start_page:end_page]: widget.rect.topleft = (button_left, button_height) self.add(widget) - if key: - self.hot_keys[key] = widget - key += 1 button_height += widget.rect.height + self.padding if not self.prev_but: self.prev_but = TextButton((button_left, button_height), @@ -67,18 +57,6 @@ widget.rect.width = self.rect.width - 2 widget.prepare() - def handle_key(self, ev, widget): - if hasattr(self.parent, 'paused') and self.parent.paused: - # No hotjets when pasued - return False - if ev.key in self.hot_keys: - widget = self.hot_keys[ev.key] - return widget.forced_click() - elif ev.key == K_PAGEDOWN and self.prev_but: - return self.prev_but.forced_click() - elif ev.key == K_PAGEUP and self.next_but: - return self.next_but.forced_click() - def change_page(self, ev, widget, change): self.page += change self.fill_page()