Mercurial > pyntnclick
annotate gamelib/widgets.py @ 282:fe899fb63866
Add option for turning off debugging rects while debugging.
author | Simon Cross <hodgestar+bzr@gmail.com> |
---|---|
date | Fri, 27 Aug 2010 23:09:07 +0200 |
parents | 3cedc4f95925 |
children | 40dd77f71e11 |
rev | line source |
---|---|
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
1 # widgets.py |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
2 # Copyright Boomslang team, 2010 (see COPYING File) |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
3 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
4 """Custom Albow widgets""" |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
5 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
6 import textwrap |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
7 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
8 import albow.controls |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
9 from albow.resource import get_font |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
10 from pygame.color import Color |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
11 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
12 from cursor import CursorWidget |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
13 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
14 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
15 class BoomLabel(albow.controls.Label): |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
16 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
17 def set_margin(self, margin): |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
18 """Add a set_margin method that recalculates the label size""" |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
19 old_margin = self.margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
20 w, h = self.size |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
21 d = margin - old_margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
22 self.margin = margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
23 self.size = (w + 2 * d, h + 2 * d) |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
24 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
25 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
26 bg_color = self.bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
27 self.bg_color = None |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
28 if bg_color is not None: |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
29 new_surface = surface.convert_alpha() |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
30 new_surface.fill(bg_color) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
31 surface.blit(new_surface, surface.get_rect()) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
32 albow.controls.Label.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
33 self._draw_all_no_bg(surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
34 self.bg_color = bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
35 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
36 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
37 pass |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
38 |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
39 class BoomButton(BoomLabel): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
40 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
41 def __init__(self, text, action, screen): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
42 super(BoomLabel, self).__init__(text, font=get_font(20, 'Vera.ttf')) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
43 self.bg_color = (0, 0, 0) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
44 self.action = action |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
45 self.screen = screen |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
46 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
47 def mouse_down(self, event): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
48 self.action() |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
49 self.screen.state_widget.mouse_move(event) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
50 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
51 def mouse_move(self, event): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
52 pos = self.parent.global_to_local(event.pos) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
53 if self.rect.collidepoint(pos): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
54 self.screen.cursor_highlight(True) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
55 |
124 | 56 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
57 class MessageDialog(BoomLabel, CursorWidget): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
58 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
59 def __init__(self, screen, text, wrap_width, style=None, **kwds): |
187
fbfd8e748ac0
Remove screen reference from State.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
60 CursorWidget.__init__(self, screen) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
61 paras = text.split("\n\n") |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
62 text = "\n".join([textwrap.fill(para, wrap_width) for para in paras]) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
63 albow.controls.Label.__init__(self, text, **kwds) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
64 self.set_style(style) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
65 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
66 def set_style(self, style): |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
67 self.set_margin(5) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
68 self.border_width = 1 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
69 self.border_color = (0, 0, 0) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
70 self.bg_color = (127, 127, 127) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
71 self.fg_color = (0, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
72 if style == "JIM": |
213
20998c650ce1
Fixed rect_drawer tool and adjusted JIM message background.
Jeremy Thurgood <firxen@gmail.com>
parents:
210
diff
changeset
|
73 self.bg_color = Color(255, 127, 127, 207) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
74 self.fg_color = (0, 0, 0) |
213
20998c650ce1
Fixed rect_drawer tool and adjusted JIM message background.
Jeremy Thurgood <firxen@gmail.com>
parents:
210
diff
changeset
|
75 self.border_color = (127, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
76 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
77 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
78 BoomLabel.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
79 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
80 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
81 CursorWidget.draw_all(self, surface) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
82 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
83 def mouse_down(self, event): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
84 self.dismiss() |