changeset 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 28f03563f4db
files pyntnclick/widgets/base.py pyntnclick/widgets/game.py pyntnclick/widgets/listbox.py pyntnclick/widgets/text.py pyntnclick/widgets/toollist.py
diffstat 5 files changed, 6 insertions(+), 133 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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()
--- 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
 
--- 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)
--- 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()