X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2FguiTextInputMenu.cpp;h=094532a62024648db4f7a40f438445ffbd743156;hb=ab45133ab4826359ca9a5ed50b68150eb462c8ef;hp=8a9da3489b1f67a196f8d08215bc1a5347dd76aa;hpb=7e490e72139fbfe12535c71b27228dd82ef0250b;p=oweals%2Fminetest.git diff --git a/src/guiTextInputMenu.cpp b/src/guiTextInputMenu.cpp index 8a9da3489..094532a62 100644 --- a/src/guiTextInputMenu.cpp +++ b/src/guiTextInputMenu.cpp @@ -3,16 +3,16 @@ Minetest-c55 Copyright (C) 2010 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -21,14 +21,21 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "debug.h" #include "serialization.h" #include +#include +#include +#include +#include +#include + +#include "gettext.h" GUITextInputMenu::GUITextInputMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, - int *active_menu_count, + IMenuManager *menumgr, TextDest *dest, std::wstring initial_text ): - GUIModalMenu(env, parent, id, active_menu_count), + GUIModalMenu(env, parent, id, menumgr), m_dest(dest), m_initial_text(initial_text) { @@ -37,6 +44,8 @@ GUITextInputMenu::GUITextInputMenu(gui::IGUIEnvironment* env, GUITextInputMenu::~GUITextInputMenu() { removeChildren(); + if(m_dest) + delete m_dest; } void GUITextInputMenu::removeChildren() @@ -99,12 +108,21 @@ void GUITextInputMenu::regenerateGui(v2u32 screensize) gui::IGUIElement *e = Environment->addEditBox(text.c_str(), rect, true, this, 256); Environment->setFocus(e); + + irr::SEvent evt; + evt.EventType = EET_KEY_INPUT_EVENT; + evt.KeyInput.Key = KEY_END; + evt.KeyInput.PressedDown = true; + e->OnEvent(evt); } + changeCtype(""); { core::rect rect(0, 0, 140, 30); rect = rect + v2s32(size.X/2-140/2, size.Y/2-30/2+25); - Environment->addButton(rect, this, 257, L"Proceed"); + Environment->addButton(rect, this, 257, + wgettext("Proceed")); } + changeCtype("C"); } void GUITextInputMenu::drawMenu() @@ -120,6 +138,20 @@ void GUITextInputMenu::drawMenu() gui::IGUIElement::draw(); } +void GUITextInputMenu::acceptInput() +{ + if(m_dest) + { + gui::IGUIElement *e = getElementFromId(256); + if(e != NULL) + { + m_dest->gotText(e->getText()); + } + delete m_dest; + m_dest = NULL; + } +} + bool GUITextInputMenu::OnEvent(const SEvent& event) { if(event.EventType==EET_KEY_INPUT_EVENT) @@ -129,6 +161,12 @@ bool GUITextInputMenu::OnEvent(const SEvent& event) quitMenu(); return true; } + if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown) + { + acceptInput(); + quitMenu(); + return true; + } } if(event.EventType==EET_GUI_EVENT) { @@ -148,17 +186,21 @@ bool GUITextInputMenu::OnEvent(const SEvent& event) switch(event.GUIEvent.Caller->getID()) { case 257: - if(m_dest) - { - gui::IGUIElement *e = getElementFromId(256); - if(e != NULL) - { - m_dest->gotText(e->getText()); - } - delete m_dest; - } + acceptInput(); quitMenu(); - break; + // quitMenu deallocates menu + return true; + } + } + if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER) + { + switch(event.GUIEvent.Caller->getID()) + { + case 256: + acceptInput(); + quitMenu(); + // quitMenu deallocates menu + return true; } } }