changeset 115:d5aa5f805f00

Add Button class that buttons inherit from. It implements a 'clicked' callback
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 11 Sep 2011 20:40:26 +0200
parents b3985414d4d6
children e5e0a1bedd73
files mamba/habitats/mainmenu.py mamba/widgets/base.py mamba/widgets/imagebutton.py mamba/widgets/text.py
diffstat 4 files changed, 27 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/habitats/mainmenu.py	Sun Sep 11 20:37:51 2011 +0200
+++ b/mamba/habitats/mainmenu.py	Sun Sep 11 20:40:26 2011 +0200
@@ -1,7 +1,6 @@
 """Main menu."""
 
-from pygame.constants import K_RETURN
-from pygame.locals import MOUSEMOTION, KEYDOWN, QUIT
+from pygame.locals import KEYDOWN, QUIT
 import pygame.event
 
 from mamba.constants import ESCAPE_KEYS
@@ -14,10 +13,10 @@
     def __init__(self):
         super(MainMenu, self).__init__()
         start = TextButton((100, 100), "Dev Level", color='white')
-        start.add_callback(KEYDOWN, self.start_event)
+        start.add_callback('clicked', self.start_event)
         self.container.add(start)
         quit = TextButton((100, 200), "Quit", color='white')
-        quit.add_callback(KEYDOWN, self.quit_keydown_event)
+        quit.add_callback('clicked', self.quit_keydown_event)
         self.container.add(quit)
         self.container.add_callback(KEYDOWN, self.keydown_event)
 
@@ -29,16 +28,15 @@
         self.container.add(c)
 
     def start_event(self, ev, widget):
-        if ev.key == K_RETURN:
-            from mamba.habitats.level import LevelHabitat
-            NewHabitatEvent.post(LevelHabitat('dev'))
+        from mamba.habitats.level import LevelHabitat
+        NewHabitatEvent.post(LevelHabitat('dev'))
+        return True
+
+    def quit_keydown_event(self, ev, widget):
+        pygame.event.post(pygame.event.Event(QUIT))
+        return True
 
     def keydown_event(self, ev, widget):
         if ev.key in ESCAPE_KEYS:
             pygame.event.post(pygame.event.Event(QUIT))
             return True
-
-    def quit_keydown_event(self, ev, widget):
-        if ev.key == K_RETURN:
-            pygame.event.post(pygame.event.Event(QUIT))
-            return True
--- a/mamba/widgets/base.py	Sun Sep 11 20:37:51 2011 +0200
+++ b/mamba/widgets/base.py	Sun Sep 11 20:40:26 2011 +0200
@@ -1,7 +1,7 @@
 import collections
 
 import pygame
-from pygame.constants import K_UP, K_DOWN
+from pygame.constants import K_UP, K_DOWN, K_RETURN
 from pygame.locals import MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN
 
 
@@ -30,6 +30,18 @@
         pass
 
 
+class Button(Widget):
+    def event(self, ev):
+        if super(Button, self).event(ev):
+            return True
+        if (ev.type == MOUSEBUTTONDOWN
+                or (ev.type == KEYDOWN and ev.key == K_RETURN)):
+            for callback, args in self.callbacks['clicked']:
+                if callback(ev, self, *args):
+                    return True
+            return False
+
+
 class Container(Widget):
 
     def __init__(self, rect):
--- a/mamba/widgets/imagebutton.py	Sun Sep 11 20:37:51 2011 +0200
+++ b/mamba/widgets/imagebutton.py	Sun Sep 11 20:40:26 2011 +0200
@@ -1,9 +1,10 @@
 import pygame
 
+from mamba.widgets.base import Button
 from mamba.widgets.text import TextWidget
 
 
-class ImageButtonWidget(TextWidget):
+class ImageButtonWidget(Button, TextWidget):
     """Text label with image on the left"""
 
     def __init__(self, rect, image, text, fontsize=16, color='black'):
--- a/mamba/widgets/text.py	Sun Sep 11 20:37:51 2011 +0200
+++ b/mamba/widgets/text.py	Sun Sep 11 20:40:26 2011 +0200
@@ -1,6 +1,6 @@
 import pygame
 
-from mamba.widgets.base import Widget
+from mamba.widgets.base import Widget, Button
 from mamba.data import filepath
 from mamba.constants import DEFAULT_FONT
 
@@ -30,7 +30,7 @@
         surface.blit(self.surface, self.rect)
 
 
-class TextButton(TextWidget):
+class TextButton(Button, TextWidget):
     def __init__(self, *args, **kwargs):
         self.focus_color = kwargs.pop('focus_color', 'red')
         self.padding = kwargs.pop('padding', 10)