226 size_t cursorPosition =
mClientText->getCursorPosition(lastPressed);
231 UString::utf32string::reverse_iterator iterBack = text.rend() - cursorPosition;
232 UString::utf32string::iterator iterForw = text.begin() + cursorPosition;
234 while (iterBack != text.rend())
236 if (((*iterBack) < 256) && (ispunct(*iterBack) || isspace(*iterBack)))
241 while (iterForw != text.end())
243 if (((*iterForw) < 256) && (ispunct(*iterForw) || isspace(*iterForw)))
304 return c ==
' ' || c ==
'\t';
309#if MYGUI_PLATFORM == MYGUI_PLATFORM_LINUX || MYGUI_PLATFORM == MYGUI_PLATFORM_WIN32
342#elif MYGUI_PLATFORM == MYGUI_PLATFORM_APPLE
528 const UString& text = getRealString();
564 const UString& text = getRealString();
796 void EditBox::frameEntered(
float _frame)
826 mouse.
left -= view.left;
827 mouse.top -= view.top;
970 void EditBox::resetSelect()
980 void EditBox::commandPosition(
size_t _undo,
size_t _redo,
size_t _length,
VectorChangeInfo* _info)
982 if (_info !=
nullptr)
983 _info->push_back(TextCommandInfo(_undo, _redo, _length));
986 void EditBox::commandMerge()
995 for (
const auto& iter : info)
1001 bool EditBox::commandUndo()
1017 for (VectorChangeInfo::const_reverse_iterator iter = info.rbegin(); iter != info.rend(); ++iter)
1019 const auto& change = *iter;
1020 switch (change.type)
1031 setRealString(UString(text));
1043 bool EditBox::commandRedo()
1060 for (
const auto& change : info)
1062 switch (change.type)
1073 setRealString(UString(text));
1087 if (_info ==
nullptr)
1108 size_t end = _start + _count;
1119 bool need_colour =
true;
1145 else if (pos == end)
1156 void EditBox::_setTextColour(
size_t _start,
size_t _count,
const Colour& _colour,
bool _history)
1164 size_t end = _start + _count;
1175 while (iterator.moveNext())
1178 size_t pos = iterator.getPosition();
1181 iterator.getTagColour(colour);
1189 iterator.setTagColour(_colour);
1193 iterator.clearTagColour();
1196 else if (pos == end)
1198 iterator.setTagColour(colour);
1205 commandPosition(_start, _start + _count,
mTextLength, history);
1210 saveInHistory(history);
1215 commandResetHistory();
1218 setRealString(iterator.getText());
1221 void EditBox::setTextSelectColour(
const Colour& _colour,
bool _history)
1229 _setTextColour(start, end - start, _colour, _history);
1266 commandResetHistory();
1269 void EditBox::setText(
const UString& _caption,
bool _history)
1306 saveInHistory(history);
1311 commandResetHistory();
1314 setRealString(iterator.getText());
1340 TextIterator iterator(getRealString(), history);
1348 bool need_colour = ((_text.size() > 6) && (_text[0] == L
'#') && (_text[1] != L
'#'));
1351 while (iterator.moveNext())
1354 size_t pos = iterator.getPosition();
1358 iterator.getTagColour(colour);
1367 iterator.setTagColour(colour);
1389 commandPosition(_start, _start +
mTextLength - old, old, history);
1394 saveInHistory(history);
1399 commandResetHistory();
1402 setRealString(iterator.getText());
1425 TextIterator iterator(getRealString(), history);
1430 size_t end = _start + _count;
1431 bool need_colour =
false;
1434 while (iterator.moveNext())
1437 size_t pos = iterator.getPosition();
1443 iterator.getTagColour(colour);
1451 if (!colour.empty())
1457 iterator.getTagColour(colour);
1458 iterator.saveStartPoint();
1465 iterator.getTagColour(colour);
1469 else if (pos == end)
1472 if (!colour.empty())
1474 if (iterator.getTagColour(colour))
1475 need_colour =
false;
1482 iterator.eraseFromStart();
1485 iterator.setTagColour(colour);
1488 commandPosition(_start + _count, _start,
mTextLength, history);
1497 saveInHistory(history);
1502 commandResetHistory();
1505 setRealString(iterator.getText());
1513 void EditBox::commandCut()
1523 void EditBox::commandCopy()
const
1531 void EditBox::commandPaste()
1549 const UString& EditBox::getRealString()
const
1559 void EditBox::setRealString(
const UString& _caption)
1584 void EditBox::updateEditState()
1640 setText(_value,
false);
1645 return getRealString();
1648 void EditBox::updateSelectText()
1719 point.
top = _position;
1725 point.
left = _position;
1738 int offset = point.
top;
1744 offset = std::clamp(offset, 0,
int(
mVRange));
1746 if (offset != point.
top)
1750 mVScroll->setScrollPosition(offset);
1757 int offset = point.
left;
1763 offset = std::clamp(offset, 0,
int(
mHRange));
1765 if (offset != point.
left)
1767 point.
left = offset;
1769 mHScroll->setScrollPosition(offset);
1818 updateCursorPosition();
1822 void EditBox::updateCursorPosition()
1843 if (!view.
inside(cursor))
1873 else if (cursor.
top < view.
top)
1875 delta = -(view.
top - cursor.
top);
1881 offset.
top = point.
top + delta;
1885 if (offset != point)
1896 void EditBox::setContentPosition(
const IntPoint& _point)
1946 _setTextColour(_start, _count, _colour,
false);
1971 setTextSelectColour(_colour,
false);
2008 commandResetHistory();
2017 setText(getRealString(),
false);
2025 commandResetHistory();
2044 if (!_value.
empty())