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