3 Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #ifndef GUIINVENTORYMENU_HEADER
22 #define GUIINVENTORYMENU_HEADER
24 #include "common_irrlicht.h"
25 #include "inventory.h"
26 #include "inventorymanager.h"
28 #include "modalMenu.h"
31 class InventoryManager;
33 void drawItemStack(video::IVideoDriver *driver,
35 const ItemStack &item,
36 const core::rect<s32> &rect,
37 const core::rect<s32> *clip,
40 class GUIInventoryMenu : public GUIModalMenu
48 ItemSpec(const InventoryLocation &a_inventoryloc,
49 const std::string &a_listname,
52 inventoryloc = a_inventoryloc;
53 listname = a_listname;
61 InventoryLocation inventoryloc;
71 ListDrawSpec(const InventoryLocation &a_inventoryloc,
72 const std::string &a_listname,
73 v2s32 a_pos, v2s32 a_geom)
75 inventoryloc = a_inventoryloc;
76 listname = a_listname;
81 InventoryLocation inventoryloc;
92 DrawSpec(const std::string &a_type,
93 const InventoryLocation &a_name,
94 const std::string &a_subname,
106 InventoryLocation name;
112 // See .cpp for format
113 static v2s16 makeDrawSpecArrayFromString(
114 core::array<GUIInventoryMenu::DrawSpec> &draw_spec,
115 const std::string &data,
116 const InventoryLocation ¤t_location);
118 GUIInventoryMenu(gui::IGUIEnvironment* env,
119 gui::IGUIElement* parent, s32 id,
120 IMenuManager *menumgr,
122 InventoryManager *invmgr,
127 void setDrawSpec(core::array<DrawSpec> &init_draw_spec)
129 m_init_draw_spec = init_draw_spec;
132 void removeChildren();
134 Remove and re-add (or reposition) stuff
136 void regenerateGui(v2u32 screensize);
138 ItemSpec getItemAtPos(v2s32 p) const;
139 void drawList(const ListDrawSpec &s, int phase);
140 void drawSelectedItem();
142 void updateSelectedItem();
144 bool OnEvent(const SEvent& event);
147 v2s32 getBasePos() const
149 return padding + AbsoluteRect.UpperLeftCorner;
158 InventoryManager *m_invmgr;
161 core::array<DrawSpec> m_init_draw_spec;
162 core::array<ListDrawSpec> m_draw_spec;
164 ItemSpec *m_selected_item;
165 u32 m_selected_amount;
166 bool m_selected_dragging;
169 gui::IGUIStaticText *m_tooltip_element;