]> git.lizzy.rs Git - dragonfireclient.git/blob - src/guiPauseMenu.cpp
Use system sqlite3/jthread libs if available
[dragonfireclient.git] / src / guiPauseMenu.cpp
1 /*\r
2 Minetest-c55\r
3 Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>\r
4 \r
5 This program is free software; you can redistribute it and/or modify\r
6 it under the terms of the GNU General Public License as published by\r
7 the Free Software Foundation; either version 2 of the License, or\r
8 (at your option) any later version.\r
9 \r
10 This program is distributed in the hope that it will be useful,\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 GNU General Public License for more details.\r
14 \r
15 You should have received a copy of the GNU General Public License along\r
16 with this program; if not, write to the Free Software Foundation, Inc.,\r
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 */\r
19 \r
20 #include "guiPauseMenu.h"\r
21 #include "debug.h"\r
22 #include "serialization.h"\r
23 #include "porting.h"\r
24 #include "config.h"\r
25 #include "main.h"\r
26 \r
27 #include "gettext.h"\r
28 \r
29 GUIPauseMenu::GUIPauseMenu(gui::IGUIEnvironment* env,\r
30                 gui::IGUIElement* parent, s32 id,\r
31                 IGameCallback *gamecallback,\r
32                 IMenuManager *menumgr):\r
33         GUIModalMenu(env, parent, id, menumgr)\r
34 {\r
35         m_gamecallback = gamecallback;\r
36 }\r
37 \r
38 GUIPauseMenu::~GUIPauseMenu()\r
39 {\r
40         removeChildren();\r
41 }\r
42 \r
43 void GUIPauseMenu::removeChildren()\r
44 {\r
45         {\r
46                 gui::IGUIElement *e = getElementFromId(256);\r
47                 if(e != NULL)\r
48                         e->remove();\r
49         }\r
50         {\r
51                 gui::IGUIElement *e = getElementFromId(257);\r
52                 if(e != NULL)\r
53                         e->remove();\r
54         }\r
55         {\r
56                 gui::IGUIElement *e = getElementFromId(258);\r
57                 if(e != NULL)\r
58                         e->remove();\r
59         }\r
60         {\r
61                 gui::IGUIElement *e = getElementFromId(259);\r
62                 if(e != NULL)\r
63                         e->remove();\r
64         }\r
65         {\r
66                 gui::IGUIElement *e = getElementFromId(260);\r
67                 if(e != NULL)\r
68                         e->remove();\r
69         }\r
70         {\r
71                 gui::IGUIElement *e = getElementFromId(261);\r
72                 if(e != NULL)\r
73                         e->remove();\r
74         }\r
75 }\r
76 \r
77 void GUIPauseMenu::regenerateGui(v2u32 screensize)\r
78 {\r
79         /*\r
80                 Remove stuff\r
81         */\r
82         removeChildren();\r
83         \r
84         /*\r
85                 Calculate new sizes and positions\r
86         */\r
87         core::rect<s32> rect(\r
88                         screensize.X/2 - 580/2,\r
89                         screensize.Y/2 - 300/2,\r
90                         screensize.X/2 + 580/2,\r
91                         screensize.Y/2 + 300/2\r
92         );\r
93         \r
94         DesiredRect = rect;\r
95         recalculateAbsolutePosition(false);\r
96 \r
97         v2s32 size = rect.getSize();\r
98 \r
99         /*\r
100                 Add stuff\r
101         */\r
102         const s32 btn_height = 30;\r
103         const s32 btn_gap = 20;\r
104         const s32 btn_num = 4;\r
105         s32 btn_y = size.Y/2-((btn_num*btn_height+(btn_num-1)*btn_gap))/2;\r
106         {\r
107                 core::rect<s32> rect(0, 0, 140, btn_height);\r
108                 rect = rect + v2s32(size.X/2-140/2, btn_y);\r
109                 Environment->addButton(rect, this, 256, chartowchar_t(gettext("Continue")));\r
110         }\r
111         btn_y += btn_height + btn_gap;\r
112         {\r
113                 core::rect<s32> rect(0, 0, 140, btn_height);\r
114                 rect = rect + v2s32(size.X/2-140/2, btn_y);\r
115                 Environment->addButton(rect, this, 261, chartowchar_t(gettext("Change Password")));\r
116         }\r
117         btn_y += btn_height + btn_gap;\r
118         {\r
119                 core::rect<s32> rect(0, 0, 140, btn_height);\r
120                 rect = rect + v2s32(size.X/2-140/2, btn_y);\r
121                 Environment->addButton(rect, this, 260, chartowchar_t(gettext("Disconnect")));\r
122         }\r
123         btn_y += btn_height + btn_gap;\r
124         {\r
125                 core::rect<s32> rect(0, 0, 140, btn_height);\r
126                 rect = rect + v2s32(size.X/2-140/2, btn_y);\r
127                 Environment->addButton(rect, this, 257, chartowchar_t(gettext("Exit to OS")));\r
128         }\r
129 \r
130         {\r
131                 core::rect<s32> rect(0, 0, 180, 240);\r
132                 rect = rect + v2s32(size.X/2 + 90, size.Y/2-rect.getHeight()/2);\r
133                 Environment->addStaticText(chartowchar_t(gettext(\r
134                 "Keys:\n"\r
135                 "- WASD: Walk\n"\r
136                 "- Mouse left: dig blocks\n"\r
137                 "- Mouse right: place blocks\n"\r
138                 "- Mouse wheel: select item\n"\r
139                 "- 0...9: select item\n"\r
140                 "- Shift: sneak\n"\r
141                 "- R: Toggle viewing all loaded chunks\n"\r
142                 "- I: Inventory menu\n"\r
143                 "- ESC: This menu\n"\r
144                 "- T: Chat\n"\r
145                 )), rect, false, true, this, 258);\r
146         }\r
147         {\r
148                 core::rect<s32> rect(0, 0, 180, 220);\r
149                 rect = rect + v2s32(size.X/2 - 90 - rect.getWidth(), size.Y/2-rect.getHeight()/2);\r
150         \r
151                 v2u32 max_texture_size;\r
152                 {\r
153                         video::IVideoDriver* driver = Environment->getVideoDriver();\r
154                         max_texture_size = driver->getMaxTextureSize();\r
155                 }\r
156 \r
157                 /*wchar_t text[200];\r
158                 swprintf(text, 200,\r
159                                 L"Minetest-c55\n"\r
160                                 L"by Perttu Ahola\n"\r
161                                 L"celeron55@gmail.com\n\n"\r
162                                 SWPRINTF_CHARSTRING L"\n"\r
163                                 L"userdata path = "\r
164                                 SWPRINTF_CHARSTRING\r
165                                 ,\r
166                                 BUILD_INFO,\r
167                                 porting::path_userdata.c_str()\r
168                 );*/\r
169 \r
170                 std::ostringstream os;\r
171                 os<<"Minetest-delta\n";\r
172                 os<<"by Perttu Ahola and contributors\n";\r
173                 os<<"celeron55@gmail.com\n";\r
174                 os<<BUILD_INFO<<"\n";\r
175                 os<<"ud_path = "<<wrap_rows(porting::path_userdata, 20)<<"\n";\r
176         \r
177                 Environment->addStaticText(narrow_to_wide(os.str()).c_str(), rect, false, true, this, 259);\r
178         }\r
179 }\r
180 \r
181 void GUIPauseMenu::drawMenu()\r
182 {\r
183         gui::IGUISkin* skin = Environment->getSkin();\r
184         if (!skin)\r
185                 return;\r
186         video::IVideoDriver* driver = Environment->getVideoDriver();\r
187         \r
188         video::SColor bgcolor(140,0,0,0);\r
189         driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);\r
190 \r
191         gui::IGUIElement::draw();\r
192 }\r
193 \r
194 bool GUIPauseMenu::OnEvent(const SEvent& event)\r
195 {\r
196 \r
197         if(event.EventType==EET_KEY_INPUT_EVENT)\r
198         {\r
199                 if(event.KeyInput.PressedDown)\r
200                 {\r
201                         if(event.KeyInput.Key==KEY_ESCAPE)\r
202                         {\r
203                                 quitMenu();\r
204                                 return true;\r
205                         }\r
206                         else if(event.KeyInput.Key==KEY_RETURN)\r
207                         {\r
208                                 quitMenu();\r
209                                 return true;\r
210                         }\r
211                 }\r
212         }\r
213         if(event.EventType==EET_GUI_EVENT)\r
214         {\r
215                 if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST\r
216                                 && isVisible())\r
217                 {\r
218                         if(!canTakeFocus(event.GUIEvent.Element))\r
219                         {\r
220                                 dstream<<"GUIPauseMenu: Not allowing focus change."\r
221                                                 <<std::endl;\r
222                                 // Returning true disables focus change\r
223                                 return true;\r
224                         }\r
225                 }\r
226                 if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)\r
227                 {\r
228                         switch(event.GUIEvent.Caller->getID())\r
229                         {\r
230                         case 256: // continue\r
231                                 quitMenu();\r
232                                 // ALWAYS return immediately after quitMenu()\r
233                                 return true;\r
234                         case 261:\r
235                                 quitMenu();\r
236                                 m_gamecallback->changePassword();\r
237                                 return true;\r
238                         case 260: // disconnect\r
239                                 m_gamecallback->disconnect();\r
240                                 quitMenu();\r
241                                 return true;\r
242                         case 257: // exit\r
243                                 m_gamecallback->exitToOS();\r
244                                 quitMenu();\r
245                                 return true;\r
246                         }\r
247                 }\r
248         }\r
249         \r
250         return Parent ? Parent->OnEvent(event) : false;\r
251 }\r
252 \r