diff gamelib/toolbar.py @ 447:f04a2490c35f

The sub-toolbar rewrite, the finally not crashing version
author Neil Muller <drnlmuller@gmail.com>
date Sat, 21 Nov 2009 19:58:49 +0000
parents 0c523d384681
children 92e7a641b4a6
line wrap: on
line diff
--- a/gamelib/toolbar.py	Sat Nov 21 19:33:12 2009 +0000
+++ b/gamelib/toolbar.py	Sat Nov 21 19:58:49 2009 +0000
@@ -51,10 +51,10 @@
         self.repaint()
     return update_counter
 
-class ToolBar(gui.Table):
+class BaseToolBar(gui.Table):
     def __init__(self, gameboard, **params):
         gui.Table.__init__(self, **params)
-        self.group = gui.Group(name='toolbar', value=None)
+        self.group = gui.Group(name='base_toolbar', value=None)
         self._next_tool_value = 0
         self.gameboard = gameboard
         self.cash_counter = mklabel(align=1)
@@ -63,10 +63,9 @@
         self.egg_counter = mklabel(align=1)
         self.day_counter = mklabel(align=1)
         self.killed_foxes = mklabel(align=1)
+        self.add_labels()
 
-        self.make_default_toolbar()
-
-    def make_default_toolbar(self):
+    def add_labels(self):
         self.tr()
         self.td(gui.Spacer(self.rect.w/2, 0))
         self.td(gui.Spacer(self.rect.w/2, 0))
@@ -78,51 +77,6 @@
         self.add_counter(icons.KILLED_FOX, self.killed_foxes)
         self.add_spacer(5)
 
-        self.add_tool_button("Move Hen", constants.TOOL_PLACE_ANIMALS,
-                None, cursors.cursors['select'])
-        self.add_spacer(5)
-
-        self.add_heading("Sell ...")
-        self.add_tool_button("Chicken", constants.TOOL_SELL_CHICKEN,
-                self.gameboard.level.sell_price_chicken, cursors.cursors['sell'])
-        self.add_tool_button("Egg", constants.TOOL_SELL_EGG,
-                self.gameboard.level.sell_price_egg, cursors.cursors['sell'])
-        self.add_tool_button("Building", constants.TOOL_SELL_BUILDING,
-                None, cursors.cursors['sell'])
-        self.add_tool_button("Equipment", constants.TOOL_SELL_EQUIPMENT,
-                None, cursors.cursors['sell'])
-        self.add_spacer(5)
-
-        self.add_heading("Buy ...")
-
-        for building_cls in buildings.BUILDINGS:
-            self.add_tool_button(building_cls.NAME.title(), building_cls,
-                    None, cursors.cursors.get('build', None))
-
-        for equipment_cls in equipment.EQUIPMENT:
-            self.add_tool_button(equipment_cls.NAME.title(),
-                    equipment_cls,
-                    equipment_cls.BUY_PRICE,
-                    cursors.cursors.get('buy', None))
-
-        self.add_spacer(5)
-        self.add_tool_button("Repair", constants.TOOL_REPAIR_BUILDING, None, cursors.cursors['repair'])
-
-        self.add_spacer(5)
-        self.add_tool("Price Reference", self.show_prices)
-
-        #self.add_spacer(5)
-        #self.add_tool("Save Game", self.save_game)
-        #self.add_tool("Load Game", self.load_game)
-
-        self.fin_tool = self.add_tool("Finished Day", self.day_done)
-
-    def day_done(self):
-        if self.gameboard.day:
-            pygame.event.post(engine.START_NIGHT)
-        else:
-            pygame.event.post(engine.FAST_FORWARD)
-
     def start_night(self):
         self.clear_tool()
         self._set_all_disabled(True)
@@ -276,3 +230,103 @@
         width = constants.TOOLBAR_WIDTH
         return width, height
 
+class DefaultToolBar(BaseToolBar):
+    def __init__(self, gameboard, **params):
+        BaseToolBar.__init__(self, gameboard, **params)
+        self.group = gui.Group(name='default_toolbar', value=None)
+        self.make_toolbar()
+
+    def make_toolbar(self):
+        self.add_tool_button("Select chicken", constants.TOOL_SELECT_CHICKENS,
+                None, cursors.cursors['select'])
+
+        self.add_spacer(5)
+
+        self.add_heading("Sell ...")
+        self.add_tool_button("Chicken", constants.TOOL_SELL_CHICKEN,
+                self.gameboard.level.sell_price_chicken, cursors.cursors['sell'])
+        self.add_tool_button("Egg", constants.TOOL_SELL_EGG,
+                self.gameboard.level.sell_price_egg, cursors.cursors['sell'])
+        self.add_tool_button("Building", constants.TOOL_SELL_BUILDING,
+                None, cursors.cursors['sell'])
+        self.add_tool_button("Equipment", constants.TOOL_SELL_EQUIPMENT,
+                None, cursors.cursors['sell'])
+        self.add_spacer(5)
+
+        self.add_heading(" ")
+
+        self.add_tool('Buy building', self.add_building_toolbar)
+
+        self.add_heading("For selection, ...")
+
+        self.add_tool('Buy equipment', self.add_equipment_toolbar)
+
+        self.add_tool_button("Move selected hen", constants.TOOL_PLACE_ANIMALS,
+                None, cursors.cursors['select'])
+
+        self.add_heading(" ")
+        self.add_tool_button("Repair", constants.TOOL_REPAIR_BUILDING, None, cursors.cursors['repair'])
+
+        self.add_heading("Help")
+        self.add_tool("Price Reference", self.show_prices)
+
+        self.add_spacer(5)
+        self.add_tool("Save Game", self.save_game)
+        self.add_tool("Load Game", self.load_game)
+
+        self.add_heading(" ")
+        self.add_spacer(10)
+        self.fin_tool = self.add_tool("Finished Day", self.day_done)
+
+    def add_building_toolbar(self):
+        self.gameboard.change_toolbar(BuildingToolBar(self.gameboard,
+                width=self.style.width))
+
+    def add_equipment_toolbar(self):
+        self.gameboard.change_toolbar(EquipmentToolBar(self.gameboard,
+                width=self.style.width))
+
+    def day_done(self):
+        if self.gameboard.day:
+            pygame.event.post(engine.START_NIGHT)
+        else:
+            pygame.event.post(engine.FAST_FORWARD)
+
+class BuildingToolBar(BaseToolBar):
+    def __init__(self, gameboard, **params):
+        BaseToolBar.__init__(self, gameboard, **params)
+        self.group = gui.Group(name='building_toolbar', value=None)
+        self.make_toolbar()
+
+    def make_toolbar(self):
+        self.gameboard.set_cursor(cursors.cursors['arrow'], None)
+        for building_cls in buildings.BUILDINGS:
+            self.add_tool_button(building_cls.NAME.title(), building_cls,
+                    None, cursors.cursors.get('build', None))
+        self.add_spacer(15)
+        self.add_tool('Done', self.add_default_toolbar)
+
+    def add_default_toolbar(self):
+        self.gameboard.change_toolbar(DefaultToolBar(self.gameboard,
+                width=self.style.width))
+
+class EquipmentToolBar(BaseToolBar):
+    def __init__(self, gameboard, **params):
+        BaseToolBar.__init__(self, gameboard, **params)
+        self.group = gui.Group(name='building_toolbar', value=None)
+        self.make_toolbar()
+
+    def make_toolbar(self):
+        self.gameboard.set_cursor(cursors.cursors['arrow'], None)
+        for equipment_cls in equipment.EQUIPMENT:
+            self.add_tool_button(equipment_cls.NAME.title(),
+                    equipment_cls,
+                    equipment_cls.BUY_PRICE,
+                    cursors.cursors.get('buy', None))
+        self.add_spacer(15)
+        self.add_tool('Done', self.add_default_toolbar)
+
+    def add_default_toolbar(self):
+        self.gameboard.change_toolbar(DefaultToolBar(self.gameboard,
+                width=self.style.width))
+