Mercurial > mamba
comparison mamba/widgets/entrybox.py @ 245:0975a995113b
Factor out entry widget a bit
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 00:20:02 +0200 |
parents | 5b021e8498b3 |
children | feca52afc109 |
comparison
equal
deleted
inserted
replaced
244:c629dabe2038 | 245:0975a995113b |
---|---|
1 import pygame | 1 import pygame |
2 from pygame.constants import SRCALPHA, KEYDOWN, K_ESCAPE, K_RETURN | 2 from pygame.constants import SRCALPHA, K_ESCAPE, K_RETURN, K_UP, K_DOWN |
3 | 3 |
4 from mamba.widgets.base import Container | 4 from mamba.widgets.base import Container |
5 from mamba.constants import DELETE_KEYS | 5 from mamba.constants import DELETE_KEYS |
6 from mamba.widgets.text import TextWidget, TextButton | 6 from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget |
7 | 7 |
8 | 8 |
9 class EntryBox(Container): | 9 class EntryBox(Container): |
10 | 10 |
11 def __init__(self, rect, text, init_value, accept_callback=None, | 11 def __init__(self, rect, text, init_value, accept_callback=None, |
16 self.color = color | 16 self.color = color |
17 self.entry_color = entry_color | 17 self.entry_color = entry_color |
18 self.value = init_value | 18 self.value = init_value |
19 self.prepare() | 19 self.prepare() |
20 self.modal = True | 20 self.modal = True |
21 self.focussable = True | |
22 | 21 |
23 def prepare(self): | 22 def prepare(self): |
24 message = TextWidget((self.rect.left + 50, self.rect.top + 2), | 23 message = TextWidget((self.rect.left + 50, self.rect.top + 2), |
25 self.text, color=self.color) | 24 self.text, color=self.color) |
26 self.rect.width = message.rect.width + 100 | 25 self.rect.width = message.rect.width + 100 |
27 self.add(message) | 26 self.add(message) |
28 self.entry_text = TextWidget((self.rect.left + 5, | 27 self.entry_text = EntryTextWidget((self.rect.left + 5, |
29 self.rect.top + message.rect.height + 5), 'Entry: %s' % self.value, | 28 self.rect.top + message.rect.height + 5), self.value, |
30 color=self.entry_color) | 29 update=self.edit, focus_color=self.entry_color) |
31 self.add(self.entry_text) | 30 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, | 31 ok_button = TextButton((self.rect.left + 50, |
35 self.entry_text.rect.bottom), 'Accept') | 32 self.entry_text.rect.bottom), 'Accept') |
36 ok_button.add_callback('clicked', self.close, True) | 33 ok_button.add_callback('clicked', self.close, True) |
37 self.add(ok_button) | 34 self.add(ok_button) |
38 cancel_button = ok_button = TextButton( | 35 cancel_button = ok_button = TextButton( |
62 elif ev.key == K_RETURN: | 59 elif ev.key == K_RETURN: |
63 self.close(ev, widget, True) | 60 self.close(ev, widget, True) |
64 elif ev.key in DELETE_KEYS: | 61 elif ev.key in DELETE_KEYS: |
65 if self.value: | 62 if self.value: |
66 self.value = self.value[:-1] | 63 self.value = self.value[:-1] |
67 self.entry_text.text = 'Entry: %s' % self.value | 64 self.entry_text.update(self.value) |
68 self.entry_text.prepare() | 65 elif ev.key in (K_UP, K_DOWN): |
66 return False # pass this up to parent | |
69 else: | 67 else: |
70 self.value += ev.unicode | 68 self.value += ev.unicode |
71 self.entry_text.text = 'Entry: %s' % self.value | 69 self.entry_text.update(self.value) |
72 self.entry_text.prepare() | |
73 return True | 70 return True |
74 | 71 |
75 def grab_focus(self): | 72 def grab_focus(self): |
76 self.entry_text.grab_focus() | 73 self.entry_text.grab_focus() |