Mercurial > mamba
changeset 190:c9cee22934be
Add messagebox widget
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 17:43:52 +0200 |
parents | aeacd8dfeb07 |
children | 454f7552e863 |
files | mamba/widgets/messagebox.py |
diffstat | 1 files changed, 59 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mamba/widgets/messagebox.py Wed Sep 14 17:43:52 2011 +0200 @@ -0,0 +1,59 @@ +import pygame +from pygame.constants import SRCALPHA, K_RETURN, KEYDOWN + +from mamba.widgets.base import Container +from mamba.widgets.text import TextWidget, TextButton + + +class MessageBox(Container): + fontcache = {} + + def __init__(self, rect, text, post_callback=None, color='white'): + super(MessageBox, self).__init__(rect) + self.text = text + self.post_callback = post_callback + self.color = color + self.prepare() + self.focussable = True + + def prepare(self): + cont = TextWidget((0, 0), "Press [OK] or Enter to continue") + message = TextWidget((0, 0), self.text, color=self.color) + width = max(cont.rect.width, message.rect.width) + if width > message.rect.width: + cont_pos = (self.rect.left + 5, + self.rect.top + 10 + message.rect.height) + message_pos = (self.rect.left + 5 + width / 2 + - message.rect.width / 2, self.rect.top + 5) + else: + message_pos = (self.rect.left + 5, self.rect.top + 5) + cont_pos = (self.rect.left + 5 + width / 2 + - message.rect.width / 2, + self.rect.top + 10 + message.rect.height) + message.rect.topleft = message_pos + cont.rect.topleft = cont_pos + self.add(message) + self.add(cont) + ok_button = TextButton((0, 0), 'OK') + ok_pos = (self.rect.left + 5 + width / 2 - ok_button.rect.width / 2, + cont_pos[1] + 5 + cont.rect.height) + ok_button.rect.topleft = ok_pos + ok_button.add_callback('clicked', self.close) + self.add(ok_button) + + def draw(self, surface): + background = pygame.Surface(self.rect.size, SRCALPHA) + background.fill(pygame.Color('gray')) + surface.blit(background, self.rect) + super(MessageBox, self).draw(surface) + + def event(self, ev): + if ev.type == KEYDOWN and ev.key == K_RETURN: + self.close(ev, self) + return True + return super(MessageBox, self).event(ev) + + def close(self, ev, widget): + self.parent.remove(self) + if self.post_callback: + self.post_callback()