comparison 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
comparison
equal deleted inserted replaced
291:7f1e8fa3d123 292:feca52afc109
1 import pygame 1 import pygame
2 from pygame.constants import SRCALPHA, K_ESCAPE, K_RETURN, K_UP, K_DOWN 2 from pygame.constants import SRCALPHA, K_ESCAPE, K_RETURN, KEYDOWN
3 3
4 from mamba.widgets.base import Container 4 from mamba.widgets.base import Container
5 from mamba.constants import DELETE_KEYS
6 from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget 5 from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget
7 6
8 7
9 class EntryBox(Container): 8 class EntryBox(Container):
10 9
24 self.text, color=self.color) 23 self.text, color=self.color)
25 self.rect.width = message.rect.width + 100 24 self.rect.width = message.rect.width + 100
26 self.add(message) 25 self.add(message)
27 self.entry_text = EntryTextWidget((self.rect.left + 5, 26 self.entry_text = EntryTextWidget((self.rect.left + 5,
28 self.rect.top + message.rect.height + 5), self.value, 27 self.rect.top + message.rect.height + 5), self.value,
29 update=self.edit, focus_color=self.entry_color) 28 focus_color=self.entry_color)
29 self.add_callback(KEYDOWN, self.edit)
30 self.add(self.entry_text) 30 self.add(self.entry_text)
31 ok_button = TextButton((self.rect.left + 50, 31 ok_button = TextButton((self.rect.left + 50,
32 self.entry_text.rect.bottom), 'Accept') 32 self.entry_text.rect.bottom), 'Accept')
33 ok_button.add_callback('clicked', self.close, True) 33 ok_button.add_callback('clicked', self.close, True)
34 self.add(ok_button) 34 self.add(ok_button)
44 surface.blit(background, self.rect) 44 surface.blit(background, self.rect)
45 super(EntryBox, self).draw(surface) 45 super(EntryBox, self).draw(surface)
46 46
47 def close(self, ev, widget, ok): 47 def close(self, ev, widget, ok):
48 if self.accept_callback and ok: 48 if self.accept_callback and ok:
49 self.value = self.entry_text.value
49 if self.accept_callback(self.value): 50 if self.accept_callback(self.value):
50 if self.parent: 51 if self.parent:
51 self.parent.remove(self) 52 self.parent.remove(self)
52 # Don't remove if the accept callback failed 53 # Don't remove if the accept callback failed
53 return 54 return
54 self.parent.remove(self) 55 self.parent.remove(self)
55 56
56 def edit(self, ev, widget): 57 def edit(self, ev, widget):
57 if ev.key == K_ESCAPE: 58 if ev.key == K_ESCAPE:
58 self.close(ev, widget, False) 59 self.close(ev, widget, False)
60 return True
59 elif ev.key == K_RETURN: 61 elif ev.key == K_RETURN:
60 self.close(ev, widget, True) 62 self.close(ev, widget, True)
61 elif ev.key in DELETE_KEYS: 63 return True
62 if self.value: 64 return False # pass this up to parent
63 self.value = self.value[:-1]
64 self.entry_text.update(self.value)
65 elif ev.key in (K_UP, K_DOWN):
66 return False # pass this up to parent
67 else:
68 self.value += ev.unicode
69 self.entry_text.update(self.value)
70 return True
71 65
72 def grab_focus(self): 66 def grab_focus(self):
73 self.entry_text.grab_focus() 67 self.entry_text.grab_focus()