annotate gamelib/popupmenu.py @ 74:75e1040a1121

Hacky "detail view" widget prototype.
author Jeremy Thurgood <firxen@gmail.com>
date Mon, 23 Aug 2010 21:26:48 +0200
parents 213e47dea4d0
children c76f2fad2af5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
58
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
1 # popmenu.py
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
2 # Copyright Boomslang team (see COPYING file)
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
3 # Popup menu for the game screen
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
4
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
5 from constants import BUTTON_SIZE
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
6 from cursor import CursorWidget
58
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
7
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
8 from albow.menu import Menu
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
9 from albow.controls import Button
58
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
10 from albow.resource import get_font
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
11 from pygame.rect import Rect
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
12
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
13 class PopupMenuButton(Button, CursorWidget):
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
14
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
15 def __init__(self, text, action):
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
16 Button.__init__(self, text, action)
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
17
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
18 self.font = get_font(16, 'Vera.ttf')
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
19 self.set_rect(Rect(0, 0, BUTTON_SIZE, BUTTON_SIZE))
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
20 self.margin = (BUTTON_SIZE - self.font.get_linesize()) / 2
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
21
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
22 def get_cursor(self, event):
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
23 # Draw standard arrow, not the sprite cursor
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
24 return None
58
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
25
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
26 class PopupMenu(Menu):
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
27
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
28 def __init__(self, shell):
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
29 self.shell = shell
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
30 items = [
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
31 ('Resume Game', 'hide'),
69
d4bbb26099cc Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 58
diff changeset
32 ('Quit Game', 'quit'),
58
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
33 ('Exit to Main Menu', 'main_menu'),
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
34 ]
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
35 # albow.menu.Menu ignores title string
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
36 Menu.__init__(self, None, items)
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
37 self.font = get_font(16, 'Vera.ttf')
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
38
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
39 def show_menu(self):
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
40 """Call present, with the correct position"""
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
41 item_height = self.font.get_linesize()
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
42 menu_top = 600 - (len(self.items) * item_height + BUTTON_SIZE)
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
43 item = self.present(self.shell, (0, menu_top))
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
44 if item > -1:
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
45 # A menu item needs to be invoked
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
46 self.invoke_item(item)
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
47