Mercurial > mamba
annotate mamba/widgets/entrybox.py @ 235:5b021e8498b3
Remove debugging print. Add robustness against being removed in accept_callback
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 23:31:36 +0200 |
parents | d83fd4ebddd3 |
children | 0975a995113b |
rev | line source |
---|---|
228 | 1 import pygame |
2 from pygame.constants import SRCALPHA, KEYDOWN, K_ESCAPE, K_RETURN | |
3 | |
4 from mamba.widgets.base import Container | |
5 from mamba.constants import DELETE_KEYS | |
6 from mamba.widgets.text import TextWidget, TextButton | |
7 | |
8 | |
9 class EntryBox(Container): | |
10 | |
11 def __init__(self, rect, text, init_value, accept_callback=None, | |
12 color='white', entry_color='yellow'): | |
13 super(EntryBox, self).__init__(rect) | |
14 self.text = text | |
15 self.accept_callback = accept_callback | |
16 self.color = color | |
17 self.entry_color = entry_color | |
18 self.value = init_value | |
19 self.prepare() | |
20 self.modal = True | |
21 self.focussable = True | |
22 | |
23 def prepare(self): | |
24 message = TextWidget((self.rect.left + 50, self.rect.top + 2), | |
25 self.text, color=self.color) | |
26 self.rect.width = message.rect.width + 100 | |
27 self.add(message) | |
28 self.entry_text = TextWidget((self.rect.left + 5, | |
29 self.rect.top + message.rect.height + 5), 'Entry: %s' % self.value, | |
30 color=self.entry_color) | |
31 self.add(self.entry_text) | |
32 self.entry_text.add_callback(KEYDOWN, self.edit) | |
33 self.entry_text.focussable = True | |
34 ok_button = TextButton((self.rect.left + 50, | |
35 self.entry_text.rect.bottom), 'Accept') | |
36 ok_button.add_callback('clicked', self.close, True) | |
37 self.add(ok_button) | |
38 cancel_button = ok_button = TextButton( | |
39 (self.entry_text.rect.right + 60, self.entry_text.rect.bottom), | |
40 'Cancel') | |
41 cancel_button.add_callback('clicked', self.close, False) | |
42 self.add(cancel_button) | |
43 | |
44 def draw(self, surface): | |
45 background = pygame.Surface(self.rect.size, SRCALPHA) | |
46 background.fill(pygame.Color('gray')) | |
47 surface.blit(background, self.rect) | |
48 super(EntryBox, self).draw(surface) | |
49 | |
50 def close(self, ev, widget, ok): | |
51 if self.accept_callback and ok: | |
52 if self.accept_callback(self.value): | |
235
5b021e8498b3
Remove debugging print. Add robustness against being removed in accept_callback
Neil Muller <drnlmuller@gmail.com>
parents:
228
diff
changeset
|
53 if self.parent: |
5b021e8498b3
Remove debugging print. Add robustness against being removed in accept_callback
Neil Muller <drnlmuller@gmail.com>
parents:
228
diff
changeset
|
54 self.parent.remove(self) |
228 | 55 # Don't remove if the accept callback failed |
56 return | |
57 self.parent.remove(self) | |
58 | |
59 def edit(self, ev, widget): | |
60 if ev.key == K_ESCAPE: | |
61 self.close(ev, widget, False) | |
62 elif ev.key == K_RETURN: | |
63 self.close(ev, widget, True) | |
64 elif ev.key in DELETE_KEYS: | |
65 if self.value: | |
66 self.value = self.value[:-1] | |
67 self.entry_text.text = 'Entry: %s' % self.value | |
68 self.entry_text.prepare() | |
69 else: | |
70 self.value += ev.unicode | |
71 self.entry_text.text = 'Entry: %s' % self.value | |
72 self.entry_text.prepare() | |
73 return True | |
74 | |
75 def grab_focus(self): | |
76 self.entry_text.grab_focus() |