Mercurial > boomslang
comparison pyntnclick/widgets/entrybox.py @ 555:c0474fe18b96 pyntnclick
Copy in widgets from mamba (currently unused)
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 11 Feb 2012 14:09:46 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
554:99a1420097df | 555:c0474fe18b96 |
---|---|
1 from pygame.constants import K_ESCAPE, K_RETURN, K_KP_ENTER, KEYDOWN | |
2 | |
3 from mamba.widgets.base import Box | |
4 from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget | |
5 | |
6 | |
7 class EntryBox(Box): | |
8 | |
9 def __init__(self, rect, text, init_value, accept_callback=None, | |
10 color='white', entry_color='red'): | |
11 super(EntryBox, self).__init__(rect) | |
12 self.text = text | |
13 self.accept_callback = accept_callback | |
14 self.color = color | |
15 self.entry_color = entry_color | |
16 self.value = init_value | |
17 self.prepare() | |
18 self.modal = True | |
19 | |
20 def prepare(self): | |
21 message = TextWidget((self.rect.left + 50, self.rect.top + 2), | |
22 self.text, color=self.color) | |
23 self.rect.width = message.rect.width + 100 | |
24 self.add(message) | |
25 self.entry_text = EntryTextWidget((self.rect.left + 5, | |
26 self.rect.top + message.rect.height + 5), self.value, | |
27 focus_color=self.entry_color) | |
28 self.add_callback(KEYDOWN, self.edit) | |
29 self.add(self.entry_text) | |
30 ok_button = TextButton((self.rect.left + 50, | |
31 self.entry_text.rect.bottom), 'Accept') | |
32 ok_button.add_callback('clicked', self.close, True) | |
33 self.add(ok_button) | |
34 cancel_button = ok_button = TextButton( | |
35 (ok_button.rect.right + 10, self.entry_text.rect.bottom), | |
36 'Cancel') | |
37 cancel_button.add_callback('clicked', self.close, False) | |
38 self.add(cancel_button) | |
39 self.rect.height += 5 | |
40 | |
41 def close(self, ev, widget, ok): | |
42 if self.accept_callback and ok: | |
43 self.value = self.entry_text.value | |
44 if self.accept_callback(self.value): | |
45 if self.parent: | |
46 if hasattr(self.parent, 'paused'): | |
47 self.parent.paused = False | |
48 self.parent.remove(self) | |
49 # Don't remove if the accept callback failed | |
50 return | |
51 if hasattr(self.parent, 'paused'): | |
52 self.parent.paused = False | |
53 self.parent.remove(self) | |
54 return True | |
55 | |
56 def edit(self, ev, widget): | |
57 if ev.key == K_ESCAPE: | |
58 self.close(ev, widget, False) | |
59 return True | |
60 elif ev.key in (K_RETURN, K_KP_ENTER): | |
61 self.close(ev, widget, True) | |
62 return True | |
63 return False # pass this up to parent | |
64 | |
65 def grab_focus(self): | |
66 self.entry_text.grab_focus() |