Remove not really used guiTextInputMenu
authorsapier <Sapier at GMX dot net>
Fri, 13 Jun 2014 18:10:11 +0000 (20:10 +0200)
committersapier <Sapier at GMX dot net>
Tue, 17 Jun 2014 19:27:40 +0000 (21:27 +0200)
src/CMakeLists.txt
src/game.cpp
src/guiTextInputMenu.cpp [deleted file]
src/guiTextInputMenu.h [deleted file]
src/intlGUIEditBox.cpp [deleted file]
src/intlGUIEditBox.h [deleted file]

index 0992ea17646fcc6b0bc92eab9fa1eb1589b7b6fc..f8aa75ea5754433fb459a796f0a585cbcf3d056c 100644 (file)
@@ -444,7 +444,6 @@ set(minetest_SRCS
        chat.cpp
        hud.cpp
        guiKeyChangeMenu.cpp
-       guiTextInputMenu.cpp
        guiFormSpecMenu.cpp
        guiTable.cpp
        guiPasswordChange.cpp
@@ -463,14 +462,6 @@ set(minetest_SRCS
        drawscene.cpp
        ${minetest_SCRIPT_SRCS}
 )
-
-if(USE_FREETYPE)
-       set(minetest_SRCS
-               ${minetest_SRCS}
-               intlGUIEditBox.cpp
-       )
-endif(USE_FREETYPE)
-
 list(SORT minetest_SRCS)
 
 # Server sources
index c2ee7f311116a15b32bc3e0a9b08d246de756bf2..9bbbb5ecf9bb1be566c0f0f9b3249b473f7ff69f 100644 (file)
@@ -31,7 +31,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "guiPasswordChange.h"
 #include "guiVolumeChange.h"
 #include "guiFormSpecMenu.h"
-#include "guiTextInputMenu.h"
 #include "tool.h"
 #include "guiChatConsole.h"
 #include "config.h"
@@ -2905,26 +2904,7 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
                                repeat_rightclick_timer = 0;
                                infostream<<"Ground right-clicked"<<std::endl;
 
-                               // Sign special case, at least until formspec is properly implemented.
-                               // Deprecated?
-                               if(meta && meta->getString("formspec") == "hack:sign_text_input"
-                                               && !random_input
-                                               && !input->isKeyDown(getKeySetting("keymap_sneak")))
-                               {
-                                       infostream<<"Launching metadata text input"<<std::endl;
-
-                                       // Get a new text for it
-
-                                       TextDest *dest = new TextDestNodeMetadata(nodepos, &client);
-
-                                       std::wstring wtext = narrow_to_wide(meta->getString("text"));
-
-                                       (new GUITextInputMenu(guienv, guiroot, -1,
-                                                       &g_menumgr, dest,
-                                                       wtext))->drop();
-                               }
-                               // If metadata provides an inventory view, activate it
-                               else if(meta && meta->getString("formspec") != "" && !random_input
+                               if(meta && meta->getString("formspec") != "" && !random_input
                                                && !input->isKeyDown(getKeySetting("keymap_sneak")))
                                {
                                        infostream<<"Launching custom inventory view"<<std::endl;
diff --git a/src/guiTextInputMenu.cpp b/src/guiTextInputMenu.cpp
deleted file mode 100644 (file)
index 535bf49..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-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 Lesser General Public License for more details.
-
-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.
-*/
-
-#include "guiTextInputMenu.h"
-#include "debug.h"
-#include "serialization.h"
-#include "main.h" // for g_settings
-#include "settings.h"
-#include <string>
-#include <IGUICheckBox.h>
-#include <IGUIEditBox.h>
-#include <IGUIButton.h>
-#include <IGUIStaticText.h>
-#include <IGUIFont.h>
-
-#include "gettext.h"
-
-#if USE_FREETYPE
-#include "intlGUIEditBox.h"
-#endif
-
-GUITextInputMenu::GUITextInputMenu(gui::IGUIEnvironment* env,
-               gui::IGUIElement* parent, s32 id,
-               IMenuManager *menumgr,
-               TextDest *dest,
-               std::wstring initial_text
-):
-       GUIModalMenu(env, parent, id, menumgr),
-       m_dest(dest),
-       m_initial_text(initial_text)
-{
-}
-
-GUITextInputMenu::~GUITextInputMenu()
-{
-       removeChildren();
-       if(m_dest)
-               delete m_dest;
-}
-
-void GUITextInputMenu::removeChildren()
-{
-       {
-               gui::IGUIElement *e = getElementFromId(256);
-               if(e != NULL)
-                       e->remove();
-       }
-       {
-               gui::IGUIElement *e = getElementFromId(257);
-               if(e != NULL)
-                       e->remove();
-       }
-}
-
-void GUITextInputMenu::regenerateGui(v2u32 screensize)
-{
-       std::wstring text;
-
-       {
-               gui::IGUIElement *e = getElementFromId(256);
-               if(e != NULL)
-               {
-                       text = e->getText();
-               }
-               else
-               {
-                       text = m_initial_text;
-                       m_initial_text = L"";
-               }
-       }
-
-       /*
-               Remove stuff
-       */
-       removeChildren();
-       
-       /*
-               Calculate new sizes and positions
-       */
-       core::rect<s32> rect(
-                       screensize.X/2 - 580/2,
-                       screensize.Y/2 - 300/2,
-                       screensize.X/2 + 580/2,
-                       screensize.Y/2 + 300/2
-       );
-       
-       DesiredRect = rect;
-       recalculateAbsolutePosition(false);
-
-       v2s32 size = rect.getSize();
-
-       /*
-               Add stuff
-       */
-       {
-               core::rect<s32> rect(0, 0, 300, 30);
-               rect = rect + v2s32(size.X/2-300/2, size.Y/2-30/2-25);
-               gui::IGUIElement *e;
-               #if USE_FREETYPE
-               if (g_settings->getBool("freetype")) {
-                       e = (gui::IGUIElement *) new gui::intlGUIEditBox(text.c_str(), true, Environment, this, 256, rect);
-                       e->drop();
-               } else {
-                       e = Environment->addEditBox(text.c_str(), rect, true, this, 256);
-               }
-               #else
-                       e = Environment->addEditBox(text.c_str(), rect, true, this, 256);
-               #endif
-               Environment->setFocus(e);
-
-               irr::SEvent evt;
-               evt.EventType = EET_KEY_INPUT_EVENT;
-               evt.KeyInput.Key = KEY_END;
-               evt.KeyInput.PressedDown = true;
-               evt.KeyInput.Char = 0;
-               evt.KeyInput.Control = 0;
-               evt.KeyInput.Shift = 0;
-               e->OnEvent(evt);
-       }
-       {
-               core::rect<s32> rect(0, 0, 140, 30);
-               rect = rect + v2s32(size.X/2-140/2, size.Y/2-30/2+25);
-               wchar_t* text = wgettext("Proceed");
-               Environment->addButton(rect, this, 257,
-                       text);
-               delete[] text;
-       }
-}
-
-void GUITextInputMenu::drawMenu()
-{
-       gui::IGUISkin* skin = Environment->getSkin();
-       if (!skin)
-               return;
-       video::IVideoDriver* driver = Environment->getVideoDriver();
-       
-       video::SColor bgcolor(140,0,0,0);
-       driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
-
-       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)
-       {
-               if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
-               {
-                       quitMenu();
-                       return true;
-               }
-               if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
-               {
-                       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<<"GUITextInputMenu: Not allowing focus change."
-                                               <<std::endl;
-                               // Returning true disables focus change
-                               return true;
-                       }
-               }
-               if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
-               {
-                       switch(event.GUIEvent.Caller->getID())
-                       {
-                       case 257:
-                               acceptInput();
-                               quitMenu();
-                               // 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;
-                       }
-               }
-       }
-
-       return Parent ? Parent->OnEvent(event) : false;
-}
-
diff --git a/src/guiTextInputMenu.h b/src/guiTextInputMenu.h
deleted file mode 100644 (file)
index 2fa7ead..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-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 Lesser General Public License for more details.
-
-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.
-*/
-
-#ifndef GUITEXTINPUTMENU_HEADER
-#define GUITEXTINPUTMENU_HEADER
-
-#include "irrlichttypes_extrabloated.h"
-#include "modalMenu.h"
-#include "guiFormSpecMenu.h"
-#include <string>
-
-class GUITextInputMenu : public GUIModalMenu
-{
-public:
-       GUITextInputMenu(gui::IGUIEnvironment* env,
-                       gui::IGUIElement* parent, s32 id,
-                       IMenuManager *menumgr,
-                       TextDest *dest,
-                       std::wstring initial_text);
-       ~GUITextInputMenu();
-       
-       void removeChildren();
-       /*
-               Remove and re-add (or reposition) stuff
-       */
-       void regenerateGui(v2u32 screensize);
-
-       void drawMenu();
-
-       void acceptInput();
-
-       bool OnEvent(const SEvent& event);
-       
-private:
-       TextDest *m_dest;
-       std::wstring m_initial_text;
-};
-
-#endif
-
diff --git a/src/intlGUIEditBox.cpp b/src/intlGUIEditBox.cpp
deleted file mode 100644 (file)
index 32cca48..0000000
+++ /dev/null
@@ -1,1508 +0,0 @@
-// 11.11.2011 11:11 ValkaTR
-//
-// This is a copy of intlGUIEditBox from the irrlicht, but with a
-// fix in the OnEvent function, which doesn't allowed input of
-// other keyboard layouts than latin-1
-//
-// Characters like: ä ö ü õ ы й ю я ъ № € ° ...
-//
-// This fix is only needed for linux, because of a bug
-// in the CIrrDeviceLinux.cpp:1014-1015 of the irrlicht
-//
-// Also locale in the programm should not be changed to
-// a "C", "POSIX" or whatever, it should be set to "",
-// or XLookupString will return nothing for the international
-// characters.
-//
-// From the "man setlocale":
-//
-// On startup of the main program, the portable "C" locale
-// is selected as default.  A  program  may  be  made
-// portable to all locales by calling:
-//
-//           setlocale(LC_ALL, "");
-//
-//       after  program initialization....
-//
-
-// Copyright (C) 2002-2013 Nikolaus Gebhardt
-// This file is part of the "Irrlicht Engine".
-// For conditions of distribution and use, see copyright notice in irrlicht.h
-
-#include "intlGUIEditBox.h"
-
-#ifdef _IRR_COMPILE_WITH_GUI_
-
-#include "IGUISkin.h"
-#include "IGUIEnvironment.h"
-#include "IGUIFont.h"
-#include "IVideoDriver.h"
-//#include "rect.h"
-//#include "irrlicht/os.cpp"
-#include "porting.h"
-//#include "Keycodes.h"
-
-/*
-       todo:
-       optional scrollbars
-       ctrl+left/right to select word
-       double click/ctrl click: word select + drag to select whole words, triple click to select line
-       optional? dragging selected text
-       numerical
-*/
-
-namespace irr
-{
-namespace gui
-{
-
-//! constructor
-intlGUIEditBox::intlGUIEditBox(const wchar_t* text, bool border,
-               IGUIEnvironment* environment, IGUIElement* parent, s32 id,
-               const core::rect<s32>& rectangle)
-       : IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false),
-       Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0),
-       OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0),
-       Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0),
-       WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false),
-       PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER),
-       CurrentTextRect(0,0,1,1), FrameRect(rectangle)
-{
-       #ifdef _DEBUG
-       setDebugName("intlintlGUIEditBox");
-       #endif
-
-       Text = text;
-
-       if (Environment)
-               Operator = Environment->getOSOperator();
-
-       if (Operator)
-               Operator->grab();
-
-       // this element can be tabbed to
-       setTabStop(true);
-       setTabOrder(-1);
-
-       IGUISkin *skin = 0;
-       if (Environment)
-               skin = Environment->getSkin();
-       if (Border && skin)
-       {
-               FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
-               FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
-               FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
-               FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
-       }
-
-       breakText();
-
-       calculateScrollPos();
-}
-
-
-//! destructor
-intlGUIEditBox::~intlGUIEditBox()
-{
-       if (OverrideFont)
-               OverrideFont->drop();
-
-       if (Operator)
-               Operator->drop();
-}
-
-
-//! Sets another skin independent font.
-void intlGUIEditBox::setOverrideFont(IGUIFont* font)
-{
-       if (OverrideFont == font)
-               return;
-
-       if (OverrideFont)
-               OverrideFont->drop();
-
-       OverrideFont = font;
-
-       if (OverrideFont)
-               OverrideFont->grab();
-
-       breakText();
-}
-
-IGUIFont * intlGUIEditBox::getOverrideFont() const
-{
-       return OverrideFont;
-}
-
-//! Get the font which is used right now for drawing
-IGUIFont* intlGUIEditBox::getActiveFont() const
-{
-       if ( OverrideFont )
-               return OverrideFont;
-       IGUISkin* skin = Environment->getSkin();
-       if (skin)
-               return skin->getFont();
-       return 0;
-}
-
-//! Sets another color for the text.
-void intlGUIEditBox::setOverrideColor(video::SColor color)
-{
-       OverrideColor = color;
-       OverrideColorEnabled = true;
-}
-
-video::SColor intlGUIEditBox::getOverrideColor() const
-{
-       return OverrideColor;
-}
-
-//! Turns the border on or off
-void intlGUIEditBox::setDrawBorder(bool border)
-{
-       Border = border;
-}
-
-//! Sets whether to draw the background
-void intlGUIEditBox::setDrawBackground(bool draw)
-{
-}
-
-//! Sets if the text should use the overide color or the color in the gui skin.
-void intlGUIEditBox::enableOverrideColor(bool enable)
-{
-       OverrideColorEnabled = enable;
-}
-
-bool intlGUIEditBox::isOverrideColorEnabled() const
-{
-       _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
-       return OverrideColorEnabled;
-}
-
-//! Enables or disables word wrap
-void intlGUIEditBox::setWordWrap(bool enable)
-{
-       WordWrap = enable;
-       breakText();
-}
-
-
-void intlGUIEditBox::updateAbsolutePosition()
-{
-    core::rect<s32> oldAbsoluteRect(AbsoluteRect);
-       IGUIElement::updateAbsolutePosition();
-       if ( oldAbsoluteRect != AbsoluteRect )
-       {
-        breakText();
-       }
-}
-
-
-//! Checks if word wrap is enabled
-bool intlGUIEditBox::isWordWrapEnabled() const
-{
-       _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
-       return WordWrap;
-}
-
-
-//! Enables or disables newlines.
-void intlGUIEditBox::setMultiLine(bool enable)
-{
-       MultiLine = enable;
-}
-
-
-//! Checks if multi line editing is enabled
-bool intlGUIEditBox::isMultiLineEnabled() const
-{
-       _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
-       return MultiLine;
-}
-
-
-void intlGUIEditBox::setPasswordBox(bool passwordBox, wchar_t passwordChar)
-{
-       PasswordBox = passwordBox;
-       if (PasswordBox)
-       {
-               PasswordChar = passwordChar;
-               setMultiLine(false);
-               setWordWrap(false);
-               BrokenText.clear();
-       }
-}
-
-
-bool intlGUIEditBox::isPasswordBox() const
-{
-       _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
-       return PasswordBox;
-}
-
-
-//! Sets text justification
-void intlGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical)
-{
-       HAlign = horizontal;
-       VAlign = vertical;
-}
-
-
-//! called if an event happened.
-bool intlGUIEditBox::OnEvent(const SEvent& event)
-{
-       if (IsEnabled)
-       {
-
-               switch(event.EventType)
-               {
-               case EET_GUI_EVENT:
-                       if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
-                       {
-                               if (event.GUIEvent.Caller == this)
-                               {
-                                       MouseMarking = false;
-                                       setTextMarkers(0,0);
-                               }
-                       }
-                       break;
-               case EET_KEY_INPUT_EVENT:
-        {
-#if defined(linux)
-            // ################################################################
-                       // ValkaTR:
-            // This part is the difference from the original intlGUIEditBox
-            // It converts UTF-8 character into a UCS-2 (wchar_t)
-            wchar_t wc = L'_';
-            mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
-
-            //printf( "char: %lc (%u)  \r\n", wc, wc );
-
-            SEvent irrevent(event);
-            irrevent.KeyInput.Char = wc;
-            // ################################################################
-
-                       if (processKey(irrevent))
-                               return true;
-#else
-                       if (processKey(event))
-                               return true;
-#endif // defined(linux)
-
-                       break;
-        }
-               case EET_MOUSE_INPUT_EVENT:
-                       if (processMouse(event))
-                               return true;
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       return IGUIElement::OnEvent(event);
-}
-
-
-bool intlGUIEditBox::processKey(const SEvent& event)
-{
-       if (!event.KeyInput.PressedDown)
-               return false;
-
-       bool textChanged = false;
-       s32 newMarkBegin = MarkBegin;
-       s32 newMarkEnd = MarkEnd;
-
-       // control shortcut handling
-
-       if (event.KeyInput.Control)
-       {
-               // german backlash '\' entered with control + '?'
-               if ( event.KeyInput.Char == '\\' )
-               {
-                       inputChar(event.KeyInput.Char);
-                       return true;
-               }
-
-               switch(event.KeyInput.Key)
-               {
-               case KEY_KEY_A:
-                       // select all
-                       newMarkBegin = 0;
-                       newMarkEnd = Text.size();
-                       break;
-               case KEY_KEY_C:
-                       // copy to clipboard
-                       if (!PasswordBox && Operator && MarkBegin != MarkEnd)
-                       {
-                               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-                               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-
-                               core::stringc s;
-                               s = Text.subString(realmbgn, realmend - realmbgn).c_str();
-                               Operator->copyToClipboard(s.c_str());
-                       }
-                       break;
-               case KEY_KEY_X:
-                       // cut to the clipboard
-                       if (!PasswordBox && Operator && MarkBegin != MarkEnd)
-                       {
-                               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-                               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-
-                               // copy
-                               core::stringc sc;
-                               sc = Text.subString(realmbgn, realmend - realmbgn).c_str();
-                               Operator->copyToClipboard(sc.c_str());
-
-                               if (IsEnabled)
-                               {
-                                       // delete
-                                       core::stringw s;
-                                       s = Text.subString(0, realmbgn);
-                                       s.append( Text.subString(realmend, Text.size()-realmend) );
-                                       Text = s;
-
-                                       CursorPos = realmbgn;
-                                       newMarkBegin = 0;
-                                       newMarkEnd = 0;
-                                       textChanged = true;
-                               }
-                       }
-                       break;
-               case KEY_KEY_V:
-                       if ( !IsEnabled )
-                               break;
-
-                       // paste from the clipboard
-                       if (Operator)
-                       {
-                               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-                               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-
-                               // add new character
-                               const c8* p = Operator->getTextFromClipboard();
-                               if (p)
-                               {
-                                       if (MarkBegin == MarkEnd)
-                                       {
-                                               // insert text
-                                               core::stringw s = Text.subString(0, CursorPos);
-                                               s.append(p);
-                                               s.append( Text.subString(CursorPos, Text.size()-CursorPos) );
-
-                                               if (!Max || s.size()<=Max) // thx to Fish FH for fix
-                                               {
-                                                       Text = s;
-                                                       s = p;
-                                                       CursorPos += s.size();
-                                               }
-                                       }
-                                       else
-                                       {
-                                               // replace text
-
-                                               core::stringw s = Text.subString(0, realmbgn);
-                                               s.append(p);
-                                               s.append( Text.subString(realmend, Text.size()-realmend) );
-
-                                               if (!Max || s.size()<=Max)  // thx to Fish FH for fix
-                                               {
-                                                       Text = s;
-                                                       s = p;
-                                                       CursorPos = realmbgn + s.size();
-                                               }
-                                       }
-                               }
-
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                               textChanged = true;
-                       }
-                       break;
-               case KEY_HOME:
-                       // move/highlight to start of text
-                       if (event.KeyInput.Shift)
-                       {
-                               newMarkEnd = CursorPos;
-                               newMarkBegin = 0;
-                               CursorPos = 0;
-                       }
-                       else
-                       {
-                               CursorPos = 0;
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                       }
-                       break;
-               case KEY_END:
-                       // move/highlight to end of text
-                       if (event.KeyInput.Shift)
-                       {
-                               newMarkBegin = CursorPos;
-                               newMarkEnd = Text.size();
-                               CursorPos = 0;
-                       }
-                       else
-                       {
-                               CursorPos = Text.size();
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                       }
-                       break;
-               default:
-                       return false;
-               }
-       }
-       // default keyboard handling
-       else
-       switch(event.KeyInput.Key)
-       {
-       case KEY_END:
-               {
-                       s32 p = Text.size();
-                       if (WordWrap || MultiLine)
-                       {
-                               p = getLineFromPos(CursorPos);
-                               p = BrokenTextPositions[p] + (s32)BrokenText[p].size();
-                               if (p > 0 && (Text[p-1] == L'\r' || Text[p-1] == L'\n' ))
-                                       p-=1;
-                       }
-
-                       if (event.KeyInput.Shift)
-                       {
-                               if (MarkBegin == MarkEnd)
-                                       newMarkBegin = CursorPos;
-
-                               newMarkEnd = p;
-                       }
-                       else
-                       {
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                       }
-                       CursorPos = p;
-                       BlinkStartTime = porting::getTimeMs();
-               }
-               break;
-       case KEY_HOME:
-               {
-
-                       s32 p = 0;
-                       if (WordWrap || MultiLine)
-                       {
-                               p = getLineFromPos(CursorPos);
-                               p = BrokenTextPositions[p];
-                       }
-
-                       if (event.KeyInput.Shift)
-                       {
-                               if (MarkBegin == MarkEnd)
-                                       newMarkBegin = CursorPos;
-                               newMarkEnd = p;
-                       }
-                       else
-                       {
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                       }
-                       CursorPos = p;
-                       BlinkStartTime = porting::getTimeMs();
-               }
-               break;
-       case KEY_RETURN:
-               if (MultiLine)
-               {
-                       inputChar(L'\n');
-                       return true;
-               }
-               else
-               {
-                   sendGuiEvent( EGET_EDITBOX_ENTER );
-               }
-               break;
-       case KEY_LEFT:
-
-               if (event.KeyInput.Shift)
-               {
-                       if (CursorPos > 0)
-                       {
-                               if (MarkBegin == MarkEnd)
-                                       newMarkBegin = CursorPos;
-
-                               newMarkEnd = CursorPos-1;
-                       }
-               }
-               else
-               {
-                       newMarkBegin = 0;
-                       newMarkEnd = 0;
-               }
-
-               if (CursorPos > 0) CursorPos--;
-               BlinkStartTime = porting::getTimeMs();
-               break;
-
-       case KEY_RIGHT:
-               if (event.KeyInput.Shift)
-               {
-                       if (Text.size() > (u32)CursorPos)
-                       {
-                               if (MarkBegin == MarkEnd)
-                                       newMarkBegin = CursorPos;
-
-                               newMarkEnd = CursorPos+1;
-                       }
-               }
-               else
-               {
-                       newMarkBegin = 0;
-                       newMarkEnd = 0;
-               }
-
-               if (Text.size() > (u32)CursorPos) CursorPos++;
-               BlinkStartTime = porting::getTimeMs();
-               break;
-       case KEY_UP:
-               if (MultiLine || (WordWrap && BrokenText.size() > 1) )
-               {
-                       s32 lineNo = getLineFromPos(CursorPos);
-                       s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd);
-                       if (lineNo > 0)
-                       {
-                               s32 cp = CursorPos - BrokenTextPositions[lineNo];
-                               if ((s32)BrokenText[lineNo-1].size() < cp)
-                                       CursorPos = BrokenTextPositions[lineNo-1] + (s32)BrokenText[lineNo-1].size()-1;
-                               else
-                                       CursorPos = BrokenTextPositions[lineNo-1] + cp;
-                       }
-
-                       if (event.KeyInput.Shift)
-                       {
-                               newMarkBegin = mb;
-                               newMarkEnd = CursorPos;
-                       }
-                       else
-                       {
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                       }
-
-               }
-               else
-               {
-                       return false;
-               }
-               break;
-       case KEY_DOWN:
-               if (MultiLine || (WordWrap && BrokenText.size() > 1) )
-               {
-                       s32 lineNo = getLineFromPos(CursorPos);
-                       s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd);
-                       if (lineNo < (s32)BrokenText.size()-1)
-                       {
-                               s32 cp = CursorPos - BrokenTextPositions[lineNo];
-                               if ((s32)BrokenText[lineNo+1].size() < cp)
-                                       CursorPos = BrokenTextPositions[lineNo+1] + BrokenText[lineNo+1].size()-1;
-                               else
-                                       CursorPos = BrokenTextPositions[lineNo+1] + cp;
-                       }
-
-                       if (event.KeyInput.Shift)
-                       {
-                               newMarkBegin = mb;
-                               newMarkEnd = CursorPos;
-                       }
-                       else
-                       {
-                               newMarkBegin = 0;
-                               newMarkEnd = 0;
-                       }
-
-               }
-               else
-               {
-                       return false;
-               }
-               break;
-
-       case KEY_BACK:
-               if ( !this->IsEnabled )
-                       break;
-
-               if (Text.size())
-               {
-                       core::stringw s;
-
-                       if (MarkBegin != MarkEnd)
-                       {
-                               // delete marked text
-                               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-                               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-
-                               s = Text.subString(0, realmbgn);
-                               s.append( Text.subString(realmend, Text.size()-realmend) );
-                               Text = s;
-
-                               CursorPos = realmbgn;
-                       }
-                       else
-                       {
-                               // delete text behind cursor
-                               if (CursorPos>0)
-                                       s = Text.subString(0, CursorPos-1);
-                               else
-                                       s = L"";
-                               s.append( Text.subString(CursorPos, Text.size()-CursorPos) );
-                               Text = s;
-                               --CursorPos;
-                       }
-
-                       if (CursorPos < 0)
-                               CursorPos = 0;
-                       BlinkStartTime = porting::getTimeMs();
-                       newMarkBegin = 0;
-                       newMarkEnd = 0;
-                       textChanged = true;
-               }
-               break;
-       case KEY_DELETE:
-               if ( !this->IsEnabled )
-                       break;
-
-               if (Text.size() != 0)
-               {
-                       core::stringw s;
-
-                       if (MarkBegin != MarkEnd)
-                       {
-                               // delete marked text
-                               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-                               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-
-                               s = Text.subString(0, realmbgn);
-                               s.append( Text.subString(realmend, Text.size()-realmend) );
-                               Text = s;
-
-                               CursorPos = realmbgn;
-                       }
-                       else
-                       {
-                               // delete text before cursor
-                               s = Text.subString(0, CursorPos);
-                               s.append( Text.subString(CursorPos+1, Text.size()-CursorPos-1) );
-                               Text = s;
-                       }
-
-                       if (CursorPos > (s32)Text.size())
-                               CursorPos = (s32)Text.size();
-
-                       BlinkStartTime = porting::getTimeMs();
-                       newMarkBegin = 0;
-                       newMarkEnd = 0;
-                       textChanged = true;
-               }
-               break;
-
-       case KEY_ESCAPE:
-       case KEY_TAB:
-       case KEY_SHIFT:
-       case KEY_F1:
-       case KEY_F2:
-       case KEY_F3:
-       case KEY_F4:
-       case KEY_F5:
-       case KEY_F6:
-       case KEY_F7:
-       case KEY_F8:
-       case KEY_F9:
-       case KEY_F10:
-       case KEY_F11:
-       case KEY_F12:
-       case KEY_F13:
-       case KEY_F14:
-       case KEY_F15:
-       case KEY_F16:
-       case KEY_F17:
-       case KEY_F18:
-       case KEY_F19:
-       case KEY_F20:
-       case KEY_F21:
-       case KEY_F22:
-       case KEY_F23:
-       case KEY_F24:
-               // ignore these keys
-               return false;
-
-       default:
-               inputChar(event.KeyInput.Char);
-               return true;
-       }
-
-    // Set new text markers
-    setTextMarkers( newMarkBegin, newMarkEnd );
-
-       // break the text if it has changed
-       if (textChanged)
-       {
-               breakText();
-               sendGuiEvent(EGET_EDITBOX_CHANGED);
-       }
-
-       calculateScrollPos();
-
-       return true;
-}
-
-
-//! draws the element and its children
-void intlGUIEditBox::draw()
-{
-       if (!IsVisible)
-               return;
-
-       const bool focus = Environment->hasFocus(this);
-
-       IGUISkin* skin = Environment->getSkin();
-       if (!skin)
-               return;
-
-       FrameRect = AbsoluteRect;
-
-       // draw the border
-
-       if (Border)
-       {
-               skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW),
-                       false, true, FrameRect, &AbsoluteClippingRect);
-
-               FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
-               FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
-               FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
-               FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
-       }
-       core::rect<s32> localClipRect = FrameRect;
-       localClipRect.clipAgainst(AbsoluteClippingRect);
-
-       // draw the text
-
-       IGUIFont* font = OverrideFont;
-       if (!OverrideFont)
-               font = skin->getFont();
-
-       s32 cursorLine = 0;
-       s32 charcursorpos = 0;
-
-       if (font)
-       {
-               if (LastBreakFont != font)
-               {
-                       breakText();
-               }
-
-               // calculate cursor pos
-
-               core::stringw *txtLine = &Text;
-               s32 startPos = 0;
-
-               core::stringw s, s2;
-
-               // get mark position
-               const bool ml = (!PasswordBox && (WordWrap || MultiLine));
-               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-               const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0;
-               const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1;
-               const s32 lineCount = ml ? BrokenText.size() : 1;
-
-               // Save the override color information.
-               // Then, alter it if the edit box is disabled.
-               const bool prevOver = OverrideColorEnabled;
-               const video::SColor prevColor = OverrideColor;
-
-               if (Text.size())
-               {
-                       if (!IsEnabled && !OverrideColorEnabled)
-                       {
-                               OverrideColorEnabled = true;
-                               OverrideColor = skin->getColor(EGDC_GRAY_TEXT);
-                       }
-
-                       for (s32 i=0; i < lineCount; ++i)
-                       {
-                               setTextRect(i);
-
-                               // clipping test - don't draw anything outside the visible area
-                               core::rect<s32> c = localClipRect;
-                               c.clipAgainst(CurrentTextRect);
-                               if (!c.isValid())
-                                       continue;
-
-                               // get current line
-                               if (PasswordBox)
-                               {
-                                       if (BrokenText.size() != 1)
-                                       {
-                                               BrokenText.clear();
-                                               BrokenText.push_back(core::stringw());
-                                       }
-                                       if (BrokenText[0].size() != Text.size())
-                                       {
-                                               BrokenText[0] = Text;
-                                               for (u32 q = 0; q < Text.size(); ++q)
-                                               {
-                                                       BrokenText[0] [q] = PasswordChar;
-                                               }
-                                       }
-                                       txtLine = &BrokenText[0];
-                                       startPos = 0;
-                               }
-                               else
-                               {
-                                       txtLine = ml ? &BrokenText[i] : &Text;
-                                       startPos = ml ? BrokenTextPositions[i] : 0;
-                               }
-
-
-                               // draw normal text
-                               font->draw(txtLine->c_str(), CurrentTextRect,
-                                       OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT),
-                                       false, true, &localClipRect);
-
-                               // draw mark and marked text
-                               if (focus && MarkBegin != MarkEnd && i >= hlineStart && i < hlineStart + hlineCount)
-                               {
-
-                                       s32 mbegin = 0, mend = 0;
-                                       s32 lineStartPos = 0, lineEndPos = txtLine->size();
-
-                                       if (i == hlineStart)
-                                       {
-                                               // highlight start is on this line
-                                               s = txtLine->subString(0, realmbgn - startPos);
-                                               mbegin = font->getDimension(s.c_str()).Width;
-
-                                               // deal with kerning
-                                               mbegin += font->getKerningWidth(
-                                                       &((*txtLine)[realmbgn - startPos]),
-                                                       realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0);
-
-                                               lineStartPos = realmbgn - startPos;
-                                       }
-                                       if (i == hlineStart + hlineCount - 1)
-                                       {
-                                               // highlight end is on this line
-                                               s2 = txtLine->subString(0, realmend - startPos);
-                                               mend = font->getDimension(s2.c_str()).Width;
-                                               lineEndPos = (s32)s2.size();
-                                       }
-                                       else
-                                               mend = font->getDimension(txtLine->c_str()).Width;
-
-                                       CurrentTextRect.UpperLeftCorner.X += mbegin;
-                                       CurrentTextRect.LowerRightCorner.X = CurrentTextRect.UpperLeftCorner.X + mend - mbegin;
-
-                                       // draw mark
-                                       skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), CurrentTextRect, &localClipRect);
-
-                                       // draw marked text
-                                       s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos);
-
-                                       if (s.size())
-                                               font->draw(s.c_str(), CurrentTextRect,
-                                                       OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
-                                                       false, true, &localClipRect);
-
-                               }
-                       }
-
-                       // Return the override color information to its previous settings.
-                       OverrideColorEnabled = prevOver;
-                       OverrideColor = prevColor;
-               }
-
-               // draw cursor
-
-               if (WordWrap || MultiLine)
-               {
-                       cursorLine = getLineFromPos(CursorPos);
-                       txtLine = &BrokenText[cursorLine];
-                       startPos = BrokenTextPositions[cursorLine];
-               }
-               s = txtLine->subString(0,CursorPos-startPos);
-               charcursorpos = font->getDimension(s.c_str()).Width +
-                       font->getKerningWidth(L"_", CursorPos-startPos > 0 ? &((*txtLine)[CursorPos-startPos-1]) : 0);
-
-               if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 < 350)
-               {
-                       setTextRect(cursorLine);
-                       CurrentTextRect.UpperLeftCorner.X += charcursorpos;
-
-                       font->draw(L"_", CurrentTextRect,
-                               OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT),
-                               false, true, &localClipRect);
-               }
-       }
-
-       // draw children
-       IGUIElement::draw();
-}
-
-
-//! Sets the new caption of this element.
-void intlGUIEditBox::setText(const wchar_t* text)
-{
-       Text = text;
-       if (u32(CursorPos) > Text.size())
-               CursorPos = Text.size();
-       HScrollPos = 0;
-       breakText();
-}
-
-
-//! Enables or disables automatic scrolling with cursor position
-//! \param enable: If set to true, the text will move around with the cursor position
-void intlGUIEditBox::setAutoScroll(bool enable)
-{
-       AutoScroll = enable;
-}
-
-
-//! Checks to see if automatic scrolling is enabled
-//! \return true if automatic scrolling is enabled, false if not
-bool intlGUIEditBox::isAutoScrollEnabled() const
-{
-       _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
-       return AutoScroll;
-}
-
-
-//! Gets the area of the text in the edit box
-//! \return Returns the size in pixels of the text
-core::dimension2du intlGUIEditBox::getTextDimension()
-{
-       core::rect<s32> ret;
-
-       setTextRect(0);
-       ret = CurrentTextRect;
-
-       for (u32 i=1; i < BrokenText.size(); ++i)
-       {
-               setTextRect(i);
-               ret.addInternalPoint(CurrentTextRect.UpperLeftCorner);
-               ret.addInternalPoint(CurrentTextRect.LowerRightCorner);
-       }
-
-       return core::dimension2du(ret.getSize());
-}
-
-
-//! Sets the maximum amount of characters which may be entered in the box.
-//! \param max: Maximum amount of characters. If 0, the character amount is
-//! infinity.
-void intlGUIEditBox::setMax(u32 max)
-{
-       Max = max;
-
-       if (Text.size() > Max && Max != 0)
-               Text = Text.subString(0, Max);
-}
-
-
-//! Returns maximum amount of characters, previously set by setMax();
-u32 intlGUIEditBox::getMax() const
-{
-       return Max;
-}
-
-
-bool intlGUIEditBox::processMouse(const SEvent& event)
-{
-       switch(event.MouseInput.Event)
-       {
-       case irr::EMIE_LMOUSE_LEFT_UP:
-               if (Environment->hasFocus(this))
-               {
-                       CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
-                       if (MouseMarking)
-                       {
-                           setTextMarkers( MarkBegin, CursorPos );
-                       }
-                       MouseMarking = false;
-                       calculateScrollPos();
-                       return true;
-               }
-               break;
-       case irr::EMIE_MOUSE_MOVED:
-               {
-                       if (MouseMarking)
-                       {
-                               CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
-                               setTextMarkers( MarkBegin, CursorPos );
-                               calculateScrollPos();
-                               return true;
-                       }
-               }
-               break;
-       case EMIE_LMOUSE_PRESSED_DOWN:
-               if (!Environment->hasFocus(this))
-               {
-                       BlinkStartTime = porting::getTimeMs();
-                       MouseMarking = true;
-                       CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
-                       setTextMarkers(CursorPos, CursorPos );
-                       calculateScrollPos();
-                       return true;
-               }
-               else
-               {
-                       if (!AbsoluteClippingRect.isPointInside(
-                               core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y)))
-                       {
-                               return false;
-                       }
-                       else
-                       {
-                               // move cursor
-                               CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y);
-
-                s32 newMarkBegin = MarkBegin;
-                               if (!MouseMarking)
-                                       newMarkBegin = CursorPos;
-
-                               MouseMarking = true;
-                               setTextMarkers( newMarkBegin, CursorPos);
-                               calculateScrollPos();
-                               return true;
-                       }
-               }
-       default:
-               break;
-       }
-
-       return false;
-}
-
-
-s32 intlGUIEditBox::getCursorPos(s32 x, s32 y)
-{
-       IGUIFont* font = OverrideFont;
-       IGUISkin* skin = Environment->getSkin();
-       if (!OverrideFont)
-               font = skin->getFont();
-
-       const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1;
-
-       core::stringw *txtLine=0;
-       s32 startPos=0;
-       x+=3;
-
-       for (u32 i=0; i < lineCount; ++i)
-       {
-               setTextRect(i);
-               if (i == 0 && y < CurrentTextRect.UpperLeftCorner.Y)
-                       y = CurrentTextRect.UpperLeftCorner.Y;
-               if (i == lineCount - 1 && y > CurrentTextRect.LowerRightCorner.Y )
-                       y = CurrentTextRect.LowerRightCorner.Y;
-
-               // is it inside this region?
-               if (y >= CurrentTextRect.UpperLeftCorner.Y && y <= CurrentTextRect.LowerRightCorner.Y)
-               {
-                       // we've found the clicked line
-                       txtLine = (WordWrap || MultiLine) ? &BrokenText[i] : &Text;
-                       startPos = (WordWrap || MultiLine) ? BrokenTextPositions[i] : 0;
-                       break;
-               }
-       }
-
-       if (x < CurrentTextRect.UpperLeftCorner.X)
-               x = CurrentTextRect.UpperLeftCorner.X;
-
-       s32 idx = font->getCharacterFromPos(Text.c_str(), x - CurrentTextRect.UpperLeftCorner.X);
-
-       // click was on or left of the line
-       if (idx != -1)
-               return idx + startPos;
-
-       // click was off the right edge of the line, go to end.
-       return txtLine->size() + startPos;
-}
-
-
-//! Breaks the single text line.
-void intlGUIEditBox::breakText()
-{
-       IGUISkin* skin = Environment->getSkin();
-
-       if ((!WordWrap && !MultiLine) || !skin)
-               return;
-
-       BrokenText.clear(); // need to reallocate :/
-       BrokenTextPositions.set_used(0);
-
-       IGUIFont* font = OverrideFont;
-       if (!OverrideFont)
-               font = skin->getFont();
-
-       if (!font)
-               return;
-
-       LastBreakFont = font;
-
-       core::stringw line;
-       core::stringw word;
-       core::stringw whitespace;
-       s32 lastLineStart = 0;
-       s32 size = Text.size();
-       s32 length = 0;
-       s32 elWidth = RelativeRect.getWidth() - 6;
-       wchar_t c;
-
-       for (s32 i=0; i<size; ++i)
-       {
-               c = Text[i];
-               bool lineBreak = false;
-
-               if (c == L'\r') // Mac or Windows breaks
-               {
-                       lineBreak = true;
-                       c = ' ';
-                       if (Text[i+1] == L'\n') // Windows breaks
-                       {
-                               Text.erase(i+1);
-                               --size;
-                       }
-               }
-               else if (c == L'\n') // Unix breaks
-               {
-                       lineBreak = true;
-                       c = ' ';
-               }
-
-               // don't break if we're not a multi-line edit box
-               if (!MultiLine)
-                       lineBreak = false;
-
-               if (c == L' ' || c == 0 || i == (size-1))
-               {
-                       if (word.size())
-                       {
-                               // here comes the next whitespace, look if
-                               // we can break the last word to the next line.
-                               s32 whitelgth = font->getDimension(whitespace.c_str()).Width;
-                               s32 worldlgth = font->getDimension(word.c_str()).Width;
-
-                               if (WordWrap && length + worldlgth + whitelgth > elWidth)
-                               {
-                                       // break to next line
-                                       length = worldlgth;
-                                       BrokenText.push_back(line);
-                                       BrokenTextPositions.push_back(lastLineStart);
-                                       lastLineStart = i - (s32)word.size();
-                                       line = word;
-                               }
-                               else
-                               {
-                                       // add word to line
-                                       line += whitespace;
-                                       line += word;
-                                       length += whitelgth + worldlgth;
-                               }
-
-                               word = L"";
-                               whitespace = L"";
-                       }
-
-                       whitespace += c;
-
-                       // compute line break
-                       if (lineBreak)
-                       {
-                               line += whitespace;
-                               line += word;
-                               BrokenText.push_back(line);
-                               BrokenTextPositions.push_back(lastLineStart);
-                               lastLineStart = i+1;
-                               line = L"";
-                               word = L"";
-                               whitespace = L"";
-                               length = 0;
-                       }
-               }
-               else
-               {
-                       // yippee this is a word..
-                       word += c;
-               }
-       }
-
-       line += whitespace;
-       line += word;
-       BrokenText.push_back(line);
-       BrokenTextPositions.push_back(lastLineStart);
-}
-
-
-void intlGUIEditBox::setTextRect(s32 line)
-{
-       core::dimension2du d;
-
-       IGUISkin* skin = Environment->getSkin();
-       if (!skin)
-               return;
-
-       IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont();
-
-       if (!font)
-               return;
-
-       // get text dimension
-       const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1;
-       if (WordWrap || MultiLine)
-       {
-               d = font->getDimension(BrokenText[line].c_str());
-       }
-       else
-       {
-               d = font->getDimension(Text.c_str());
-               d.Height = AbsoluteRect.getHeight();
-       }
-       d.Height += font->getKerningHeight();
-
-       // justification
-       switch (HAlign)
-       {
-       case EGUIA_CENTER:
-               // align to h centre
-               CurrentTextRect.UpperLeftCorner.X = (FrameRect.getWidth()/2) - (d.Width/2);
-               CurrentTextRect.LowerRightCorner.X = (FrameRect.getWidth()/2) + (d.Width/2);
-               break;
-       case EGUIA_LOWERRIGHT:
-               // align to right edge
-               CurrentTextRect.UpperLeftCorner.X = FrameRect.getWidth() - d.Width;
-               CurrentTextRect.LowerRightCorner.X = FrameRect.getWidth();
-               break;
-       default:
-               // align to left edge
-               CurrentTextRect.UpperLeftCorner.X = 0;
-               CurrentTextRect.LowerRightCorner.X = d.Width;
-
-       }
-
-       switch (VAlign)
-       {
-       case EGUIA_CENTER:
-               // align to v centre
-               CurrentTextRect.UpperLeftCorner.Y =
-                       (FrameRect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line;
-               break;
-       case EGUIA_LOWERRIGHT:
-               // align to bottom edge
-               CurrentTextRect.UpperLeftCorner.Y =
-                       FrameRect.getHeight() - lineCount*d.Height + d.Height*line;
-               break;
-       default:
-               // align to top edge
-               CurrentTextRect.UpperLeftCorner.Y = d.Height*line;
-               break;
-       }
-
-       CurrentTextRect.UpperLeftCorner.X  -= HScrollPos;
-       CurrentTextRect.LowerRightCorner.X -= HScrollPos;
-       CurrentTextRect.UpperLeftCorner.Y  -= VScrollPos;
-       CurrentTextRect.LowerRightCorner.Y = CurrentTextRect.UpperLeftCorner.Y + d.Height;
-
-       CurrentTextRect += FrameRect.UpperLeftCorner;
-
-}
-
-
-s32 intlGUIEditBox::getLineFromPos(s32 pos)
-{
-       if (!WordWrap && !MultiLine)
-               return 0;
-
-       s32 i=0;
-       while (i < (s32)BrokenTextPositions.size())
-       {
-               if (BrokenTextPositions[i] > pos)
-                       return i-1;
-               ++i;
-       }
-       return (s32)BrokenTextPositions.size() - 1;
-}
-
-
-void intlGUIEditBox::inputChar(wchar_t c)
-{
-       if (!IsEnabled)
-               return;
-
-       if (c != 0)
-       {
-               if (Text.size() < Max || Max == 0)
-               {
-                       core::stringw s;
-
-                       if (MarkBegin != MarkEnd)
-                       {
-                               // replace marked text
-                               const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
-                               const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
-
-                               s = Text.subString(0, realmbgn);
-                               s.append(c);
-                               s.append( Text.subString(realmend, Text.size()-realmend) );
-                               Text = s;
-                               CursorPos = realmbgn+1;
-                       }
-                       else
-                       {
-                               // add new character
-                               s = Text.subString(0, CursorPos);
-                               s.append(c);
-                               s.append( Text.subString(CursorPos, Text.size()-CursorPos) );
-                               Text = s;
-                               ++CursorPos;
-                       }
-
-                       BlinkStartTime = porting::getTimeMs();
-                       setTextMarkers(0, 0);
-               }
-       }
-       breakText();
-       sendGuiEvent(EGET_EDITBOX_CHANGED);
-       calculateScrollPos();
-}
-
-
-void intlGUIEditBox::calculateScrollPos()
-{
-       if (!AutoScroll)
-               return;
-
-       // calculate horizontal scroll position
-       s32 cursLine = getLineFromPos(CursorPos);
-       setTextRect(cursLine);
-
-       // don't do horizontal scrolling when wordwrap is enabled.
-       if (!WordWrap)
-       {
-               // get cursor position
-               IGUISkin* skin = Environment->getSkin();
-               if (!skin)
-                       return;
-               IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont();
-               if (!font)
-                       return;
-
-               core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text;
-               s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine] : CursorPos;
-
-               s32 cStart = CurrentTextRect.UpperLeftCorner.X + HScrollPos +
-                       font->getDimension(txtLine->subString(0, cPos).c_str()).Width;
-
-               s32 cEnd = cStart + font->getDimension(L"_ ").Width;
-
-               if (FrameRect.LowerRightCorner.X < cEnd)
-                       HScrollPos = cEnd - FrameRect.LowerRightCorner.X;
-               else if (FrameRect.UpperLeftCorner.X > cStart)
-                       HScrollPos = cStart - FrameRect.UpperLeftCorner.X;
-               else
-                       HScrollPos = 0;
-
-               // todo: adjust scrollbar
-       }
-
-       // vertical scroll position
-       if (FrameRect.LowerRightCorner.Y < CurrentTextRect.LowerRightCorner.Y + VScrollPos)
-               VScrollPos = CurrentTextRect.LowerRightCorner.Y - FrameRect.LowerRightCorner.Y + VScrollPos;
-
-       else if (FrameRect.UpperLeftCorner.Y > CurrentTextRect.UpperLeftCorner.Y + VScrollPos)
-               VScrollPos = CurrentTextRect.UpperLeftCorner.Y - FrameRect.UpperLeftCorner.Y + VScrollPos;
-       else
-               VScrollPos = 0;
-
-       // todo: adjust scrollbar
-}
-
-//! set text markers
-void intlGUIEditBox::setTextMarkers(s32 begin, s32 end)
-{
-    if ( begin != MarkBegin || end != MarkEnd )
-    {
-        MarkBegin = begin;
-        MarkEnd = end;
-        sendGuiEvent(EGET_EDITBOX_MARKING_CHANGED);
-    }
-}
-
-//! send some gui event to parent
-void intlGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type)
-{
-       if ( Parent )
-       {
-        SEvent e;
-        e.EventType = EET_GUI_EVENT;
-        e.GUIEvent.Caller = this;
-        e.GUIEvent.Element = 0;
-        e.GUIEvent.EventType = type;
-
-        Parent->OnEvent(e);
-       }
-}
-
-//! Writes attributes of the element.
-void intlGUIEditBox::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const
-{
-       // IGUIEditBox::serializeAttributes(out,options);
-
-       out->addBool  ("OverrideColorEnabled",OverrideColorEnabled );
-       out->addColor ("OverrideColor",       OverrideColor);
-       // out->addFont("OverrideFont",OverrideFont);
-       out->addInt   ("MaxChars",            Max);
-       out->addBool  ("WordWrap",            WordWrap);
-       out->addBool  ("MultiLine",           MultiLine);
-       out->addBool  ("AutoScroll",          AutoScroll);
-       out->addBool  ("PasswordBox",         PasswordBox);
-       core::stringw ch = L" ";
-       ch[0] = PasswordChar;
-       out->addString("PasswordChar",        ch.c_str());
-       out->addEnum  ("HTextAlign",          HAlign, GUIAlignmentNames);
-       out->addEnum  ("VTextAlign",          VAlign, GUIAlignmentNames);
-
-       IGUIEditBox::serializeAttributes(out,options);
-}
-
-
-//! Reads attributes of the element
-void intlGUIEditBox::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
-{
-       IGUIEditBox::deserializeAttributes(in,options);
-
-       setOverrideColor(in->getAttributeAsColor("OverrideColor"));
-       enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled"));
-       setMax(in->getAttributeAsInt("MaxChars"));
-       setWordWrap(in->getAttributeAsBool("WordWrap"));
-       setMultiLine(in->getAttributeAsBool("MultiLine"));
-       setAutoScroll(in->getAttributeAsBool("AutoScroll"));
-       core::stringw ch = in->getAttributeAsStringW("PasswordChar");
-
-       if (!ch.size())
-               setPasswordBox(in->getAttributeAsBool("PasswordBox"));
-       else
-               setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]);
-
-       setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames),
-                       (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames));
-
-       // setOverrideFont(in->getAttributeAsFont("OverrideFont"));
-}
-
-
-} // end namespace gui
-} // end namespace irr
-
-#endif // _IRR_COMPILE_WITH_GUI_
diff --git a/src/intlGUIEditBox.h b/src/intlGUIEditBox.h
deleted file mode 100644 (file)
index e3ee15a..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright (C) 2002-2013 Nikolaus Gebhardt
-// This file is part of the "Irrlicht Engine".
-// For conditions of distribution and use, see copyright notice in irrlicht.h
-
-#ifndef __C_INTL_GUI_EDIT_BOX_H_INCLUDED__
-#define __C_INTL_GUI_EDIT_BOX_H_INCLUDED__
-
-#include "IrrCompileConfig.h"
-//#ifdef _IRR_COMPILE_WITH_GUI_
-
-#include "IGUIEditBox.h"
-#include "irrArray.h"
-#include "IOSOperator.h"
-
-namespace irr
-{
-namespace gui
-{
-       class intlGUIEditBox : public IGUIEditBox
-       {
-       public:
-
-               //! constructor
-               intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment,
-                       IGUIElement* parent, s32 id, const core::rect<s32>& rectangle);
-
-               //! destructor
-               virtual ~intlGUIEditBox();
-
-               //! Sets another skin independent font.
-               virtual void setOverrideFont(IGUIFont* font=0);
-
-               //! Gets the override font (if any)
-               /** \return The override font (may be 0) */
-               virtual IGUIFont* getOverrideFont() const;
-
-               //! Get the font which is used right now for drawing
-               /** Currently this is the override font when one is set and the
-               font of the active skin otherwise */
-               virtual IGUIFont* getActiveFont() const;
-
-               //! Sets another color for the text.
-               virtual void setOverrideColor(video::SColor color);
-
-               //! Gets the override color
-               virtual video::SColor getOverrideColor() const;
-
-               //! Sets if the text should use the overide color or the
-               //! color in the gui skin.
-               virtual void enableOverrideColor(bool enable);
-
-               //! Checks if an override color is enabled
-               /** \return true if the override color is enabled, false otherwise */
-               virtual bool isOverrideColorEnabled(void) const;
-
-               //! Sets whether to draw the background
-               virtual void setDrawBackground(bool draw);
-
-               //! Turns the border on or off
-               virtual void setDrawBorder(bool border);
-
-               //! Enables or disables word wrap for using the edit box as multiline text editor.
-               virtual void setWordWrap(bool enable);
-
-               //! Checks if word wrap is enabled
-               //! \return true if word wrap is enabled, false otherwise
-               virtual bool isWordWrapEnabled() const;
-
-               //! Enables or disables newlines.
-               /** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
-               instead a newline character will be inserted. */
-               virtual void setMultiLine(bool enable);
-
-               //! Checks if multi line editing is enabled
-               //! \return true if mult-line is enabled, false otherwise
-               virtual bool isMultiLineEnabled() const;
-
-               //! Enables or disables automatic scrolling with cursor position
-               //! \param enable: If set to true, the text will move around with the cursor position
-               virtual void setAutoScroll(bool enable);
-
-               //! Checks to see if automatic scrolling is enabled
-               //! \return true if automatic scrolling is enabled, false if not
-               virtual bool isAutoScrollEnabled() const;
-
-               //! Gets the size area of the text in the edit box
-               //! \return Returns the size in pixels of the text
-               virtual core::dimension2du getTextDimension();
-
-               //! Sets text justification
-               virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical);
-
-               //! called if an event happened.
-               virtual bool OnEvent(const SEvent& event);
-
-               //! draws the element and its children
-               virtual void draw();
-
-               //! Sets the new caption of this element.
-               virtual void setText(const wchar_t* text);
-
-               //! Sets the maximum amount of characters which may be entered in the box.
-               //! \param max: Maximum amount of characters. If 0, the character amount is
-               //! infinity.
-               virtual void setMax(u32 max);
-
-               //! Returns maximum amount of characters, previously set by setMax();
-               virtual u32 getMax() const;
-
-               //! Sets whether the edit box is a password box. Setting this to true will
-               /** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
-               \param passwordBox: true to enable password, false to disable
-               \param passwordChar: the character that is displayed instead of letters */
-               virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*');
-
-               //! Returns true if the edit box is currently a password box.
-               virtual bool isPasswordBox() const;
-
-               //! Updates the absolute position, splits text if required
-               virtual void updateAbsolutePosition();
-
-               //! Writes attributes of the element.
-               virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const;
-
-               //! Reads attributes of the element
-               virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options);
-
-       protected:
-               //! Breaks the single text line.
-               void breakText();
-               //! sets the area of the given line
-               void setTextRect(s32 line);
-               //! returns the line number that the cursor is on
-               s32 getLineFromPos(s32 pos);
-               //! adds a letter to the edit box
-               void inputChar(wchar_t c);
-               //! calculates the current scroll position
-               void calculateScrollPos();
-               //! send some gui event to parent
-               void sendGuiEvent(EGUI_EVENT_TYPE type);
-               //! set text markers
-               void setTextMarkers(s32 begin, s32 end);
-
-               bool processKey(const SEvent& event);
-               bool processMouse(const SEvent& event);
-               s32 getCursorPos(s32 x, s32 y);
-
-               bool MouseMarking;
-               bool Border;
-               bool OverrideColorEnabled;
-               s32 MarkBegin;
-               s32 MarkEnd;
-
-               video::SColor OverrideColor;
-               gui::IGUIFont *OverrideFont, *LastBreakFont;
-               IOSOperator* Operator;
-
-               u32 BlinkStartTime;
-               s32 CursorPos;
-               s32 HScrollPos, VScrollPos; // scroll position in characters
-               u32 Max;
-
-               bool WordWrap, MultiLine, AutoScroll, PasswordBox;
-               wchar_t PasswordChar;
-               EGUI_ALIGNMENT HAlign, VAlign;
-
-               core::array< core::stringw > BrokenText;
-               core::array< s32 > BrokenTextPositions;
-
-               core::rect<s32> CurrentTextRect, FrameRect; // temporary values
-       };
-
-
-} // end namespace gui
-} // end namespace irr
-
-//#endif // _IRR_COMPILE_WITH_GUI_
-#endif // __C_GUI_EDIT_BOX_H_INCLUDED__