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)