view mamba/widgets/listbox.py @ 272:a061dd62127c

Hook up load and new buttons
author Neil Muller <drnlmuller@gmail.com>
date Thu, 15 Sep 2011 17:09:21 +0200
parents
children 170d4a43c00e
line wrap: on
line source

import pygame
from pygame.constants import SRCALPHA

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


class ListBox(Container):

    def __init__(self, rect, text, widget_list, page_length=8):
        super(ListBox, self).__init__(rect)
        self.message = TextWidget(rect, text)
        self.toolbar = ToolListWidget(rect, widget_list, page_length,
                start_key=None)
        self.prepare()
        self.modal = True

    def prepare(self):
        width = max(self.toolbar.rect.width, self.message.rect.width)
        if width > self.message.rect.width:
            message_pos = (self.rect.left + width / 2
                    - self.message.rect.width / 2, self.rect.top)
        else:
            message_pos = (self.rect.left, self.rect.top + 5)
        tool_pos = (self.rect.left,
                self.rect.top + self.message.rect.height + 2)
        self.message.rect.topleft = message_pos
        self.toolbar.rect.topleft = tool_pos
        self.toolbar.fill_page()  # Fix alignment
        self.add(self.message)
        self.add(self.toolbar)
        self.ok_button = ok_button = TextButton((0, 0), 'OK')
        ok_pos = (self.rect.left + width / 2 - ok_button.rect.width / 2,
                tool_pos[1] + 2 + self.toolbar.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(ListBox, self).draw(surface)

    def close(self, ev, widget):
        self.parent.remove(self)
        return True

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