]> git.lizzy.rs Git - dragonfireclient.git/blob - src/guiInventoryMenu.h
Reshape inventory menu code
[dragonfireclient.git] / src / guiInventoryMenu.h
1 /*
2 Minetest-c55
3 Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
4
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.
9
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.
14
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.
18 */
19
20
21 #ifndef GUIINVENTORYMENU_HEADER
22 #define GUIINVENTORYMENU_HEADER
23
24 #include "common_irrlicht.h"
25 #include "inventory.h"
26 #include "inventorymanager.h"
27 #include "utility.h"
28 #include "modalMenu.h"
29
30 class IGameDef;
31 class InventoryManager;
32
33 void drawItemStack(video::IVideoDriver *driver,
34                 gui::IGUIFont *font,
35                 const ItemStack &item,
36                 const core::rect<s32> &rect,
37                 const core::rect<s32> *clip,
38                 IGameDef *gamedef);
39
40 class GUIInventoryMenu : public GUIModalMenu
41 {
42         struct ItemSpec
43         {
44                 ItemSpec()
45                 {
46                         i = -1;
47                 }
48                 ItemSpec(const InventoryLocation &a_inventoryloc,
49                                 const std::string &a_listname,
50                                 s32 a_i)
51                 {
52                         inventoryloc = a_inventoryloc;
53                         listname = a_listname;
54                         i = a_i;
55                 }
56                 bool isValid() const
57                 {
58                         return i != -1;
59                 }
60
61                 InventoryLocation inventoryloc;
62                 std::string listname;
63                 s32 i;
64         };
65
66         struct ListDrawSpec
67         {
68                 ListDrawSpec()
69                 {
70                 }
71                 ListDrawSpec(const InventoryLocation &a_inventoryloc,
72                                 const std::string &a_listname,
73                                 v2s32 a_pos, v2s32 a_geom)
74                 {
75                         inventoryloc = a_inventoryloc;
76                         listname = a_listname;
77                         pos = a_pos;
78                         geom = a_geom;
79                 }
80
81                 InventoryLocation inventoryloc;
82                 std::string listname;
83                 v2s32 pos;
84                 v2s32 geom;
85         };
86 public:
87         GUIInventoryMenu(gui::IGUIEnvironment* env,
88                         gui::IGUIElement* parent, s32 id,
89                         IMenuManager *menumgr,
90                         InventoryManager *invmgr,
91                         IGameDef *gamedef
92                         );
93         ~GUIInventoryMenu();
94
95         void setFormSpec(const std::string &formspec_string,
96                         InventoryLocation current_inventory_location)
97         {
98                 m_formspec_string = formspec_string;
99                 m_current_inventory_location = current_inventory_location;
100                 regenerateGui(m_screensize_old);
101         }
102
103         void removeChildren();
104         /*
105                 Remove and re-add (or reposition) stuff
106         */
107         void regenerateGui(v2u32 screensize);
108         
109         ItemSpec getItemAtPos(v2s32 p) const;
110         void drawList(const ListDrawSpec &s, int phase);
111         void drawSelectedItem();
112         void drawMenu();
113         void updateSelectedItem();
114
115         bool OnEvent(const SEvent& event);
116         
117 protected:
118         v2s32 getBasePos() const
119         {
120                 return padding + AbsoluteRect.UpperLeftCorner;
121         }
122
123         v2s32 padding;
124         v2s32 spacing;
125         v2s32 imgsize;
126         
127         InventoryManager *m_invmgr;
128         IGameDef *m_gamedef;
129
130         std::string m_formspec_string;
131         InventoryLocation m_current_inventory_location;
132         core::array<ListDrawSpec> m_draw_spec;
133
134         ItemSpec *m_selected_item;
135         u32 m_selected_amount;
136         bool m_selected_dragging;
137
138         v2s32 m_pointer;
139         gui::IGUIStaticText *m_tooltip_element;
140 };
141
142 #endif
143