annotate gamelib/widgets.py @ 240:06f3f1be9e2d

Start adding colour to bridge. Initial art towards a cunning plan
author Neil Muller <neil@dip.sun.ac.za>
date Fri, 27 Aug 2010 09:59:12 +0200
parents 146cec58ddd8
children 3cedc4f95925
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
97322b78d1c1 Minor style cleanups
Neil Muller <neil@dip.sun.ac.za>
parents: 122
diff changeset
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()