31 #include "util/utf8/utf8.h"
33 #include "utf8textbox.h"
49 Key key = keyEvent.getKey();
51 if (key.getValue() == Key::LEFT)
53 if (mCaretColumn == 0)
58 mCaretColumn = mTextRows[mCaretRow].size();
66 else if (key.getValue() == Key::RIGHT)
68 if (mCaretColumn < mTextRows[mCaretRow].size())
74 if (mCaretRow < mTextRows.size() - 1)
81 else if (key.getValue() == Key::DOWN)
86 else if (key.getValue() == Key::UP)
91 else if (key.getValue() == Key::HOME)
96 else if (key.getValue() == Key::END)
98 mCaretColumn = mTextRows[mCaretRow].size();
101 else if (key.getValue() == Key::ENTER && mEditable)
103 mTextRows.insert(mTextRows.begin() + mCaretRow + 1,
104 mTextRows[mCaretRow].substr(mCaretColumn, mTextRows[mCaretRow].size() - mCaretColumn));
105 mTextRows[mCaretRow].resize(mCaretColumn);
110 else if (key.getValue() == Key::BACKSPACE
118 else if (key.getValue() == Key::BACKSPACE
123 mCaretColumn = mTextRows[mCaretRow - 1].size();
124 mTextRows[mCaretRow - 1] += mTextRows[mCaretRow];
125 mTextRows.erase(mTextRows.begin() + mCaretRow);
129 else if (key.getValue() == Key::DELETE
130 && mCaretColumn < (int)mTextRows[mCaretRow].size()
136 else if (key.getValue() == Key::DELETE
137 && mCaretColumn == (int)mTextRows[mCaretRow].size()
138 && mCaretRow < ((int)mTextRows.size() - 1)
141 mTextRows[mCaretRow] += mTextRows[mCaretRow + 1];
142 mTextRows.erase(mTextRows.begin() + mCaretRow + 1);
145 else if(key.getValue() == Key::PAGE_UP)
147 Widget* par = getParent();
151 int rowsPerPage = par->getChildrenArea().height / getFont()->getHeight();
153 mCaretRow -= rowsPerPage;
163 else if(key.getValue() == Key::PAGE_DOWN)
165 Widget* par = getParent();
169 int rowsPerPage = par->getChildrenArea().height / getFont()->getHeight();
171 mCaretRow += rowsPerPage;
173 if (mCaretRow >= (
int)mTextRows.size())
175 mCaretRow = mTextRows.size() - 1;
182 else if(key.getValue() == Key::TAB
186 mTextRows[mCaretRow].insert(mCaretColumn,std::string(
" "));
190 else if ((key.isCharacter() || key.getValue() > 255)
198 assert( utf8::is_valid(mTextRows[mCaretRow].begin(),mTextRows[mCaretRow].end()) );
199 assert( utf8::is_valid(mTextRows[mCaretRow].begin(),mTextRows[mCaretRow].begin() + mCaretColumn) );
215 }
else if (row >= mTextRows.size()) {
216 row = mTextRows.size() - 1;