comparison gui/inventorygui.py @ 169:5b880b8cff6d

Fixes to make PARPG compatible with changes made to fife.
author Beliar <KarstenBock@gmx.net>
date Sat, 25 Feb 2012 00:21:28 +0100
parents 2241722311bf
children
comparison
equal deleted inserted replaced
168:bfd3a4ef7f2b 169:5b880b8cff6d
15 import logging 15 import logging
16 from types import StringTypes 16 from types import StringTypes
17 17
18 from fife.extensions.pychan.tools import callbackWithArguments as cbwa 18 from fife.extensions.pychan.tools import callbackWithArguments as cbwa
19 from fife.extensions import pychan 19 from fife.extensions import pychan
20 from slot import Slot
20 from fife.extensions.pychan.attrs import UnicodeAttr 21 from fife.extensions.pychan.attrs import UnicodeAttr
21 22
22 from parpg.gui import drag_drop_data as data_drag 23 from parpg.gui import drag_drop_data as data_drag
23 from parpg.gui.containergui_base import ContainerGUIBase 24 from parpg.gui.containergui_base import ContainerGUIBase
24 from parpg.entities.action import ACTIONS 25 from parpg.entities.action import ACTIONS
32 max_size=(50, 50), margins=None, 33 max_size=(50, 50), margins=None,
33 **kwargs): 34 **kwargs):
34 pychan.VBox.__init__(self, min_size=min_size, max_size=max_size, 35 pychan.VBox.__init__(self, min_size=min_size, max_size=max_size,
35 **kwargs) 36 **kwargs)
36 self.background_image = 'gui/inv_images/inv_background.png' 37 self.background_image = 'gui/inv_images/inv_background.png'
37 icon = pychan.Icon(name="Icon") 38 icon = Slot(name="Icon")
38 self.addChild(icon) 39 self.addChild(icon)
39 self.adaptLayout() 40 self.adaptLayout()
40 if self.parent is not None: 41 if self.parent is not None:
41 self.beforeShow() 42 self.beforeShow()
42 43
49 def image(self, image): 50 def image(self, image):
50 icon = self.findChildByName("Icon") 51 icon = self.findChildByName("Icon")
51 icon.image = image 52 icon.image = image
52 53
53 class InventoryGrid(pychan.VBox): 54 class InventoryGrid(pychan.VBox):
54 ATTRIBUTES = pychan.VBox.ATTRIBUTES + [pychan.attrs.PointAttr('grid_size')] 55 ATTRIBUTES = pychan.VBox.ATTRIBUTES + [pychan.attrs.PointAttr('grid_size'),
56 pychan.attrs.PointAttr('cell_size')]
57
55 58
56 def _setNColumns(self, n_columns): 59 def _setNColumns(self, n_columns):
57 n_rows = self.grid_size[1] 60 n_rows = self.grid_size[1]
58 self.grid_size = (n_columns, n_rows) 61 self.grid_size = (n_columns, n_rows)
59 62
73 76
74 def _setGridSize(self, grid_size): 77 def _setGridSize(self, grid_size):
75 n_columns, n_rows = grid_size 78 n_columns, n_rows = grid_size
76 self.removeAllChildren() 79 self.removeAllChildren()
77 for row_n in xrange(n_rows): 80 for row_n in xrange(n_rows):
78 row_size = (n_columns * 50, 50) 81 row_size = (n_columns * self.cell_size[0], self.cell_size[1])
79 row = pychan.HBox(min_size=row_size, max_size=row_size, 82 row = pychan.HBox(min_size=row_size, max_size=row_size,
80 padding=self.padding) 83 padding=self.padding)
81 row.border_size = 1 84 row.border_size = 1
82 row.opaque = 0 85 row.opaque = 0
83 for column_n in xrange(n_columns): 86 for column_n in xrange(n_columns):
84 index = (row_n * n_columns + column_n) 87 index = (row_n * n_columns + column_n)
85 slot = pychan.Icon(min_size=(50, 50), max_size=(50, 50)) 88 slot = Slot(min_size=(self.cell_size),
89 max_size=(self.cell_size))
86 slot.border_size = 1 90 slot.border_size = 1
87 slot.name = "Slot_%d" % index 91 slot.name = "Slot_%d" % index
88 slot.index = index 92 slot.index = index
93 slot.image = None
94 slot.size = self.cell_size
89 row.addChild(slot) 95 row.addChild(slot)
90 self.addChild(row) 96 self.addChild(row)
91 self.min_size = ((n_columns * 50) + 2, (n_rows * 50) + 2) 97 self.min_size = ((n_columns * self.cell_size[0]) + 2,
98 (n_rows * self.cell_size[1]) + 2)
92 self.max_size = self.min_size 99 self.max_size = self.min_size
93 100
94 def _getGridSize(self): 101 def _getGridSize(self):
95 n_rows = len(self.children) 102 n_rows = len(self.children)
96 n_columns = len(self.children[0].children) 103 n_columns = len(self.children[0].children)
102 index = row * self.n_columns + col 109 index = row * self.n_columns + col
103 else: 110 else:
104 index = row_or_index 111 index = row_or_index
105 return self.findChildByName("Slot_%d" % index) 112 return self.findChildByName("Slot_%d" % index)
106 113
107 def __init__(self, grid_size=(2, 2), padding=0, **kwargs): 114 def __init__(self,
108 pychan.VBox.__init__(self, padding=padding, **kwargs) 115 grid_size=(2, 2),
109 self.opaque = 0 116 cell_size=(50, 50),
117 parent = None,
118 name = None,
119 size = None,
120 min_size = None,
121 max_size = None,
122 helptext = None,
123 position = None,
124 style = None,
125 hexpand = None,
126 vexpand = None,
127 font = None,
128 base_color = None,
129 background_color = None,
130 foreground_color = None,
131 selection_color = None,
132 position_technique = None,
133 is_focusable = None,
134 comment = None,
135 background_image = None,
136 _real_widget = None):
137 pychan.VBox.__init__(self,
138 parent=parent,
139 name=name,
140 size=size,
141 min_size=min_size,
142 max_size=max_size,
143 helptext=helptext,
144 position=position,
145 style=style,
146 hexpand=hexpand,
147 vexpand=vexpand,
148 font=font,
149 base_color=base_color,
150 background_color=background_color,
151 foreground_color=foreground_color,
152 selection_color=selection_color,
153 border_size=1,
154 position_technique=position_technique,
155 is_focusable=is_focusable,
156 comment=comment,
157 padding=0,
158 background_image=background_image,
159 opaque=0,
160 margins=None,
161 _real_widget=_real_widget)
162 self.cell_size = cell_size
110 self.grid_size = grid_size 163 self.grid_size = grid_size
111 self.border_size = 1
112 164
113 165
114 class EquipmentGUI(ContainerGUIBase): 166 class EquipmentGUI(ContainerGUIBase):
115 def __init__(self, controller, gui, equip, callbacks): 167 def __init__(self, controller, gui, equip, callbacks, slot_size = (50, 50)):
116 ContainerGUIBase.__init__(self, controller, gui) 168 ContainerGUIBase.__init__(self, controller, gui)
117 self.equip = equip 169 self.equip = equip
118 self.equip_to_gui = { 170 self.equip_to_gui = {
119 "head": "headSlot", 171 "head": "headSlot",
120 "neck": "neckSlot", 172 "neck": "neckSlot",
124 "feet": "bootsSlot", 176 "feet": "bootsSlot",
125 "l_arm": "leftHandSlot", 177 "l_arm": "leftHandSlot",
126 "r_arm": "rightHandSlot", 178 "r_arm": "rightHandSlot",
127 } 179 }
128 self.setSlotEvents() 180 self.setSlotEvents()
181 self.slot_size = slot_size
129 182
130 def updateImages(self): 183 def updateImages(self):
131 for eq_slot, gui_slot in self.equip_to_gui.iteritems(): 184 for eq_slot, gui_slot in self.equip_to_gui.iteritems():
132 widget = self.gui.findChildByName(gui_slot) 185 widget = self.gui.findChildByName(gui_slot)
133 equipable = equip.get_equipable(self.equip, eq_slot) 186 equipable = equip.get_equipable(self.equip, eq_slot)
239 self.mousePressedOnSlot 292 self.mousePressedOnSlot
240 ) 293 )
241 events_to_map[slot_name + "/mouseReleased"] = self.showContextMenu 294 events_to_map[slot_name + "/mouseReleased"] = self.showContextMenu
242 295
243 self.grid.mapEvents(events_to_map) 296 self.grid.mapEvents(events_to_map)
297 self.updateImages()
244 298
245 def updateImages(self): 299 def updateImages(self):
246 for index, child in enumerate(self.container.children): 300 for index, child in enumerate(self.container.children):
247 slot = self.grid.getSlot(index) 301 slot = self.grid.getSlot(index)
248 if child: 302 if child:
250 else: 304 else:
251 slot.item = None 305 slot.item = None
252 self.updateImage(slot) 306 self.updateImage(slot)
253 307
254 def updateImage(self, slot): 308 def updateImage(self, slot):
255 assert(isinstance(slot, pychan.Icon)) 309 assert(isinstance(slot, Slot))
256 if (slot.item): 310 if (slot.item):
257 image = slot.item.containable.image 311 image = slot.item.containable.image
312
258 else: 313 else:
259 image = None 314 image = None
260 slot.image = image 315 slot.image = image
261 316
262 def mousePressedOnSlot(self, event, widget): 317 def mousePressedOnSlot(self, event, widget):