view mamba/widgets/messagebox.py @ 227:c068190c0b1d

Cleanup copy-n-paste left-over junk
author Neil Muller <drnlmuller@gmail.com>
date Wed, 14 Sep 2011 23:06:14 +0200
parents b92f705bd8ea
children af202e15167d
line wrap: on
line source

import pygame
from pygame.constants import SRCALPHA

from mamba.widgets.base import Container
from mamba.widgets.text import TextWidget, TextButton


class MessageBox(Container):

    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.modal = 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)
        self.ok_button = 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 close(self, ev, widget):
        self.parent.remove(self)
        if self.post_callback:
            self.post_callback()

    def grab_focus(self):
        return self.ok_button.grab_focus()