3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 Copyright (C) 2013 Ciaran Gultnieks <ciaran@ciarang.com>
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.
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.
19 #include "guiPasswordChange.h"
21 #include "serialization.h"
23 #include <IGUICheckBox.h>
24 #include <IGUIEditBox.h>
25 #include <IGUIButton.h>
26 #include <IGUIStaticText.h>
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;
37 GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
38 gui::IGUIElement* parent, s32 id,
39 IMenuManager *menumgr,
42 GUIModalMenu(env, parent, id, menumgr),
47 GUIPasswordChange::~GUIPasswordChange()
52 void GUIPasswordChange::removeChildren()
55 gui::IGUIElement *e = getElementFromId(ID_oldPassword);
60 gui::IGUIElement *e = getElementFromId(ID_newPassword1);
65 gui::IGUIElement *e = getElementFromId(ID_newPassword2);
70 gui::IGUIElement *e = getElementFromId(ID_change);
76 void GUIPasswordChange::regenerateGui(v2u32 screensize)
84 Calculate new sizes and positions
87 screensize.X/2 - 580/2,
88 screensize.Y/2 - 300/2,
89 screensize.X/2 + 580/2,
90 screensize.Y/2 + 300/2
94 recalculateAbsolutePosition(false);
96 v2s32 size = rect.getSize();
97 v2s32 topleft_client(40, 0);
104 core::rect<s32> rect(0, 0, 110, 20);
105 rect += topleft_client + v2s32(35, ypos+6);
106 wchar_t* text = wgettext("Old Password");
107 Environment->addStaticText(text, rect, false, true, this, -1);
111 core::rect<s32> rect(0, 0, 230, 30);
112 rect += topleft_client + v2s32(160, ypos);
113 gui::IGUIEditBox *e =
114 Environment->addEditBox(L"", rect, true, this, ID_oldPassword);
115 Environment->setFocus(e);
116 e->setPasswordBox(true);
120 core::rect<s32> rect(0, 0, 110, 20);
121 rect += topleft_client + v2s32(35, ypos+6);
122 wchar_t* text = wgettext("New Password");
123 Environment->addStaticText(text, rect, false, true, this, -1);
127 core::rect<s32> rect(0, 0, 230, 30);
128 rect += topleft_client + v2s32(160, ypos);
129 gui::IGUIEditBox *e =
130 Environment->addEditBox(L"", rect, true, this, ID_newPassword1);
131 e->setPasswordBox(true);
135 core::rect<s32> rect(0, 0, 110, 20);
136 rect += topleft_client + v2s32(35, ypos+6);
137 wchar_t* text = wgettext("Confirm Password");
138 Environment->addStaticText(text, rect, false, true, this, -1);
142 core::rect<s32> rect(0, 0, 230, 30);
143 rect += topleft_client + v2s32(160, ypos);
144 gui::IGUIEditBox *e =
145 Environment->addEditBox(L"", rect, true, this, ID_newPassword2);
146 e->setPasswordBox(true);
151 core::rect<s32> rect(0, 0, 140, 30);
152 rect = rect + v2s32(size.X/2-140/2, ypos);
153 wchar_t* text = wgettext("Change");
154 Environment->addButton(rect, this, ID_change, text);
160 core::rect<s32> rect(0, 0, 300, 20);
161 rect += topleft_client + v2s32(35, ypos);
162 wchar_t* text = wgettext("Passwords do not match!");
164 Environment->addStaticText(
166 rect, false, true, this, ID_message);
167 e->setVisible(false);
172 void GUIPasswordChange::drawMenu()
174 gui::IGUISkin* skin = Environment->getSkin();
177 video::IVideoDriver* driver = Environment->getVideoDriver();
179 video::SColor bgcolor(140,0,0,0);
180 driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
182 gui::IGUIElement::draw();
185 bool GUIPasswordChange::acceptInput()
187 std::wstring oldpass;
188 std::wstring newpass;
190 e = getElementFromId(ID_oldPassword);
192 oldpass = e->getText();
193 e = getElementFromId(ID_newPassword1);
195 newpass = e->getText();
196 e = getElementFromId(ID_newPassword2);
197 if(e != NULL && newpass != e->getText())
199 e = getElementFromId(ID_message);
204 m_client->sendChangePassword(oldpass, newpass);
208 bool GUIPasswordChange::OnEvent(const SEvent& event)
210 if(event.EventType==EET_KEY_INPUT_EVENT)
212 if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
217 if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
224 if(event.EventType==EET_GUI_EVENT)
226 if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST
229 if(!canTakeFocus(event.GUIEvent.Element))
231 dstream<<"GUIPasswordChange: Not allowing focus change."
233 // Returning true disables focus change
237 if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
239 switch(event.GUIEvent.Caller->getID())
247 if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER)
249 switch(event.GUIEvent.Caller->getID())
252 case ID_newPassword1:
253 case ID_newPassword2:
261 return Parent ? Parent->OnEvent(event) : false;