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