Mercurial > boomslang
comparison gamelib/gamescreen.py @ 83:4fd56ee2af61 trunk2
Better message dialog.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Mon, 23 Aug 2010 23:47:29 +0200 |
parents | 6bfebfbce42e |
children | c76f2fad2af5 |
comparison
equal
deleted
inserted
replaced
82:49593975fde5 | 83:4fd56ee2af61 |
---|---|
1 # gamescreen.py | 1 # gamescreen.py |
2 # Copyright Boomslang team, 2010 (see COPYING File) | 2 # Copyright Boomslang team, 2010 (see COPYING File) |
3 # Main menu for the game | 3 # Main menu for the game |
4 | 4 |
5 import textwrap | |
6 | |
5 from albow.controls import Button, Label, Widget | 7 from albow.controls import Button, Label, Widget |
6 from albow.layout import Column | 8 from albow.layout import Column |
7 from albow.palette_view import PaletteView | 9 from albow.palette_view import PaletteView |
8 from albow.dialogs import Dialog, wrapped_label | |
9 from pygame import Rect | 10 from pygame import Rect |
10 from pygame.color import Color | 11 from pygame.color import Color |
11 from pygame.locals import BLEND_ADD | 12 from pygame.locals import BLEND_ADD |
12 | 13 |
13 from constants import BUTTON_SIZE | 14 from constants import BUTTON_SIZE |
14 from cursor import CursorSpriteScreen, CursorWidget | 15 from cursor import CursorSpriteScreen, CursorWidget |
15 from hand import HandButton | 16 from hand import HandButton |
16 from popupmenu import PopupMenu, PopupMenuButton | 17 from popupmenu import PopupMenu, PopupMenuButton |
17 from state import initial_state, Item | 18 from state import initial_state, Item |
19 from widgets import BoomLabel | |
20 | |
18 | 21 |
19 class InventoryView(PaletteView, CursorWidget): | 22 class InventoryView(PaletteView, CursorWidget): |
20 | 23 |
21 sel_color = Color("yellow") | 24 sel_color = Color("yellow") |
22 sel_width = 2 | 25 sel_width = 2 |
42 | 45 |
43 def unselect(self): | 46 def unselect(self): |
44 self.state.set_tool(None) | 47 self.state.set_tool(None) |
45 | 48 |
46 | 49 |
50 class MessageDialog(BoomLabel): | |
51 | |
52 def __init__(self, text, wrap_width, **kwds): | |
53 paras = text.split("\n\n") | |
54 text = "\n".join([textwrap.fill(para, wrap_width) for para in paras]) | |
55 Label.__init__(self, text, **kwds) | |
56 self.set_margin(5) | |
57 self.border_width = 1 | |
58 self.border_color = (0, 0, 0) | |
59 self.bg_color = (127, 127, 127) | |
60 self.fg_color = (0, 0, 0) | |
61 | |
62 def mouse_down(self, event): | |
63 self.dismiss() | |
64 | |
65 | |
47 class StateWidget(CursorWidget): | 66 class StateWidget(CursorWidget): |
48 | 67 |
49 def __init__(self, state): | 68 def __init__(self, state): |
50 Widget.__init__(self, Rect(0, 0, 800, 600 - BUTTON_SIZE)) | 69 Widget.__init__(self, Rect(0, 0, 800, 600 - BUTTON_SIZE)) |
51 self.state = state | 70 self.state = state |
55 | 74 |
56 def mouse_down(self, event): | 75 def mouse_down(self, event): |
57 result = self.state.interact(event.pos) | 76 result = self.state.interact(event.pos) |
58 if result and result.message: | 77 if result and result.message: |
59 # Display the message as a modal dialog | 78 # Display the message as a modal dialog |
60 msg_label = wrapped_label(result.message, 60) | 79 MessageDialog(result.message, 60).present() |
61 dialog = Dialog(msg_label) | |
62 dialog.click_outside_response = -1 | |
63 dialog.present() | |
64 # queue a redraw to show updated state | 80 # queue a redraw to show updated state |
65 self.invalidate() | 81 self.invalidate() |
66 | 82 |
67 def mouse_move(self, event): | 83 def mouse_move(self, event): |
68 self.state.mouse_move(event.pos) | 84 self.state.mouse_move(event.pos) |