annotate pyntnclick/widgets/__init__.py @ 636:2748d3afcae5 pyntnclick

Excise albow. Really.
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 12 Feb 2012 00:10:17 +0200
parents 8ff93e53c882
children 2703924c8c70
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
555
c0474fe18b96 Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents: 551
diff changeset
4 # XXX: This should be deleted when albow is gone
c0474fe18b96 Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents: 551
diff changeset
5
79
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
6 """Custom Albow widgets"""
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
7
122
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
8 import textwrap
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
9
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
10 from pygame.color import Color
358
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
11 from pygame.rect import Rect
528
0ce08d5e2acb pyflakes-induced cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 476
diff changeset
12 from pygame.draw import lines as draw_lines
407
c7a6846262e3 Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents: 398
diff changeset
13 from pygame import mouse
79
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
14
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
15 from pyntnclick.widgets.base import Widget
551
38fb04728ac5 Rearrange import.
Jeremy Thurgood <firxen@gmail.com>
parents: 548
diff changeset
16 from pyntnclick.cursor import CursorWidget
122
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
17
576
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 555
diff changeset
18 # XXX: Need a way to get at the constants.
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 555
diff changeset
19 from pyntnclick.constants import GameConstants
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 555
diff changeset
20 BUTTON_SIZE = GameConstants().button_size
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
21 # XXX: Needs a way to get at resource:
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
22 from pyntnclick.resources import Resources
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
23 get_image = Resources("Resources").get_image
576
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 555
diff changeset
24
79
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
25
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
26 class BoomLabel(Widget): # WAS: albow.controls.Label):
79
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
27
374
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
28 trim_line_top = 0
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
29
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
30 def __init__(self, text, width=None, **kwds):
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
31 albow.controls.Label.__init__(self, text, width, **kwds)
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
32 w, h = self.size
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
33 h -= self.trim_line_top * len(self.text.split('\n'))
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
34 self.size = (w, h)
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
35
79
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
36 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
37 """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
38 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
39 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
40 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
41 self.margin = margin
d7c0a702a0b4 Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
42 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
43
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
44 def draw_all(self, surface):
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
45 bg_color = self.bg_color
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
46 self.bg_color = None
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
47 if bg_color is not None:
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
48 new_surface = surface.convert_alpha()
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
49 new_surface.fill(bg_color)
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
50 surface.blit(new_surface, surface.get_rect())
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
51 albow.controls.Label.draw_all(self, surface)
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
52 self._draw_all_no_bg(surface)
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
53 self.bg_color = bg_color
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
54
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
55 def _draw_all_no_bg(self, surface):
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
56 pass
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
57
374
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
58 def draw_with(self, surface, fg, _bg=None):
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
59 m = self.margin
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
60 align = self.align
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
61 width = surface.get_width()
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
62 y = m
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
63 lines = self.text.split("\n")
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
64 font = self.font
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
65 dy = font.get_linesize() - self.trim_line_top
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
66 for line in lines:
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
67 image = font.render(line, True, fg)
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
68 r = image.get_rect()
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
69 image = image.subsurface(r.clip(r.move(0, self.trim_line_top)))
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
70 r.top = y
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
71 if align == 'l':
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
72 r.left = m
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
73 elif align == 'r':
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
74 r.right = width - m
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
75 else:
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
76 r.centerx = width // 2
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
77 surface.blit(image, r)
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
78 y += dy
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
79
358
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
80
217
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
81 class BoomButton(BoomLabel):
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
82
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
83 def __init__(self, text, action, screen):
535
2d87cb7eee50 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 528
diff changeset
84 super(BoomButton, self).__init__(text, font=get_font(20, 'Vera.ttf'),
2d87cb7eee50 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 528
diff changeset
85 margin=4)
217
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
86 self.bg_color = (0, 0, 0)
465
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
87 self._frame_color = Color(50, 50, 50)
217
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
88 self.action = action
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
89 self.screen = screen
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
90
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
91 def mouse_down(self, event):
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
92 self.action()
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
93 self.screen.state_widget.mouse_move(event)
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
94
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
95 def mouse_move(self, event):
603
3ce19d33b51f Rename state to game to not cause confusion with the other state
Neil Muller <neil@dip.sun.ac.za>
parents: 585
diff changeset
96 self.screen.game.highlight_override = True
217
146cec58ddd8 Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents: 213
diff changeset
97
465
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
98 def draw(self, surface):
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
99 super(BoomButton, self).draw(surface)
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
100 r = surface.get_rect()
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
101 w = 2
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
102 top, bottom, left, right = r.top, r.bottom, r.left, r.right
528
0ce08d5e2acb pyflakes-induced cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 476
diff changeset
103 draw_lines(surface, self._frame_color, False, [
535
2d87cb7eee50 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 528
diff changeset
104 (left, bottom), (left, top), (right - w, top), (right - w, bottom)
465
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
105 ], w)
03dcb25d8370 Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 450
diff changeset
106
124
97322b78d1c1 Minor style cleanups
Neil Muller <neil@dip.sun.ac.za>
parents: 122
diff changeset
107
122
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
108 class MessageDialog(BoomLabel, CursorWidget):
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
109
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
110 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
111 CursorWidget.__init__(self, screen)
313
40dd77f71e11 Computer typeface for JIM.
Jeremy Thurgood <firxen@gmail.com>
parents: 264
diff changeset
112 self.set_style(style)
122
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
113 paras = text.split("\n\n")
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
114 text = "\n".join([textwrap.fill(para, wrap_width) for para in paras])
374
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
115 BoomLabel.__init__(self, text, **kwds)
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
116
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
117 def set_style(self, style):
122
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
118 self.set_margin(5)
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
119 self.border_width = 1
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
120 self.border_color = (0, 0, 0)
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
121 self.bg_color = (127, 127, 127)
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
122 self.fg_color = (0, 0, 0)
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
123 if style == "JIM":
356
92cc50d7ce7a New (Fontforge) Monospace font for JIM
Stefano Rivera <stefano@rivera.za.net>
parents: 351
diff changeset
124 self.set(font=get_font(20, "Monospace.ttf"))
374
277a7a0c2cea Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents: 358
diff changeset
125 self.trim_line_top = 10
398
1555677d86f6 Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 376
diff changeset
126 self.bg_color = Color(255, 175, 127, 191)
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
127 self.fg_color = (0, 0, 0)
376
41ee3fc71404 Tweaks to text and JIM background.
Jeremy Thurgood <firxen@gmail.com>
parents: 374
diff changeset
128 self.border_color = (127, 15, 0)
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
129
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
130 def draw_all(self, surface):
398
1555677d86f6 Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 376
diff changeset
131 root_surface = self.get_root().surface
1555677d86f6 Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 376
diff changeset
132 overlay = root_surface.convert_alpha()
1555677d86f6 Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 376
diff changeset
133 overlay.fill(Color(0, 0, 0, 191))
1555677d86f6 Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 376
diff changeset
134 root_surface.blit(overlay, (0, 0))
210
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
135 BoomLabel.draw_all(self, surface)
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
136
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
137 def _draw_all_no_bg(self, surface):
eb101b6fb3dd Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents: 187
diff changeset
138 CursorWidget.draw_all(self, surface)
122
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
139
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
140 def mouse_down(self, event):
d2f84f22def0 Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents: 79
diff changeset
141 self.dismiss()
407
c7a6846262e3 Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents: 398
diff changeset
142 self.screen.state_widget._mouse_move(mouse.get_pos())
c7a6846262e3 Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents: 398
diff changeset
143 for widget in self.screen.state_widget.subwidgets:
c7a6846262e3 Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents: 398
diff changeset
144 widget._mouse_move(mouse.get_pos())
324
3476e8f3b100 Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
145
3476e8f3b100 Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
146 def cursor_highlight(self):
3476e8f3b100 Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
147 return False
358
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
148
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
149
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
150 class HandButton(Widget): # WAS: albow.controls.Image):
358
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
151 """The fancy hand button for the widget"""
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
152
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
153 def __init__(self, action):
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
154 this_image = get_image('items', 'hand.png')
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
155 albow.controls.Image.__init__(self, image=this_image)
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
156 self.action = action
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
157 self.set_rect(Rect(0, 0, BUTTON_SIZE, BUTTON_SIZE))
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
158
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
159 def mouse_down(self, event):
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
160 self.action()
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
161
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
162
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
163 class PopupMenuButton(Widget): # WAS: albow.controls.Button):
358
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
164
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
165 def __init__(self, text, action):
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
166 albow.controls.Button.__init__(self, text, action)
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
167
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
168 self.font = get_font(16, 'Vera.ttf')
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
169 self.set_rect(Rect(0, 0, BUTTON_SIZE, BUTTON_SIZE))
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
170 self.margin = (BUTTON_SIZE - self.font.get_linesize()) / 2
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
171
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
172
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
173 class PopupMenu(Widget): # WAS: albow.menu.Menu, CursorWidget):
358
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
174
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
175 def __init__(self, screen):
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
176 CursorWidget.__init__(self, screen)
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
177 self.screen = screen
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
178 items = [
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
179 ('Quit Game', 'quit'),
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
180 ('Exit to Main Menu', 'main_menu'),
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
181 ]
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
182 # albow.menu.Menu ignores title string
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
183 albow.menu.Menu.__init__(self, None, items)
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
184 self.font = get_font(16, 'Vera.ttf')
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
185
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
186 def show_menu(self):
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
187 """Call present, with the correct position"""
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
188 item_height = self.font.get_linesize()
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
189 menu_top = 600 - (len(self.items) * item_height + BUTTON_SIZE)
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
190 item = self.present(self.shell, (0, menu_top))
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
191 if item > -1:
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
192 # A menu item needs to be invoked
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
193 self.invoke_item(item)
760f6a318d2e Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents: 356
diff changeset
194
535
2d87cb7eee50 pep8 cleanup
Neil Muller <neil@dip.sun.ac.za>
parents: 528
diff changeset
195
636
2748d3afcae5 Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents: 627
diff changeset
196 class BoomImageButton(Widget): # WAS: albow.controls.Image):
450
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
197 """The fancy image button for the screens"""
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
198
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
199 FOLDER = None
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
200
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
201 def __init__(self, filename, x, y, action, enable=None):
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
202 this_image = get_image(self.FOLDER, filename)
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
203 albow.controls.Image.__init__(self, image=this_image)
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
204 self.action = action
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
205 self.set_rect(Rect((x, y), this_image.get_size()))
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
206 self.enable = enable
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
207
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
208 def draw(self, surface):
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
209 if self.is_enabled():
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
210 surface.blit(self.get_image(), self.get_rect())
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
211
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
212 def mouse_down(self, event):
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
213 if self.is_enabled():
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
214 self.action()
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
215
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
216 def is_enabled(self):
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
217 if self.enable:
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
218 return self.enable()
ece69836f00a Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents: 442
diff changeset
219 return True