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()