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"
20 #include "client/client.h"
21 #include "guiButton.h"
22 #include <IGUICheckBox.h>
23 #include <IGUIEditBox.h>
24 #include <IGUIButton.h>
25 #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;
36 const int ID_cancel = 261;
38 GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
39 gui::IGUIElement* parent, s32 id,
40 IMenuManager *menumgr,
42 ISimpleTextureSource *tsrc
44 GUIModalMenu(env, parent, id, menumgr),
50 GUIPasswordChange::~GUIPasswordChange()
55 void GUIPasswordChange::removeChildren()
57 const core::list<gui::IGUIElement *> &children = getChildren();
58 core::list<gui::IGUIElement *> children_copy;
59 for (gui::IGUIElement *i : children) {
60 children_copy.push_back(i);
63 for (gui::IGUIElement *i : children_copy) {
67 void GUIPasswordChange::regenerateGui(v2u32 screensize)
80 Calculate new sizes and positions
82 const float s = m_gui_scale;
83 DesiredRect = core::rect<s32>(
84 screensize.X / 2 - 580 * s / 2,
85 screensize.Y / 2 - 300 * s / 2,
86 screensize.X / 2 + 580 * s / 2,
87 screensize.Y / 2 + 300 * s / 2
89 recalculateAbsolutePosition(false);
91 v2s32 size = DesiredRect.getSize();
92 v2s32 topleft_client(40 * s, 0);
101 core::rect<s32> rect(0, 0, 150 * s, 20 * s);
102 rect += topleft_client + v2s32(25 * s, ypos + 6 * s);
103 text = wgettext("Old Password");
104 Environment->addStaticText(text, rect, false, true, this, -1);
108 core::rect<s32> rect(0, 0, 230 * s, 30 * s);
109 rect += topleft_client + v2s32(160 * s, ypos);
110 gui::IGUIEditBox *e = Environment->addEditBox(
111 m_oldpass.c_str(), rect, true, this, ID_oldPassword);
112 Environment->setFocus(e);
113 e->setPasswordBox(true);
117 core::rect<s32> rect(0, 0, 150 * s, 20 * s);
118 rect += topleft_client + v2s32(25 * s, ypos + 6 * s);
119 text = wgettext("New Password");
120 Environment->addStaticText(text, rect, false, true, this, -1);
124 core::rect<s32> rect(0, 0, 230 * s, 30 * s);
125 rect += topleft_client + v2s32(160 * s, ypos);
126 gui::IGUIEditBox *e = Environment->addEditBox(
127 m_newpass.c_str(), rect, true, this, ID_newPassword1);
128 e->setPasswordBox(true);
132 core::rect<s32> rect(0, 0, 150 * s, 20 * s);
133 rect += topleft_client + v2s32(25 * s, ypos + 6 * s);
134 text = wgettext("Confirm Password");
135 Environment->addStaticText(text, rect, false, true, this, -1);
139 core::rect<s32> rect(0, 0, 230 * s, 30 * s);
140 rect += topleft_client + v2s32(160 * s, ypos);
141 gui::IGUIEditBox *e = Environment->addEditBox(
142 m_newpass_confirm.c_str(), rect, true, this, ID_newPassword2);
143 e->setPasswordBox(true);
148 core::rect<s32> rect(0, 0, 100 * s, 30 * s);
149 rect = rect + v2s32(size.X / 4 + 56 * s, ypos);
150 text = wgettext("Change");
151 GUIButton::addButton(Environment, rect, m_tsrc, this, ID_change, text);
155 core::rect<s32> rect(0, 0, 100 * s, 30 * s);
156 rect = rect + v2s32(size.X / 4 + 185 * s, ypos);
157 text = wgettext("Cancel");
158 GUIButton::addButton(Environment, rect, m_tsrc, this, ID_cancel, text);
164 core::rect<s32> rect(0, 0, 300 * s, 20 * s);
165 rect += topleft_client + v2s32(35 * s, ypos);
166 text = wgettext("Passwords do not match!");
168 Environment->addStaticText(
169 text, rect, false, true, this, ID_message);
170 e->setVisible(false);
175 void GUIPasswordChange::drawMenu()
177 gui::IGUISkin *skin = Environment->getSkin();
180 video::IVideoDriver *driver = Environment->getVideoDriver();
182 video::SColor bgcolor(140, 0, 0, 0);
183 driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
185 gui::IGUIElement::draw();
191 void GUIPasswordChange::acceptInput()
194 e = getElementFromId(ID_oldPassword);
196 m_oldpass = e->getText();
197 e = getElementFromId(ID_newPassword1);
199 m_newpass = e->getText();
200 e = getElementFromId(ID_newPassword2);
202 m_newpass_confirm = e->getText();
205 bool GUIPasswordChange::processInput()
207 if (m_newpass != m_newpass_confirm) {
208 gui::IGUIElement *e = getElementFromId(ID_message);
213 m_client->sendChangePassword(wide_to_utf8(m_oldpass), wide_to_utf8(m_newpass));
217 bool GUIPasswordChange::OnEvent(const SEvent &event)
219 if (event.EventType == EET_KEY_INPUT_EVENT) {
221 if ((event.KeyInput.Key == KEY_ESCAPE ||
222 event.KeyInput.Key == KEY_CANCEL) &&
223 event.KeyInput.PressedDown) {
228 if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) {
235 if (event.EventType == EET_GUI_EVENT) {
236 if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST &&
238 if (!canTakeFocus(event.GUIEvent.Element)) {
239 dstream << "GUIPasswordChange: Not allowing focus change."
241 // Returning true disables focus change
245 if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
246 switch (event.GUIEvent.Caller->getID()) {
257 if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) {
258 switch (event.GUIEvent.Caller->getID()) {
260 case ID_newPassword1:
261 case ID_newPassword2:
270 return Parent ? Parent->OnEvent(event) : false;
273 std::string GUIPasswordChange::getNameByID(s32 id)
277 return "old_password";
278 case ID_newPassword1:
279 return "new_password_1";
280 case ID_newPassword2:
281 return "new_password_2";
287 bool GUIPasswordChange::getAndroidUIInput()
289 if (!hasAndroidUIInput())
292 gui::IGUIElement *e = nullptr;
293 if (m_jni_field_name == "old_password")
294 e = getElementFromId(ID_oldPassword);
295 else if (m_jni_field_name == "new_password_1")
296 e = getElementFromId(ID_newPassword1);
297 else if (m_jni_field_name == "new_password_2")
298 e = getElementFromId(ID_newPassword2);
301 std::string text = porting::getInputDialogValue();
302 e->setText(utf8_to_wide(text).c_str());
304 m_jni_field_name.clear();