# HG changeset patch # User Stefano Rivera # Date 1315766426 -7200 # Node ID d5aa5f805f00080641cf9b521a7206c107256a01 # Parent b3985414d4d6a2b283a1cd823ef5c6b73cf0279b Add Button class that buttons inherit from. It implements a 'clicked' callback diff -r b3985414d4d6 -r d5aa5f805f00 mamba/habitats/mainmenu.py --- 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 diff -r b3985414d4d6 -r d5aa5f805f00 mamba/widgets/base.py --- 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): diff -r b3985414d4d6 -r d5aa5f805f00 mamba/widgets/imagebutton.py --- 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'): diff -r b3985414d4d6 -r d5aa5f805f00 mamba/widgets/text.py --- 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)