diff engine/core/gui/widgets/utf8textfield.cpp @ 228:756b895e1dab

Merged unicode-support back into trunk. Now all GUI/visible strings should be unicode. Internal strings unchanged. Remember to use a font that actually has the desired codepoints. Current default unicode policiy is 'ignore'.
author phoku@33b003aa-7bff-0310-803a-e67f0ece8222
date Sat, 21 Mar 2009 10:38:11 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/engine/core/gui/widgets/utf8textfield.cpp	Sat Mar 21 10:38:11 2009 +0000
@@ -0,0 +1,102 @@
+/***************************************************************************
+ *   Copyright (C) 2009 by the FIFE team                                   *
+ *   http://www.fifengine.de                                               *
+ *   This file is part of FIFE.                                            *
+ *                                                                         *
+ *   FIFE 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 library 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 library; if not, write to the                 *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
+ ***************************************************************************/
+
+// Standard C++ library includes
+#include <cassert>
+
+// 3rd party library includes
+
+// FIFE includes
+// These includes are split up in two parts, separated by one empty line
+// First block: files included from the FIFE root src directory
+// Second block: files included from the same folder
+#include "utf8textfield.h"
+
+namespace gcn {
+
+	UTF8TextField::UTF8TextField(const std::string & text)
+		: TextField(text)
+	{
+		mStringEditor = new UTF8StringEditor();
+	}
+
+	UTF8TextField::~UTF8TextField()
+	{
+		delete mStringEditor;
+	}
+
+	void UTF8TextField::keyPressed(KeyEvent & keyEvent)
+	{
+		Key key = keyEvent.getKey();
+
+		if (key.getValue() == Key::LEFT && mCaretPosition > 0)
+		{
+			mCaretPosition = mStringEditor->prevChar(mText, mCaretPosition);
+		}
+		else if (key.getValue() == Key::RIGHT && mCaretPosition < mText.size())
+		{
+			mCaretPosition = mStringEditor->nextChar(mText, mCaretPosition);
+		}
+		else if (key.getValue() == Key::DELETE && mCaretPosition < mText.size())
+		{
+			mCaretPosition = mStringEditor->eraseChar(mText, mCaretPosition);
+		}
+		else if (key.getValue() == Key::BACKSPACE && mCaretPosition > 0)
+		{
+			mCaretPosition = mStringEditor->prevChar(mText, mCaretPosition);
+			mCaretPosition = mStringEditor->eraseChar(mText, mCaretPosition);
+		}
+		else if (key.getValue() == Key::ENTER)
+		{
+			distributeActionEvent();
+		}
+		else if (key.getValue() == Key::HOME)
+		{
+			mCaretPosition = 0;
+		}
+
+		else if (key.getValue() == Key::END)
+		{
+			mCaretPosition = mText.size();
+		}
+
+		// Add character to text, if key is realy a ASCII character
+		// or is greater than 8bits long and the character is not
+		// the tab key.
+		else if ((key.isCharacter() || key.getValue() > 255)
+			&& key.getValue() != Key::TAB)
+		{
+			mCaretPosition = mStringEditor->insertChar(mText, mCaretPosition, key.getValue());
+		}
+
+		if (key.getValue() != Key::TAB)
+		{
+			// consume all characters except TAB which is needed
+			// for traversing through widgets in a container.
+			keyEvent.consume();
+		}
+
+		fixScroll();
+	}
+
+};
+
+