Mercurial > rinkhals
annotate gamelib/toolbar.py @ 443:4efe57fcc1d7
Anything off the board is invisible.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 21 Nov 2009 18:59:23 +0000 |
parents | f2a55e5e24db |
children | feb9b7a23ef2 |
rev | line source |
---|---|
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
1 import pygame |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
2 from pgu import gui |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
3 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
4 import icons |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
5 import constants |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
6 import buildings |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
7 import equipment |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
8 import cursors |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
9 import engine |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
10 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
11 class OpaqueLabel(gui.Label): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
12 def __init__(self, value, **params): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
13 gui.Label.__init__(self, value, **params) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
14 if 'width' in params: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
15 self._width = params['width'] |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
16 if 'height' in params: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
17 self._height = params['height'] |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
18 self._set_size() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
19 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
20 def _set_size(self): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
21 width, height = self.font.size(self.value) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
22 width = getattr(self, '_width', width) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
23 height = getattr(self, '_height', height) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
24 self.style.width, self.style.height = width, height |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
25 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
26 def paint(self, s): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
27 s.fill(self.style.background) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
28 if self.style.align > 0: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
29 r = s.get_rect() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
30 w, _ = self.font.size(self.value) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
31 s = s.subsurface(r.move((r.w-w, 0)).clip(r)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
32 gui.Label.paint(self, s) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
33 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
34 def update_value(self, value): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
35 self.value = value |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
36 self._set_size() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
37 self.repaint() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
38 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
39 def mklabel(text="", **params): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
40 params.setdefault('color', constants.FG_COLOR) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
41 params.setdefault('width', constants.TOOLBAR_WIDTH/2) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
42 return OpaqueLabel(text, **params) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
43 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
44 def mkcountupdate(counter): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
45 def update_counter(self, value): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
46 getattr(self, counter).update_value("%s " % value) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
47 self.repaint() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
48 return update_counter |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
49 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
50 class ToolBar(gui.Table): |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
51 def __init__(self, gameboard, **params): |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
52 gui.Table.__init__(self, **params) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
53 self.group = gui.Group(name='toolbar', value=None) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
54 self._next_tool_value = 0 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
55 self.gameboard = gameboard |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
56 self.cash_counter = mklabel(align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
57 self.wood_counter = mklabel(align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
58 self.chicken_counter = mklabel(align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
59 self.egg_counter = mklabel(align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
60 self.day_counter = mklabel(align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
61 self.killed_foxes = mklabel(align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
62 |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
63 self.make_default_toolbar() |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
64 |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
65 def make_default_toolbar(self): |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
66 self.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
67 self.td(gui.Spacer(self.rect.w/2, 0)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
68 self.td(gui.Spacer(self.rect.w/2, 0)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
69 self.add_counter(mklabel("Day:"), self.day_counter) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
70 self.add_counter(mklabel("Groats:"), self.cash_counter) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
71 self.add_counter(mklabel("Planks:"), self.wood_counter) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
72 self.add_counter(mklabel("Eggs:"), self.egg_counter) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
73 self.add_counter(icons.CHKN_ICON, self.chicken_counter) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
74 self.add_counter(icons.KILLED_FOX, self.killed_foxes) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
75 self.add_spacer(5) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
76 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
77 self.add_tool_button("Move Hen", constants.TOOL_PLACE_ANIMALS, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
78 None, cursors.cursors['select']) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
79 self.add_spacer(5) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
80 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
81 self.add_heading("Sell ...") |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
82 self.add_tool_button("Chicken", constants.TOOL_SELL_CHICKEN, |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
83 self.gameboard.level.sell_price_chicken, cursors.cursors['sell']) |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
84 self.add_tool_button("Egg", constants.TOOL_SELL_EGG, |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
85 self.gameboard.level.sell_price_egg, cursors.cursors['sell']) |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
86 self.add_tool_button("Building", constants.TOOL_SELL_BUILDING, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
87 None, cursors.cursors['sell']) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
88 self.add_tool_button("Equipment", constants.TOOL_SELL_EQUIPMENT, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
89 None, cursors.cursors['sell']) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
90 self.add_spacer(5) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
91 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
92 self.add_heading("Buy ...") |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
93 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
94 for building_cls in buildings.BUILDINGS: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
95 self.add_tool_button(building_cls.NAME.title(), building_cls, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
96 None, cursors.cursors.get('build', None)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
97 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
98 for equipment_cls in equipment.EQUIPMENT: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
99 self.add_tool_button(equipment_cls.NAME.title(), |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
100 equipment_cls, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
101 equipment_cls.BUY_PRICE, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
102 cursors.cursors.get('buy', None)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
103 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
104 self.add_spacer(5) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
105 self.add_tool_button("Repair", constants.TOOL_REPAIR_BUILDING, None, cursors.cursors['repair']) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
106 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
107 self.add_spacer(5) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
108 self.add_tool("Price Reference", self.show_prices) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
109 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
110 self.fin_tool = self.add_tool("Finished Day", self.day_done) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
111 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
112 def day_done(self): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
113 if self.gameboard.day: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
114 pygame.event.post(engine.START_NIGHT) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
115 else: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
116 pygame.event.post(engine.FAST_FORWARD) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
117 |
434
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
118 def start_night(self): |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
119 self.clear_tool() |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
120 self._set_all_disabled(True) |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
121 self.fin_tool.widget = gui.basic.Label('Fast Forward') |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
122 self.fin_tool.resize() |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
123 self.fin_tool.disabled = False # Can always select this |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
124 self.fin_tool.focusable = True # Can always select this |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
125 |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
126 def start_day(self): |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
127 self.clear_tool() |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
128 self._set_all_disabled(False) |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
129 self.fin_tool.widget = gui.basic.Label('Finished Day') |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
130 self.fin_tool.resize() |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
131 |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
132 def _set_all_disabled(self, state): |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
133 """Sets the disabled flag on all the buttons in the toolbar""" |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
134 for td in self.widgets: |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
135 for widget in td.widgets: |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
136 if hasattr(widget, 'group'): # Tool |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
137 widget.disabled = state |
f2a55e5e24db
Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents:
433
diff
changeset
|
138 widget.focusable = not state |
433
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
139 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
140 def show_prices(self): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
141 """Popup dialog of prices""" |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
142 def make_box(text): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
143 style = { |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
144 'border' : 1 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
145 } |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
146 word = gui.Label(text, style=style) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
147 return word |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
148 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
149 def fix_widths(doc): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
150 """Loop through all the widgets in the doc, and set the |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
151 width of the labels to max + 10""" |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
152 # We need to do this because of possible font issues |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
153 max_width = 0 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
154 for thing in doc.widgets: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
155 if hasattr(thing, 'style'): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
156 # A label |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
157 if thing.style.width > max_width: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
158 max_width = thing.style.width |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
159 for thing in doc.widgets: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
160 if hasattr(thing, 'style'): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
161 thing.style.width = max_width + 10 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
162 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
163 tbl = gui.Table() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
164 tbl.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
165 doc = gui.Document(width=510) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
166 space = doc.style.font.size(" ") |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
167 for header in ['Item', 'Buy Price', 'Sell Price', 'Repair Price']: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
168 doc.add(make_box(header)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
169 doc.br(space[1]) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
170 for building in buildings.BUILDINGS: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
171 doc.add(make_box(building.NAME)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
172 doc.add(make_box('%d' % building.BUY_PRICE)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
173 doc.add(make_box('%d' % building.SELL_PRICE)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
174 if building.BREAKABLE: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
175 doc.add(make_box('%d' % building.REPAIR_PRICE)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
176 else: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
177 doc.add(make_box('N/A')) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
178 doc.br(space[1]) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
179 for equip in equipment.EQUIPMENT: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
180 doc.add(make_box(equip.NAME)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
181 doc.add(make_box('%d' % equip.BUY_PRICE)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
182 doc.add(make_box('%d' % equip.SELL_PRICE)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
183 doc.add(make_box('N/A')) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
184 doc.br(space[1]) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
185 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
186 fix_widths(doc) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
187 for word in "Damaged equipment or buildings will be sold for" \ |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
188 " less than the sell price.".split(): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
189 doc.add(gui.Label(word)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
190 doc.space(space) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
191 close_button = gui.Button("Close") |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
192 tbl.td(doc) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
193 tbl.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
194 tbl.td(close_button, align=1) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
195 dialog = gui.Dialog(gui.Label('Price Reference'), tbl) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
196 close_button.connect(gui.CLICK, dialog.close) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
197 dialog.open() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
198 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
199 update_cash_counter = mkcountupdate('cash_counter') |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
200 update_wood_counter = mkcountupdate('wood_counter') |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
201 update_fox_counter = mkcountupdate('killed_foxes') |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
202 update_chicken_counter = mkcountupdate('chicken_counter') |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
203 update_egg_counter = mkcountupdate('egg_counter') |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
204 update_day_counter = mkcountupdate('day_counter') |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
205 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
206 def add_spacer(self, height): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
207 self.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
208 self.td(gui.Spacer(0, height), colspan=2) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
209 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
210 def add_heading(self, text): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
211 self.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
212 self.td(mklabel(text), colspan=2) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
213 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
214 def add_tool_button(self, text, tool, price=None, cursor=None): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
215 if price is not None: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
216 text = "%s (%s)" % (text, price) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
217 self.add_tool(text, lambda: self.gameboard.set_selected_tool(tool, |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
218 cursor)) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
219 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
220 def add_tool(self, text, func): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
221 label = gui.basic.Label(text) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
222 value = self._next_tool_value |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
223 self._next_tool_value += 1 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
224 tool = gui.Tool(self.group, label, value, width=self.rect.w, style={"padding_left": 0}) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
225 tool.connect(gui.CLICK, func) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
226 self.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
227 self.td(tool, align=-1, colspan=2) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
228 return tool |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
229 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
230 def clear_tool(self): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
231 self.group.value = None |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
232 for item in self.group.widgets: |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
233 item.pcls = "" |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
234 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
235 def add_counter(self, icon, label): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
236 self.tr() |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
237 self.td(icon, width=self.rect.w/2) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
238 self.td(label, width=self.rect.w/2) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
239 |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
240 def resize(self, width=None, height=None): |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
241 width, height = gui.Table.resize(self, width, height) |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
242 width = constants.TOOLBAR_WIDTH |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
243 return width, height |
8643893635e7
Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
244 |