Mercurial > mamba
view mamba/widgets/entrybox.py @ 228:d83fd4ebddd3
Add entrybox widget
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 23:07:01 +0200 |
parents | |
children | 5b021e8498b3 |
line wrap: on
line source
import pygame from pygame.constants import SRCALPHA, KEYDOWN, K_ESCAPE, K_RETURN from mamba.widgets.base import Container from mamba.constants import DELETE_KEYS from mamba.widgets.text import TextWidget, TextButton class EntryBox(Container): def __init__(self, rect, text, init_value, accept_callback=None, color='white', entry_color='yellow'): super(EntryBox, self).__init__(rect) self.text = text self.accept_callback = accept_callback self.color = color self.entry_color = entry_color self.value = init_value self.prepare() self.modal = True self.focussable = True def prepare(self): message = TextWidget((self.rect.left + 50, self.rect.top + 2), self.text, color=self.color) self.rect.width = message.rect.width + 100 self.add(message) self.entry_text = TextWidget((self.rect.left + 5, self.rect.top + message.rect.height + 5), 'Entry: %s' % self.value, color=self.entry_color) self.add(self.entry_text) self.entry_text.add_callback(KEYDOWN, self.edit) self.entry_text.focussable = True ok_button = TextButton((self.rect.left + 50, self.entry_text.rect.bottom), 'Accept') ok_button.add_callback('clicked', self.close, True) self.add(ok_button) cancel_button = ok_button = TextButton( (self.entry_text.rect.right + 60, self.entry_text.rect.bottom), 'Cancel') cancel_button.add_callback('clicked', self.close, False) self.add(cancel_button) def draw(self, surface): background = pygame.Surface(self.rect.size, SRCALPHA) background.fill(pygame.Color('gray')) surface.blit(background, self.rect) super(EntryBox, self).draw(surface) def close(self, ev, widget, ok): if self.accept_callback and ok: if self.accept_callback(self.value): self.parent.remove(self) # Don't remove if the accept callback failed return self.parent.remove(self) def edit(self, ev, widget): if ev.key == K_ESCAPE: self.close(ev, widget, False) elif ev.key == K_RETURN: self.close(ev, widget, True) elif ev.key in DELETE_KEYS: if self.value: self.value = self.value[:-1] self.entry_text.text = 'Entry: %s' % self.value self.entry_text.prepare() else: self.value += ev.unicode self.entry_text.text = 'Entry: %s' % self.value self.entry_text.prepare() print self.value return True def grab_focus(self): self.entry_text.grab_focus()