00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <cassert>
00024
00025
00026
00027
00028
00029
00030
00031 #include "utf8textfield.h"
00032
00033 namespace gcn {
00034
00035 UTF8TextField::UTF8TextField(const std::string & text)
00036 : TextField(text)
00037 {
00038 mStringEditor = new UTF8StringEditor();
00039 }
00040
00041 UTF8TextField::~UTF8TextField()
00042 {
00043 delete mStringEditor;
00044 }
00045
00046 void UTF8TextField::keyPressed(KeyEvent & keyEvent)
00047 {
00048 Key key = keyEvent.getKey();
00049
00050 if (key.getValue() == Key::LEFT && mCaretPosition > 0)
00051 {
00052 mCaretPosition = mStringEditor->prevChar(mText, mCaretPosition);
00053 }
00054 else if (key.getValue() == Key::RIGHT && mCaretPosition < mText.size())
00055 {
00056 mCaretPosition = mStringEditor->nextChar(mText, mCaretPosition);
00057 }
00058 else if (key.getValue() == Key::DELETE && mCaretPosition < mText.size())
00059 {
00060 mCaretPosition = mStringEditor->eraseChar(mText, mCaretPosition);
00061 }
00062 else if (key.getValue() == Key::BACKSPACE && mCaretPosition > 0)
00063 {
00064 mCaretPosition = mStringEditor->prevChar(mText, mCaretPosition);
00065 mCaretPosition = mStringEditor->eraseChar(mText, mCaretPosition);
00066 }
00067 else if (key.getValue() == Key::ENTER)
00068 {
00069 distributeActionEvent();
00070 }
00071 else if (key.getValue() == Key::HOME)
00072 {
00073 mCaretPosition = 0;
00074 }
00075
00076 else if (key.getValue() == Key::END)
00077 {
00078 mCaretPosition = mText.size();
00079 }
00080
00081
00082
00083
00084 else if ((key.isCharacter() || key.getValue() > 255)
00085 && key.getValue() != Key::TAB)
00086 {
00087 mCaretPosition = mStringEditor->insertChar(mText, mCaretPosition, key.getValue());
00088 }
00089
00090 if (key.getValue() != Key::TAB)
00091 {
00092
00093
00094 keyEvent.consume();
00095 }
00096
00097 fixScroll();
00098 }
00099
00100 };
00101
00102