annotate mamba/widgets/messagebox.py @ 532:f2f7a91aae95

Red died text
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 18 Sep 2011 01:14:50 +0200
parents ce3a50c4caaa
children 8604b8d660f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
383
08a84134ccbf Use Box base class
Neil Muller <drnlmuller@gmail.com>
parents: 337
diff changeset
1 from mamba.widgets.base import Box
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
2 from mamba.widgets.text import TextWidget, TextButton
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
3
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4
383
08a84134ccbf Use Box base class
Neil Muller <drnlmuller@gmail.com>
parents: 337
diff changeset
5 class MessageBox(Box):
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
6
532
f2f7a91aae95 Red died text
Stefano Rivera <stefano@rivera.za.net>
parents: 478
diff changeset
7 def __init__(self, rect, text, post_callback=None, color='red'):
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
8 super(MessageBox, self).__init__(rect)
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
9 self.text = text
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
10 self.post_callback = post_callback
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
11 self.color = color
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
12 self.prepare()
210
b92f705bd8ea Modal dialogs, and focus stealing bugfixes
Stefano Rivera <stefano@rivera.za.net>
parents: 190
diff changeset
13 self.modal = True
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
14
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
15 def prepare(self):
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
16 cont = TextWidget((0, 0), "Press [OK] or Enter to continue")
303
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
17 widgets = []
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
18 width = cont.rect.width
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
19 for line in self.text.split('\n'):
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
20 message = TextWidget((0, 0), line, color=self.color)
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
21 widgets.append(message)
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
22 width = max(width, message.rect.width)
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
23 widgets.append(cont)
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
24 top = self.rect.top + 10
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
25 left = self.rect.left + 5
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
26 for widget in widgets:
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
27 pos = (left + width / 2 - widget.rect.width / 2, top)
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
28 widget.rect.topleft = pos
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
29 top += widget.rect.height + 5
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
30 self.add(widget)
210
b92f705bd8ea Modal dialogs, and focus stealing bugfixes
Stefano Rivera <stefano@rivera.za.net>
parents: 190
diff changeset
31 self.ok_button = ok_button = TextButton((0, 0), 'OK')
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
32 ok_pos = (self.rect.left + 5 + width / 2 - ok_button.rect.width / 2,
303
af202e15167d Multi-line messages
Neil Muller <drnlmuller@gmail.com>
parents: 227
diff changeset
33 top + 5)
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
34 ok_button.rect.topleft = ok_pos
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
35 ok_button.add_callback('clicked', self.close)
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
36 self.add(ok_button)
383
08a84134ccbf Use Box base class
Neil Muller <drnlmuller@gmail.com>
parents: 337
diff changeset
37 self.rect.height += 5
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
38
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
39 def close(self, ev, widget):
337
170d4a43c00e Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents: 303
diff changeset
40 if hasattr(self.parent, 'paused'):
170d4a43c00e Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents: 303
diff changeset
41 self.parent.paused = False
190
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
42 self.parent.remove(self)
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
43 if self.post_callback:
c9cee22934be Add messagebox widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
44 self.post_callback()
454
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents: 383
diff changeset
45 if getattr(self, 'parent_modal', False):
8cfa757dd7d3 Epic level editor reworking.
Jeremy Thurgood <firxen@gmail.com>
parents: 383
diff changeset
46 self.parent.modal = True
210
b92f705bd8ea Modal dialogs, and focus stealing bugfixes
Stefano Rivera <stefano@rivera.za.net>
parents: 190
diff changeset
47
b92f705bd8ea Modal dialogs, and focus stealing bugfixes
Stefano Rivera <stefano@rivera.za.net>
parents: 190
diff changeset
48 def grab_focus(self):
b92f705bd8ea Modal dialogs, and focus stealing bugfixes
Stefano Rivera <stefano@rivera.za.net>
parents: 190
diff changeset
49 return self.ok_button.grab_focus()