annotate src/parpg/gui/inventorygui.py @ 150:3fc7cfa80771

Modified InventoryGrid to set a name for each slot containing the index. Added getSlot method to InventoryGrid. Renamed InventoryGUI class to CharacterGUI. Added InventoryGUI class which handles the inventory part of the CharacterGUI. An InventoryGUI instance is now created in CharacterGUI.
author KarstenBock@gmx.net
date Wed, 05 Oct 2011 12:59:22 +0200
parents eab3e1e52497
children 2ba7c6d8f738
rev   line source
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
1 # This file is part of PARPG.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
2
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
3 # PARPG is free software: you can redistribute it and/or modify
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
4 # it under the terms of the GNU General Public License as published by
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
5 # the Free Software Foundation, either version 3 of the License, or
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
6 # (at your option) any later version.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
7
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
8 # PARPG is distributed in the hope that it will be useful,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
11 # GNU General Public License for more details.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
12
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
13 # You should have received a copy of the GNU General Public License
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
14 # along with PARPG. If not, see <http://www.gnu.org/licenses/>.
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
15 import logging
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
16 from types import StringTypes
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
17
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
18 from fife.extensions.pychan.tools import callbackWithArguments as cbwa
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
19 from fife.extensions import pychan
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
20 from fife.extensions.pychan.attrs import UnicodeAttr
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
21
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
22 from parpg.gui import drag_drop_data as data_drag
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
23 from parpg.gui.containergui_base import ContainerGUIBase
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
24 from parpg.objects.action import ACTIONS
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
25 from parpg.components import equip
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
26
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
27 logger = logging.getLogger('action')
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
28
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
29 class EquipmentSlot(pychan.VBox):
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
30 def __init__(self, min_size=(50, 50),
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
31 max_size=(50, 50), margins=None,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
32 **kwargs):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
33 pychan.VBox.__init__(self, min_size=min_size, max_size=max_size,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
34 **kwargs)
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
35 self.background_image = 'gui/inv_images/inv_background.png'
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
36 icon = pychan.Icon(name="Icon")
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
37 self.addChild(icon)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
38 self.adaptLayout()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
39 if self.parent is not None:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
40 self.beforeShow()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
41
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
42 @property
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
43 def image(self):
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
44 icon = self.findChildByName("Icon")
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
45 return icon.image
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
46
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
47 @image.setter
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
48 def image(self, image):
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
49 icon = self.findChildByName("Icon")
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
50 icon.image = image
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
51
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
52 class InventoryGrid(pychan.VBox):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
53 ATTRIBUTES = pychan.VBox.ATTRIBUTES + [pychan.attrs.PointAttr('grid_size')]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
54
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
55 def _setNColumns(self, n_columns):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
56 n_rows = self.grid_size[1]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
57 self.grid_size = (n_columns, n_rows)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
58
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
59 def _getNColumns(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
60 n_columns = self.grid_size[0]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
61 return n_columns
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
62 n_columns = property(fget=_getNColumns, fset=_setNColumns)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
63
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
64 def _setNRows(self, n_rows):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
65 n_columns = self.grid_size[0]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
66 self.grid_size = (n_columns, n_rows)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
67
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
68 def _getNRows(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
69 n_rows = self.grid_size[1]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
70 return n_rows
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
71 n_rows = property(fget=_getNRows, fset=_getNColumns)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
72
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
73 def _setGridSize(self, grid_size):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
74 n_columns, n_rows = grid_size
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
75 self.removeAllChildren()
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
76 for row_n in xrange(n_rows):
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
77 row_size = (n_columns * 50, 50)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
78 row = pychan.HBox(min_size=row_size, max_size=row_size,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
79 padding=self.padding)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
80 row.border_size = 1
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
81 row.opaque = 0
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
82 for column_n in xrange(n_columns):
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
83 slot = pychan.Icon(min_size=(50, 50), max_size=(50, 50))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
84 slot.border_size = 1
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
85 slot.name = "Slot_%d" % (row_n * n_columns + column_n)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
86 row.addChild(slot)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
87 self.addChild(row)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
88 self.min_size = ((n_columns * 50) + 2, (n_rows * 50) + 2)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
89 self.max_size = self.min_size
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
90
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
91 def _getGridSize(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
92 n_rows = len(self.children)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
93 n_columns = len(self.children[0].children)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
94 return (n_rows, n_columns)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
95 grid_size = property(fget=_getGridSize, fset=_setGridSize)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
96
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
97 def getSlot(self, row_or_index, col=None):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
98 if col:
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
99 index = row * self.n_columns + col
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
100 else:
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
101 index = row_or_index
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
102 return self.findChildByName("Slot_%d" % index)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
103
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
104 def __init__(self, grid_size=(2, 2), padding=0, **kwargs):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
105 pychan.VBox.__init__(self, padding=padding, **kwargs)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
106 self.opaque = 0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
107 self.grid_size = grid_size
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
108 self.border_size = 1
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
109
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
110
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
111 class EquipmentGUI(ContainerGUIBase):
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
112 def __init__(self, controller, gui, equip, callbacks):
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
113 ContainerGUIBase.__init__(self, controller, gui)
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
114 self.equip = equip
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
115 self.equip_to_gui = {
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
116 "head": "headSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
117 "neck": "neckSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
118 "body": "shirtSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
119 "belt": "beltSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
120 "leg": "pantsSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
121 "feet": "bootsSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
122 "l_arm": "leftHandSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
123 "r_arm": "rightHandSlot",
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
124 }
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
125
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
126 def updateImages(self):
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
127 for eq_slot, gui_slot in self.equip_to_gui.iteritems():
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
128 widget = self.gui.findChild(name=gui_slot)
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
129 equipable = equip.get_equipable(self.equip, eq_slot)
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
130 widget.item = equipable.entity if equipable else None
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
131 self.updateImage(widget)
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
132
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
133 def updateImage(self, slot):
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
134 assert(isinstance(slot, EquipmentSlot))
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
135 if (slot.item):
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
136 image = slot.item.containable.image
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
137 else:
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
138 image = None
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
139 slot.image = image
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
140
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
141 class InventoryGUI(ContainerGUIBase):
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
142 def __init__(self, controller, gui, container, callbacks):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
143 ContainerGUIBase.__init__(self, controller, gui)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
144 self.container = container
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
145
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
146 def updateImages(self):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
147 grid = self.gui.findChildByName("Grid")
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
148 assert(isinstance(grid, InventoryGrid))
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
149 for index, child in enumerate(self.container.children):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
150 slot = grid.getSlot(index)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
151 if child:
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
152 slot.item = child.entity
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
153 else:
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
154 slot.item = None
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
155 self.updateImage(slot)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
156
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
157 def updateImage(self, slot):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
158 assert(isinstance(slot, pychan.Icon))
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
159 if (slot.item):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
160 image = slot.item.containable.image
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
161 else:
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
162 image = None
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
163 slot.image = image
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
164
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
165 class CharacterGUI(object):
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
166 def __init__(self, controller, gui, container, equip, callbacks):
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
167 self.engine = controller.engine
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
168 self.inventory_shown = False
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
169 if isinstance(gui, pychan.Widget):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
170 self.gui = gui
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
171 elif isinstance(gui, StringTypes):
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
172 xml_file = vfs.VFS.open(gui)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
173 self.gui = pychan.loadXML(xml_file)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
174 else:
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
175 self.gui = pychan.loadXML(gui)
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
176
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
177 render_backend = self.engine.getRenderBackend()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
178 screen_mode = render_backend.getCurrentScreenMode()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
179 screen_width, screen_height = (screen_mode.getWidth(),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
180 screen_mode.getHeight())
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
181 widget_width, widget_height = self.gui.size
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
182 self.gui.position = ((screen_width - widget_width) / 2,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
183 (screen_height - widget_height) / 2)
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
184 self.equip_gui = EquipmentGUI(
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
185 controller,
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
186 self.gui.findChildByName("equipmentPage"),
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
187 equip, callbacks
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
188 )
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
189 self.inv_gui = InventoryGUI(
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
190 controller,
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
191 self.gui.findChildByName("inventoryPage"),
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
192 container, callbacks
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
193 )
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
194
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
195 def toggleInventory(self, toggleImage=True):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
196 """Pause the game and enter the inventory screen, or close the
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
197 inventory screen and resume the game.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
198 @type toggleImage: bool
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
199 @param toggleImage:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
200 Call toggleInventoryCallback if True. Toggling via a
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
201 keypress requires that we toggle the Hud inventory image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
202 explicitly. Clicking on the Hud inventory button toggles the
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
203 image implicitly, so we don't change it.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
204 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
205 if not self.inventory_shown:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
206 self.showInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
207 self.inventory_shown = True
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
208 else:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
209 self.closeInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
210 self.inventory_shown = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
211
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
212 def showInventory(self):
149
eab3e1e52497 Modified EquipmentSlot to display an image instead of a text.
KarstenBock@gmx.net
parents: 142
diff changeset
213 self.equip_gui.updateImages()
150
3fc7cfa80771 Modified InventoryGrid to set a name for each slot containing the index.
KarstenBock@gmx.net
parents: 149
diff changeset
214 self.inv_gui.updateImages()
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
215 self.gui.show()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
216
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
217 def closeInventory(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
218 self.gui.hide()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
219
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
220
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
221 class _InventoryGUI(ContainerGUIBase):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
222 """Inventory GUI class"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
223 def __init__(self, controller, inventory, callbacks):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
224 """Initialise the instance.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
225 @param controller: Current Controller
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
226 @type controller: Class derived from ControllerBase
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
227 @type inventory: Inventory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
228 @param inventory: An inventory object to be displayed and manipulated
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
229 @type callbacks: dict
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
230 @param callbacks: a dict of callbacks
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
231 refreshReadyImages:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
232 Function that will make the ready slots on the HUD
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
233 reflect those within the inventory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
234 toggleInventoryButton:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
235 Function that will toggle the state of the inventory button
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
236 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
237 super(InventoryGUI, self).__init__(controller, "gui/inventory.xml")
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
238 self.engine = controller.engine
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
239 self.readyCallback = callbacks['refreshReadyImages']
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
240 self.toggleInventoryButtonCallback = callbacks['toggleInventoryButton']
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
241 self.original_cursor_id = self.engine.getCursor().getId()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
242
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
243 self.inventory_shown = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
244 events_to_map = {}
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
245 self.inventory_storage = inventory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
246
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
247 # Buttons of inventory arranged by slots
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
248
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
249 self.slot_buttons = {'head': ('Head',), 'chest': ('Body',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
250 'left_arm': ('LeftHand',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
251 'right_arm': ('RightHand',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
252 'hips' : ('Belt',), 'left_leg': ('LeftFoot',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
253 'right_leg': ('RightFoot',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
254 'left_hand': ('LeftHeld',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
255 'right_hand': ('RightHeld',),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
256 'backpack': ('A1', 'A2', 'A3', 'A4', 'A5',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
257 'B1', 'B2', 'B3', 'B4', 'B5',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
258 'C1', 'C2', 'C3', 'C4', 'C5',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
259 'D1', 'D2', 'D3', 'D4', 'D5'),
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
260 'ready': ('Ready1', 'Ready2', 'Ready3', 'Ready4')
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
261 }
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
262 # the images that should be used for the buttons when they are "empty"
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
263 self.slot_empty_images = {'head':'gui/inv_images/inv_head.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
264 'chest':'gui/inv_images/inv_torso.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
265 'left_arm':'gui/inv_images/inv_lhand.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
266 'right_arm':'gui/inv_images/inv_rhand.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
267 'hips':'gui/inv_images/inv_belt.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
268 'left_leg':'gui/inv_images/inv_lfoot.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
269 'right_leg':'gui/inv_images/inv_rfoot.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
270 'left_hand':'gui/inv_images/inv_litem.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
271 'right_hand':'gui/inv_images/inv_ritem.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
272 'backpack':'gui/inv_images/inv_backpack.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
273 'ready':'gui/inv_images/inv_belt_pouches.png',
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
274 }
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
275 self.updateInventoryButtons()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
276
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
277 for slot in self.slot_buttons:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
278 for _, button in enumerate(self.slot_buttons[slot]):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
279 events_to_map[button] = cbwa(self.dragDrop, button)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
280 events_to_map[button + "/mouseReleased"] = \
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
281 self.showContextMenu
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
282 events_to_map['close_button'] = self.closeInventoryAndToggle
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
283 self.gui.mapEvents(events_to_map)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
284 # TODO: Why the commented out code?
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
285 # self.resetMouseCursor()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
286
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
287 def updateImages(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
288 self.updateInventoryButtons()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
289
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
290 def updateInventoryButtons (self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
291 for slot in self.slot_buttons:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
292 for index, button in enumerate(self.slot_buttons[slot]):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
293 widget = self.gui.findChild(name=button)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
294 widget.slot = slot
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
295 widget.index = index
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
296 widget.item = self.inventory_storage.getItemsInSlot(widget.slot,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
297 widget.index)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
298 self.updateImage(widget)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
299
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
300 def updateImage(self, button):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
301 if (button.item == None):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
302 image = self.slot_empty_images[button.slot]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
303 else:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
304 image = button.item.getInventoryThumbnail()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
305 button.up_image = image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
306 button.down_image = image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
307 button.hover_image = image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
308
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
309 def closeInventory(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
310 """Close the inventory.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
311 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
312 self.gui.hide()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
313
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
314 def closeInventoryAndToggle(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
315 """Close the inventory screen.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
316 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
317 self.closeInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
318 self.toggleInventoryButtonCallback()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
319 self.inventory_shown = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
320
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
321 def toggleInventory(self, toggleImage=True):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
322 """Pause the game and enter the inventory screen, or close the
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
323 inventory screen and resume the game.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
324 @type toggleImage: bool
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
325 @param toggleImage:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
326 Call toggleInventoryCallback if True. Toggling via a
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
327 keypress requires that we toggle the Hud inventory image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
328 explicitly. Clicking on the Hud inventory button toggles the
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
329 image implicitly, so we don't change it.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
330 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
331 if not self.inventory_shown:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
332 self.showInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
333 self.inventory_shown = True
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
334 else:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
335 self.closeInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
336 self.inventory_shown = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
337
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
338 if toggleImage:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
339 self.toggleInventoryButtonCallback()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
340
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
341 def showInventory(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
342 """Show the inventory.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
343 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
344 self.updateInventoryButtons()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
345 self.gui.show()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
346
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
347 def dragObject(self, obj):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
348 """Drag the selected object.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
349 @type obj: string
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
350 @param obj: The name of the object within
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
351 the dictionary 'self.buttons'
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
352 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
353 # get the widget from the inventory with the name obj
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
354 drag_widget = self.gui.findChild(name = obj)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
355 drag_item = drag_widget.item
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
356 # only drag if the widget is not empty
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
357 if (drag_item != None):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
358 # get the item that the widget is 'storing'
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
359 data_drag.dragged_item = drag_widget.item
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
360 # get the up and down images of the widget
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
361 up_image = drag_widget.up_image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
362 down_image = drag_widget.down_image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
363 # set the mouse cursor to be the widget's image
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
364 self.controller.setMouseCursor(up_image.source,down_image.source)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
365 data_drag.dragged_image = up_image.source
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
366 data_drag.dragging = True
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
367 data_drag.dragged_widget = drag_widget
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
368 data_drag.source_container = self.inventory_storage
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
369
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
370 self.inventory_storage.takeItem(drag_widget.item)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
371 # after dragging the 'item', set the widgets' images
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
372 # so that it has it's default 'empty' images
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
373 drag_widget.item = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
374 self.updateImage(drag_widget)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
375
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
376
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
377 def dropObject(self, obj):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
378 """Drops the object being dropped
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
379 @type obj: string
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
380 @param obj: The name of the object within
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
381 the dictionary 'self.buttons'
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
382 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
383 drop_widget = self.gui.findChild(name = obj)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
384 drop_slot, drop_index = drop_widget.slot, drop_widget.index
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
385 replace_item = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
386 try :
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
387 if data_drag.dragging:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
388 inventory = self.inventory_storage
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
389 drag_item = data_drag.dragged_item
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
390 #this will get the replacement item and data for drag_drop if
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
391 ## there is an item All ready occupying the slot
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
392 if not inventory.isSlotEmpty(drop_slot, drop_index):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
393 #get the item and then remove it from the inventory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
394 replace_item = inventory.getItemsInSlot \
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
395 (drop_slot, drop_index)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
396 self.dragObject(obj)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
397 self.inventory_storage.moveItemToSlot(drag_item,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
398 drop_slot,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
399 drop_index)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
400
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
401 if drop_widget.slot == 'ready':
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
402 self.readyCallback()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
403
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
404 if replace_item == None:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
405 self.controller.resetMouseCursor()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
406 data_drag.dragging = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
407 except Container.TooBig :
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
408 logger.warning("%s too big to fit "
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
409 "into %s" % (data_drag.dragged_item,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
410 drop_widget.slot))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
411 except (Container.SlotBusy, Container.ItemSelf):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
412 pass
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
413 self.updateInventoryButtons()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
414
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
415 def createMenuItems(self, item, actions):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
416 """Creates context menu items for the InventoryGUI"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
417 menu_actions = super(InventoryGUI, self).createMenuItems(item, actions)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
418 param_dict = {}
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
419 param_dict["controller"] = self.controller
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
420 param_dict["commands"] = {}
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
421 param_dict["item"] = item
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
422 param_dict["container_gui"] = self
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
423 menu_actions.append(["Drop",
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
424 "Drop",
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
425 self.executeMenuItem,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
426 ACTIONS["DropFromInventory"](**param_dict)])
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
427 return menu_actions
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
428
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
429 def getImage(self, name):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
430 """Return a current image from the inventory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
431 @type name: string
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
432 @param name: name of image to get
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
433 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
434 return self.gui.findChild(name = name)