Mercurial > boomslang
annotate gamelib/widgets.py @ 236:f82f017db104
Add bridge screenshot
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Fri, 27 Aug 2010 09:06:06 +0200 |
parents | 146cec58ddd8 |
children | 3cedc4f95925 |
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 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
11 from pygame.locals import BLEND_ADD |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
12 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
13 from cursor import CursorWidget |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
14 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
15 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
16 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
|
17 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
18 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
|
19 """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
|
20 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
|
21 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
|
22 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
|
23 self.margin = margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
24 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
|
25 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
26 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
27 bg_color = self.bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
28 self.bg_color = None |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
29 if bg_color is not None: |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
30 new_surface = surface.convert_alpha() |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
31 new_surface.fill(bg_color) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
32 surface.blit(new_surface, surface.get_rect()) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
33 albow.controls.Label.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
34 self._draw_all_no_bg(surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
35 self.bg_color = bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
36 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
37 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
38 pass |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
39 |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
40 class BoomButton(BoomLabel): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
41 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
42 def __init__(self, text, action, screen): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
43 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
|
44 self.bg_color = (0, 0, 0) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
45 self.action = action |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
46 self.screen = screen |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
47 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
48 def mouse_down(self, event): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
49 self.action() |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
50 self.screen.state_widget.mouse_move(event) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
51 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
52 def mouse_move(self, event): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
53 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
|
54 if self.rect.collidepoint(pos): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
55 self.screen.cursor_highlight(True) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
56 |
124 | 57 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
58 class MessageDialog(BoomLabel, CursorWidget): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
59 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
60 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
|
61 CursorWidget.__init__(self, screen) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
62 paras = text.split("\n\n") |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
63 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
|
64 albow.controls.Label.__init__(self, text, **kwds) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
65 self.set_style(style) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
66 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
67 def set_style(self, style): |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
68 self.set_margin(5) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
69 self.border_width = 1 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
70 self.border_color = (0, 0, 0) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
71 self.bg_color = (127, 127, 127) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
72 self.fg_color = (0, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
73 if style == "JIM": |
213
20998c650ce1
Fixed rect_drawer tool and adjusted JIM message background.
Jeremy Thurgood <firxen@gmail.com>
parents:
210
diff
changeset
|
74 self.bg_color = Color(255, 127, 127, 207) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
75 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
|
76 self.border_color = (127, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
77 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
78 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
79 BoomLabel.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
80 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
81 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
82 CursorWidget.draw_all(self, surface) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
83 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
84 def mouse_down(self, event): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
85 self.dismiss() |