From 8729e7daec0c8fede3af1e4aaa235a6cd4b73cb1 Mon Sep 17 00:00:00 2001 From: red-001 Date: Tue, 9 May 2017 10:04:45 +0100 Subject: Add cancel button to password change menu. (#5720) * Add cancel button to password change menu. --- src/guiPasswordChange.cpp | 140 +++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 69 deletions(-) (limited to 'src/guiPasswordChange.cpp') diff --git a/src/guiPasswordChange.cpp b/src/guiPasswordChange.cpp index e2f9994be..d05c48632 100644 --- a/src/guiPasswordChange.cpp +++ b/src/guiPasswordChange.cpp @@ -33,6 +33,7 @@ const int ID_newPassword1 = 257; const int ID_newPassword2 = 258; const int ID_change = 259; const int ID_message = 260; +const int ID_cancel = 261; GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, @@ -53,22 +54,27 @@ void GUIPasswordChange::removeChildren() { { gui::IGUIElement *e = getElementFromId(ID_oldPassword); - if(e != NULL) + if (e != NULL) e->remove(); } { gui::IGUIElement *e = getElementFromId(ID_newPassword1); - if(e != NULL) + if (e != NULL) e->remove(); } { gui::IGUIElement *e = getElementFromId(ID_newPassword2); - if(e != NULL) + if (e != NULL) e->remove(); } { gui::IGUIElement *e = getElementFromId(ID_change); - if(e != NULL) + if (e != NULL) + e->remove(); + } + { + gui::IGUIElement *e = getElementFromId(ID_cancel); + if (e != NULL) e->remove(); } } @@ -104,7 +110,7 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) s32 ypos = 50; { core::rect rect(0, 0, 150, 20); - rect += topleft_client + v2s32(25, ypos+6); + rect += topleft_client + v2s32(25, ypos + 6); text = wgettext("Old Password"); Environment->addStaticText(text, rect, false, true, this, -1); delete[] text; @@ -112,15 +118,15 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) { core::rect rect(0, 0, 230, 30); rect += topleft_client + v2s32(160, ypos); - gui::IGUIEditBox *e = - Environment->addEditBox(L"", rect, true, this, ID_oldPassword); + gui::IGUIEditBox *e = Environment->addEditBox( + L"", rect, true, this, ID_oldPassword); Environment->setFocus(e); e->setPasswordBox(true); } ypos += 50; { core::rect rect(0, 0, 150, 20); - rect += topleft_client + v2s32(25, ypos+6); + rect += topleft_client + v2s32(25, ypos + 6); text = wgettext("New Password"); Environment->addStaticText(text, rect, false, true, this, -1); delete[] text; @@ -128,14 +134,14 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) { core::rect rect(0, 0, 230, 30); rect += topleft_client + v2s32(160, ypos); - gui::IGUIEditBox *e = - Environment->addEditBox(L"", rect, true, this, ID_newPassword1); + gui::IGUIEditBox *e = Environment->addEditBox( + L"", rect, true, this, ID_newPassword1); e->setPasswordBox(true); } ypos += 50; { core::rect rect(0, 0, 150, 20); - rect += topleft_client + v2s32(25, ypos+6); + rect += topleft_client + v2s32(25, ypos + 6); text = wgettext("Confirm Password"); Environment->addStaticText(text, rect, false, true, this, -1); delete[] text; @@ -143,19 +149,26 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) { core::rect rect(0, 0, 230, 30); rect += topleft_client + v2s32(160, ypos); - gui::IGUIEditBox *e = - Environment->addEditBox(L"", rect, true, this, ID_newPassword2); + gui::IGUIEditBox *e = Environment->addEditBox( + L"", rect, true, this, ID_newPassword2); e->setPasswordBox(true); } ypos += 50; { - core::rect rect(0, 0, 140, 30); - rect = rect + v2s32(size.X/2-140/2, ypos); + core::rect rect(0, 0, 100, 30); + rect = rect + v2s32(size.X / 4 + 56, ypos); text = wgettext("Change"); Environment->addButton(rect, this, ID_change, text); delete[] text; } + { + core::rect rect(0, 0, 100, 30); + rect = rect + v2s32(size.X / 4 + 185, ypos); + text = wgettext("Cancel"); + Environment->addButton(rect, this, ID_cancel, text); + delete[] text; + } ypos += 50; { @@ -163,9 +176,8 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) rect += topleft_client + v2s32(35, ypos); text = wgettext("Passwords do not match!"); IGUIElement *e = - Environment->addStaticText( - text, - rect, false, true, this, ID_message); + Environment->addStaticText( + text, rect, false, true, this, ID_message); e->setVisible(false); delete[] text; } @@ -173,12 +185,12 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) void GUIPasswordChange::drawMenu() { - gui::IGUISkin* skin = Environment->getSkin(); + gui::IGUISkin *skin = Environment->getSkin(); if (!skin) return; - video::IVideoDriver* driver = Environment->getVideoDriver(); + video::IVideoDriver *driver = Environment->getVideoDriver(); - video::SColor bgcolor(140,0,0,0); + video::SColor bgcolor(140, 0, 0, 0); driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect); gui::IGUIElement::draw(); @@ -186,75 +198,66 @@ void GUIPasswordChange::drawMenu() bool GUIPasswordChange::acceptInput() { - std::wstring oldpass; - std::wstring newpass; - gui::IGUIElement *e; - e = getElementFromId(ID_oldPassword); - if(e != NULL) - oldpass = e->getText(); - e = getElementFromId(ID_newPassword1); - if(e != NULL) - newpass = e->getText(); - e = getElementFromId(ID_newPassword2); - if(e != NULL && newpass != e->getText()) - { - e = getElementFromId(ID_message); - if(e != NULL) - e->setVisible(true); - return false; - } - m_client->sendChangePassword(wide_to_utf8(oldpass), - wide_to_utf8(newpass)); - return true; + std::wstring oldpass; + std::wstring newpass; + gui::IGUIElement *e; + e = getElementFromId(ID_oldPassword); + if (e != NULL) + oldpass = e->getText(); + e = getElementFromId(ID_newPassword1); + if (e != NULL) + newpass = e->getText(); + e = getElementFromId(ID_newPassword2); + if (e != NULL && newpass != e->getText()) { + e = getElementFromId(ID_message); + if (e != NULL) + e->setVisible(true); + return false; + } + m_client->sendChangePassword(wide_to_utf8(oldpass), wide_to_utf8(newpass)); + return true; } -bool GUIPasswordChange::OnEvent(const SEvent& event) +bool GUIPasswordChange::OnEvent(const SEvent &event) { - if(event.EventType==EET_KEY_INPUT_EVENT) - { - if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown) - { + if (event.EventType == EET_KEY_INPUT_EVENT) { + if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) { quitMenu(); return true; } - if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown) - { - if(acceptInput()) + if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) { + if (acceptInput()) quitMenu(); return true; } } - if(event.EventType==EET_GUI_EVENT) - { - if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST - && isVisible()) - { - if(!canTakeFocus(event.GUIEvent.Element)) - { - dstream<<"GUIPasswordChange: Not allowing focus change." - <getID()) - { + if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) { + switch (event.GUIEvent.Caller->getID()) { case ID_change: - if(acceptInput()) + if (acceptInput()) quitMenu(); return true; + case ID_cancel: + quitMenu(); + return true; } } - if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER) - { - switch(event.GUIEvent.Caller->getID()) - { + if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { + switch (event.GUIEvent.Caller->getID()) { case ID_oldPassword: case ID_newPassword1: case ID_newPassword2: - if(acceptInput()) + if (acceptInput()) quitMenu(); return true; } @@ -263,4 +266,3 @@ bool GUIPasswordChange::OnEvent(const SEvent& event) return Parent ? Parent->OnEvent(event) : false; } - -- cgit v1.2.3 From 1ff5ee0b69c550553f1322d3c614fd646da8846d Mon Sep 17 00:00:00 2001 From: red-001 Date: Sat, 20 May 2017 11:29:44 +0100 Subject: Improve password change menu (#5757) - Fix the GUI getting messed up when resizing - Save the input when resizing --- src/guiPasswordChange.cpp | 77 +++++++++++++++++++++++------------------------ src/guiPasswordChange.h | 7 ++++- 2 files changed, 44 insertions(+), 40 deletions(-) (limited to 'src/guiPasswordChange.cpp') diff --git a/src/guiPasswordChange.cpp b/src/guiPasswordChange.cpp index d05c48632..c8eb36e5f 100644 --- a/src/guiPasswordChange.cpp +++ b/src/guiPasswordChange.cpp @@ -41,7 +41,10 @@ GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env, Client* client ): GUIModalMenu(env, parent, id, menumgr), - m_client(client) + m_client(client), + m_oldpass(L""), + m_newpass(L""), + m_newpass_confirm(L"") { } @@ -52,35 +55,24 @@ GUIPasswordChange::~GUIPasswordChange() void GUIPasswordChange::removeChildren() { - { - gui::IGUIElement *e = getElementFromId(ID_oldPassword); - if (e != NULL) - e->remove(); + const core::list &children = getChildren(); + core::list children_copy; + for (core::list::ConstIterator i = children.begin(); + i != children.end(); i++) { + children_copy.push_back(*i); } - { - gui::IGUIElement *e = getElementFromId(ID_newPassword1); - if (e != NULL) - e->remove(); - } - { - gui::IGUIElement *e = getElementFromId(ID_newPassword2); - if (e != NULL) - e->remove(); - } - { - gui::IGUIElement *e = getElementFromId(ID_change); - if (e != NULL) - e->remove(); - } - { - gui::IGUIElement *e = getElementFromId(ID_cancel); - if (e != NULL) - e->remove(); + for (core::list::Iterator i = children_copy.begin(); + i != children_copy.end(); i++) { + (*i)->remove(); } } - void GUIPasswordChange::regenerateGui(v2u32 screensize) { + /* + save current input + */ + acceptInput(); + /* Remove stuff */ @@ -119,7 +111,7 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) core::rect rect(0, 0, 230, 30); rect += topleft_client + v2s32(160, ypos); gui::IGUIEditBox *e = Environment->addEditBox( - L"", rect, true, this, ID_oldPassword); + m_oldpass.c_str(), rect, true, this, ID_oldPassword); Environment->setFocus(e); e->setPasswordBox(true); } @@ -135,7 +127,7 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) core::rect rect(0, 0, 230, 30); rect += topleft_client + v2s32(160, ypos); gui::IGUIEditBox *e = Environment->addEditBox( - L"", rect, true, this, ID_newPassword1); + m_newpass.c_str(), rect, true, this, ID_newPassword1); e->setPasswordBox(true); } ypos += 50; @@ -150,7 +142,7 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) core::rect rect(0, 0, 230, 30); rect += topleft_client + v2s32(160, ypos); gui::IGUIEditBox *e = Environment->addEditBox( - L"", rect, true, this, ID_newPassword2); + m_newpass_confirm.c_str(), rect, true, this, ID_newPassword2); e->setPasswordBox(true); } @@ -196,25 +188,29 @@ void GUIPasswordChange::drawMenu() gui::IGUIElement::draw(); } -bool GUIPasswordChange::acceptInput() +void GUIPasswordChange::acceptInput() { - std::wstring oldpass; - std::wstring newpass; gui::IGUIElement *e; e = getElementFromId(ID_oldPassword); if (e != NULL) - oldpass = e->getText(); + m_oldpass = e->getText(); e = getElementFromId(ID_newPassword1); if (e != NULL) - newpass = e->getText(); + m_newpass = e->getText(); e = getElementFromId(ID_newPassword2); - if (e != NULL && newpass != e->getText()) { - e = getElementFromId(ID_message); + if (e != NULL) + m_newpass_confirm = e->getText(); +} + +bool GUIPasswordChange::processInput() +{ + if (m_newpass != m_newpass_confirm) { + gui::IGUIElement *e = getElementFromId(ID_message); if (e != NULL) e->setVisible(true); return false; } - m_client->sendChangePassword(wide_to_utf8(oldpass), wide_to_utf8(newpass)); + m_client->sendChangePassword(wide_to_utf8(m_oldpass), wide_to_utf8(m_newpass)); return true; } @@ -226,7 +222,8 @@ bool GUIPasswordChange::OnEvent(const SEvent &event) return true; } if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) { - if (acceptInput()) + acceptInput(); + if (processInput()) quitMenu(); return true; } @@ -244,7 +241,8 @@ bool GUIPasswordChange::OnEvent(const SEvent &event) if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) { switch (event.GUIEvent.Caller->getID()) { case ID_change: - if (acceptInput()) + acceptInput(); + if (processInput()) quitMenu(); return true; case ID_cancel: @@ -257,7 +255,8 @@ bool GUIPasswordChange::OnEvent(const SEvent &event) case ID_oldPassword: case ID_newPassword1: case ID_newPassword2: - if (acceptInput()) + acceptInput(); + if (processInput()) quitMenu(); return true; } diff --git a/src/guiPasswordChange.h b/src/guiPasswordChange.h index cf81389eb..9680ef13d 100644 --- a/src/guiPasswordChange.h +++ b/src/guiPasswordChange.h @@ -39,12 +39,17 @@ public: void drawMenu(); - bool acceptInput(); + void acceptInput(); + + bool processInput(); bool OnEvent(const SEvent &event); private: Client *m_client; + std::wstring m_oldpass; + std::wstring m_newpass; + std::wstring m_newpass_confirm; }; #endif -- cgit v1.2.3