comparison gamelib/gamescreen.py @ 204:407d23635343

Add a close button to the detail view
author Neil Muller <neil@dip.sun.ac.za>
date Thu, 26 Aug 2010 11:31:56 +0200
parents 9531a22721d1
children eb101b6fb3dd
comparison
equal deleted inserted replaced
203:12c66793db8f 204:407d23635343
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 from albow.controls import Button, Widget 5 from albow.controls import Widget
6 from albow.layout import Row 6 from albow.layout import Row
7 from albow.palette_view import PaletteView 7 from albow.palette_view import PaletteView
8 from albow.screen import Screen 8 from albow.screen import Screen
9 from albow.resource import get_font
9 from pygame import Rect, mouse 10 from pygame import Rect, mouse
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 SCREEN, BUTTON_SIZE, SCENE_SIZE 14 from constants import SCREEN, BUTTON_SIZE, SCENE_SIZE
14 from cursor import CursorWidget 15 from cursor import 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, handle_result 18 from state import initial_state, Item, handle_result
18 from widgets import MessageDialog 19 from widgets import MessageDialog, BoomLabel
19 20
20 21
21 class InventoryView(PaletteView): 22 class InventoryView(PaletteView):
22 23
23 sel_color = Color("yellow") 24 sel_color = Color("yellow")
66 def mouse_down(self, event): 67 def mouse_down(self, event):
67 if event.button != 1: # We have a right/middle click 68 if event.button != 1: # We have a right/middle click
68 self.state.set_tool(None) 69 self.state.set_tool(None)
69 return 70 return
70 if self.subwidgets: 71 if self.subwidgets:
71 self.remove(self.detail) 72 self.clear_detail()
72 self.state.set_current_detail(None)
73 self._mouse_move(event.pos) 73 self._mouse_move(event.pos)
74 else: 74 else:
75 result = self.state.interact(event.pos) 75 result = self.state.interact(event.pos)
76 handle_result(result, self) 76 handle_result(result, self)
77 77
107 w, h = self.state.set_current_detail(detail) 107 w, h = self.state.set_current_detail(detail)
108 self.detail.set_image_rect(Rect(0, 0, w, h)) 108 self.detail.set_image_rect(Rect(0, 0, w, h))
109 self.add_centered(self.detail) 109 self.add_centered(self.detail)
110 self.parent.cursor_highlight(False) 110 self.parent.cursor_highlight(False)
111 111
112 def clear_detail(self):
113 """Hide the detail view"""
114 self.remove(self.detail)
115 self.state.set_current_detail(None)
116
112 117
113 class DetailWindow(Widget): 118 class DetailWindow(Widget):
114 def __init__(self, screen): 119 def __init__(self, screen):
115 Widget.__init__(self) 120 Widget.__init__(self)
116 self.screen = screen 121 self.screen = screen
117 self.state = screen.state 122 self.state = screen.state
118 self.border_width = 5 123 self.border_width = 5
119 self.border_color = (0, 0, 0) 124 self.border_color = (0, 0, 0)
125 self.close = BoomLabel('Close', font=get_font(20, 'Vera.ttf'))
126 self.close.bg_color = (0, 0, 0)
127 self.add(self.close)
128 self.close.mouse_down = self.close_but
129
130 def close_but(self, e):
131 self.parent.clear_detail()
120 132
121 def set_image_rect(self, rect): 133 def set_image_rect(self, rect):
122 bw = self.border_width 134 bw = self.border_width
123 self.image_rect = rect 135 self.image_rect = rect
124 self.image_rect.topleft = (bw, bw) 136 self.image_rect.topleft = (bw, bw)
125 self.set_rect(rect.inflate(bw*2, bw*2)) 137 self.set_rect(rect.inflate(bw*2, bw*2))
138 self.close.rect.midbottom = rect.midbottom
126 139
127 def draw(self, surface): 140 def draw(self, surface):
128 self.state.draw_detail(surface.subsurface(self.image_rect), self.screen) 141 self.state.draw_detail(surface.subsurface(self.image_rect), self.screen)
129 142
130 def mouse_down(self, event): 143 def mouse_down(self, event):