]> git.lizzy.rs Git - dragonfireclient.git/blob - src/guiPasswordChange.cpp
Add ObjectRef.hud_set_hotbar_itemcount and add TOCLIENT_HUD_SET_PARAM
[dragonfireclient.git] / src / guiPasswordChange.cpp
1 /*
2 Part of Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 Copyright (C) 2013 Ciaran Gultnieks <ciaran@ciarang.com>
5
6 Permission to use, copy, modify, and distribute this software for any
7 purpose with or without fee is hereby granted, provided that the above
8 copyright notice and this permission notice appear in all copies.
9
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include "guiPasswordChange.h"
20 #include "debug.h"
21 #include "serialization.h"
22 #include <string>
23 #include <IGUICheckBox.h>
24 #include <IGUIEditBox.h>
25 #include <IGUIButton.h>
26 #include <IGUIStaticText.h>
27 #include <IGUIFont.h>
28
29 #include "gettext.h"
30
31 const int ID_oldPassword = 256;
32 const int ID_newPassword1 = 257;
33 const int ID_newPassword2 = 258;
34 const int ID_change = 259;
35 const int ID_message = 260;
36
37 GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
38                 gui::IGUIElement* parent, s32 id,
39                 IMenuManager *menumgr,
40                 Client* client
41 ):
42         GUIModalMenu(env, parent, id, menumgr),
43         m_client(client)
44 {
45 }
46
47 GUIPasswordChange::~GUIPasswordChange()
48 {
49         removeChildren();
50 }
51
52 void GUIPasswordChange::removeChildren()
53 {
54         {
55                 gui::IGUIElement *e = getElementFromId(ID_oldPassword);
56                 if(e != NULL)
57                         e->remove();
58         }
59         {
60                 gui::IGUIElement *e = getElementFromId(ID_newPassword1);
61                 if(e != NULL)
62                         e->remove();
63         }
64         {
65                 gui::IGUIElement *e = getElementFromId(ID_newPassword2);
66                 if(e != NULL)
67                         e->remove();
68         }
69         {
70                 gui::IGUIElement *e = getElementFromId(ID_change);
71                 if(e != NULL)
72                         e->remove();
73         }
74 }
75
76 void GUIPasswordChange::regenerateGui(v2u32 screensize)
77 {
78         /*
79                 Remove stuff
80         */
81         removeChildren();
82         
83         /*
84                 Calculate new sizes and positions
85         */
86         core::rect<s32> rect(
87                         screensize.X/2 - 580/2,
88                         screensize.Y/2 - 300/2,
89                         screensize.X/2 + 580/2,
90                         screensize.Y/2 + 300/2
91         );
92         
93         DesiredRect = rect;
94         recalculateAbsolutePosition(false);
95
96         v2s32 size = rect.getSize();
97         v2s32 topleft_client(40, 0);
98
99         /*
100                 Add stuff
101         */
102         s32 ypos = 50;
103         changeCtype("");
104         {
105                 core::rect<s32> rect(0, 0, 110, 20);
106                 rect += topleft_client + v2s32(35, ypos+6);
107                 wchar_t* text = wgettext("Old Password");
108                 Environment->addStaticText(text, rect, false, true, this, -1);
109                 delete[] text;
110         }
111         changeCtype("C");
112         {
113                 core::rect<s32> rect(0, 0, 230, 30);
114                 rect += topleft_client + v2s32(160, ypos);
115                 gui::IGUIEditBox *e = 
116                 Environment->addEditBox(L"", rect, true, this, ID_oldPassword);
117                 Environment->setFocus(e);
118                 e->setPasswordBox(true);
119         }
120         ypos += 50;
121         changeCtype("");
122         {
123                 core::rect<s32> rect(0, 0, 110, 20);
124                 rect += topleft_client + v2s32(35, ypos+6);
125                 wchar_t* text = wgettext("New Password");
126                 Environment->addStaticText(text, rect, false, true, this, -1);
127                 delete[] text;
128         }
129         changeCtype("C");
130         {
131                 core::rect<s32> rect(0, 0, 230, 30);
132                 rect += topleft_client + v2s32(160, ypos);
133                 gui::IGUIEditBox *e = 
134                 Environment->addEditBox(L"", rect, true, this, ID_newPassword1);
135                 e->setPasswordBox(true);
136         }
137         ypos += 50;
138         changeCtype("");
139         {
140                 core::rect<s32> rect(0, 0, 110, 20);
141                 rect += topleft_client + v2s32(35, ypos+6);
142                 wchar_t* text = wgettext("Confirm Password");
143                 Environment->addStaticText(text, rect, false, true, this, -1);
144                 delete[] text;
145         }
146         changeCtype("C");
147         {
148                 core::rect<s32> rect(0, 0, 230, 30);
149                 rect += topleft_client + v2s32(160, ypos);
150                 gui::IGUIEditBox *e = 
151                 Environment->addEditBox(L"", rect, true, this, ID_newPassword2);
152                 e->setPasswordBox(true);
153         }
154
155         ypos += 50;
156         changeCtype("");
157         {
158                 core::rect<s32> rect(0, 0, 140, 30);
159                 rect = rect + v2s32(size.X/2-140/2, ypos);
160                 wchar_t* text = wgettext("Change");
161                 Environment->addButton(rect, this, ID_change, text);
162                 delete[] text;
163         }
164
165         ypos += 50;
166         {
167                 core::rect<s32> rect(0, 0, 300, 20);
168                 rect += topleft_client + v2s32(35, ypos);
169                 wchar_t* text = wgettext("Passwords do not match!");
170                 IGUIElement *e = 
171                 Environment->addStaticText(
172                         text,
173                         rect, false, true, this, ID_message);
174                 e->setVisible(false);
175                 delete[] text;
176         }
177         changeCtype("C");
178
179 }
180
181 void GUIPasswordChange::drawMenu()
182 {
183         gui::IGUISkin* skin = Environment->getSkin();
184         if (!skin)
185                 return;
186         video::IVideoDriver* driver = Environment->getVideoDriver();
187         
188         video::SColor bgcolor(140,0,0,0);
189         driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
190
191         gui::IGUIElement::draw();
192 }
193
194 bool GUIPasswordChange::acceptInput()
195 {
196                 std::wstring oldpass;
197                 std::wstring newpass;
198                 gui::IGUIElement *e;
199                 e = getElementFromId(ID_oldPassword);
200                 if(e != NULL)
201                         oldpass = e->getText();
202                 e = getElementFromId(ID_newPassword1);
203                 if(e != NULL)
204                         newpass = e->getText();
205                 e = getElementFromId(ID_newPassword2);
206                 if(e != NULL && newpass != e->getText())
207                 {
208                         e = getElementFromId(ID_message);
209                         if(e != NULL)
210                                 e->setVisible(true);
211                         return false;
212                 }
213                 m_client->sendChangePassword(oldpass, newpass);
214                 return true;
215 }
216
217 bool GUIPasswordChange::OnEvent(const SEvent& event)
218 {
219         if(event.EventType==EET_KEY_INPUT_EVENT)
220         {
221                 if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
222                 {
223                         quitMenu();
224                         return true;
225                 }
226                 if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
227                 {
228                         if(acceptInput())
229                                 quitMenu();
230                         return true;
231                 }
232         }
233         if(event.EventType==EET_GUI_EVENT)
234         {
235                 if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST
236                                 && isVisible())
237                 {
238                         if(!canTakeFocus(event.GUIEvent.Element))
239                         {
240                                 dstream<<"GUIPasswordChange: Not allowing focus change."
241                                                 <<std::endl;
242                                 // Returning true disables focus change
243                                 return true;
244                         }
245                 }
246                 if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
247                 {
248                         switch(event.GUIEvent.Caller->getID())
249                         {
250                         case ID_change:
251                                 if(acceptInput())
252                                         quitMenu();
253                                 return true;
254                         }
255                 }
256                 if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER)
257                 {
258                         switch(event.GUIEvent.Caller->getID())
259                         {
260                         case ID_oldPassword:
261                         case ID_newPassword1:
262                         case ID_newPassword2:
263                                 if(acceptInput())
264                                         quitMenu();
265                                 return true;
266                         }
267                 }
268         }
269
270         return Parent ? Parent->OnEvent(event) : false;
271 }
272