Mercurial > mamba
annotate mamba/widgets/entrybox.py @ 601:915de6c7d342 default tip
Add support for making the editor fullscreen too.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 14 Jan 2023 19:34:26 +0100 |
parents | 676e18712c42 |
children |
rev | line source |
---|---|
417 | 1 from pygame.constants import K_ESCAPE, K_RETURN, K_KP_ENTER, KEYDOWN |
228 | 2 |
383 | 3 from mamba.widgets.base import Box |
245
0975a995113b
Factor out entry widget a bit
Neil Muller <drnlmuller@gmail.com>
parents:
235
diff
changeset
|
4 from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget |
228 | 5 |
6 | |
383 | 7 class EntryBox(Box): |
228 | 8 |
9 def __init__(self, rect, text, init_value, accept_callback=None, | |
527
676e18712c42
Excise another yellow
Stefano Rivera <stefano@rivera.za.net>
parents:
417
diff
changeset
|
10 color='white', entry_color='red'): |
228 | 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) | |
245
0975a995113b
Factor out entry widget a bit
Neil Muller <drnlmuller@gmail.com>
parents:
235
diff
changeset
|
25 self.entry_text = EntryTextWidget((self.rect.left + 5, |
0975a995113b
Factor out entry widget a bit
Neil Muller <drnlmuller@gmail.com>
parents:
235
diff
changeset
|
26 self.rect.top + message.rect.height + 5), self.value, |
292
feca52afc109
Move editing code around
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
27 focus_color=self.entry_color) |
feca52afc109
Move editing code around
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
28 self.add_callback(KEYDOWN, self.edit) |
228 | 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( | |
381
8b9cfc4f0f01
Use right edge of OK button to place cancel buttons
Neil Muller <drnlmuller@gmail.com>
parents:
337
diff
changeset
|
35 (ok_button.rect.right + 10, self.entry_text.rect.bottom), |
228 | 36 'Cancel') |
37 cancel_button.add_callback('clicked', self.close, False) | |
38 self.add(cancel_button) | |
383 | 39 self.rect.height += 5 |
228 | 40 |
41 def close(self, ev, widget, ok): | |
42 if self.accept_callback and ok: | |
292
feca52afc109
Move editing code around
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
43 self.value = self.entry_text.value |
228 | 44 if self.accept_callback(self.value): |
235
5b021e8498b3
Remove debugging print. Add robustness against being removed in accept_callback
Neil Muller <drnlmuller@gmail.com>
parents:
228
diff
changeset
|
45 if self.parent: |
337
170d4a43c00e
Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents:
292
diff
changeset
|
46 if hasattr(self.parent, 'paused'): |
170d4a43c00e
Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents:
292
diff
changeset
|
47 self.parent.paused = False |
235
5b021e8498b3
Remove debugging print. Add robustness against being removed in accept_callback
Neil Muller <drnlmuller@gmail.com>
parents:
228
diff
changeset
|
48 self.parent.remove(self) |
228 | 49 # Don't remove if the accept callback failed |
50 return | |
337
170d4a43c00e
Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents:
292
diff
changeset
|
51 if hasattr(self.parent, 'paused'): |
170d4a43c00e
Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents:
292
diff
changeset
|
52 self.parent.paused = False |
228 | 53 self.parent.remove(self) |
381
8b9cfc4f0f01
Use right edge of OK button to place cancel buttons
Neil Muller <drnlmuller@gmail.com>
parents:
337
diff
changeset
|
54 return True |
228 | 55 |
56 def edit(self, ev, widget): | |
57 if ev.key == K_ESCAPE: | |
58 self.close(ev, widget, False) | |
292
feca52afc109
Move editing code around
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
59 return True |
417 | 60 elif ev.key in (K_RETURN, K_KP_ENTER): |
228 | 61 self.close(ev, widget, True) |
292
feca52afc109
Move editing code around
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
62 return True |
feca52afc109
Move editing code around
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
63 return False # pass this up to parent |
228 | 64 |
65 def grab_focus(self): | |
66 self.entry_text.grab_focus() |