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()