Mercurial > parpg-source
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): |