Commit 0080301c authored by Drake Arconis's avatar Drake Arconis
Browse files

Merge Lirusaito/alchemy-dire

parents 4f9b0c4e a00c530b
......@@ -929,6 +929,32 @@ void LLLineEditor::removeChar()
}
}
// Remove a word (set of characters up to next space/punctuation) from the text
void LLLineEditor::removeWord(bool prev)
{
const U32 pos(getCursor());
if (prev ? pos > 0 : static_cast<S32>(pos) < getLength())
{
U32 new_pos(prev ? prevWordPos(pos) : nextWordPos(pos));
if (new_pos == pos) // Other character we don't jump over
new_pos = prev ? prevWordPos(new_pos-1) : nextWordPos(new_pos+1);
const U32 diff(labs(pos - new_pos));
if (prev)
{
mText.erase(new_pos, diff);
setCursor(new_pos);
}
else
{
mText.erase(pos, diff);
}
}
else
{
LLUI::reportBadKeystroke();
}
}
void LLLineEditor::addChar(const llwchar uni_char)
{
......@@ -1356,7 +1382,10 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
else
if( 0 < getCursor() )
{
removeChar();
if (mask == MASK_CONTROL)
removeWord(true);
else
removeChar();
}
else
{
......@@ -1366,6 +1395,14 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
handled = TRUE;
break;
case KEY_DELETE:
if (!mReadOnly && mask == MASK_CONTROL)
{
removeWord(false);
handled = true;
}
break;
case KEY_PAGE_UP:
case KEY_HOME:
if (!mIgnoreArrowKeys)
......
......@@ -279,6 +279,7 @@ private:
void pasteHelper(bool is_primary);
void removeChar();
void removeWord(bool prev);
void addChar(const llwchar c);
void setCursorAtLocalPos(S32 local_mouse_x);
S32 findPixelNearestPos(S32 cursor_offset = 0) const;
......
......@@ -1090,6 +1090,33 @@ void LLTextEditor::removeChar()
}
}
// Remove a word (set of characters up to next space/punctuation) from the text
void LLTextEditor::removeWord(bool prev)
{
const U32 pos(mCursorPos);
if (prev ? pos > 0 : static_cast<S32>(pos) < getLength())
{
U32 new_pos(prev ? prevWordPos(pos) : nextWordPos(pos));
if (new_pos == pos) // Other character we don't jump over
new_pos = prev ? prevWordPos(new_pos-1) : nextWordPos(new_pos+1);
const U32 diff(labs(pos - new_pos));
if (prev)
{
remove(new_pos, diff, false);
setCursorPos(new_pos);
}
else
{
remove(pos, diff, false);
}
}
else
{
LLUI::reportBadKeystroke();
}
}
// Add a single character to the text
S32 LLTextEditor::addChar(S32 pos, llwchar wc)
{
......@@ -1676,7 +1703,10 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
else
if( 0 < mCursorPos )
{
removeCharOrTab();
if (mask == MASK_CONTROL)
removeWord(true);
else
removeCharOrTab();
}
else
{
......@@ -1684,6 +1714,16 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
}
break;
case KEY_DELETE:
if (getEnabled() && mask == MASK_CONTROL)
{
removeWord(false);
}
else
{
handled = false;
}
break;
case KEY_RETURN:
if (mask == MASK_NONE)
......
......@@ -246,6 +246,7 @@ protected:
S32 overwriteChar(S32 pos, llwchar wc);
void removeChar();
S32 removeChar(S32 pos);
void removeWord(bool prev);
S32 insert(S32 pos, const LLWString &wstr, bool group_with_next_op, LLTextSegmentPtr segment);
S32 remove(S32 pos, S32 length, bool group_with_next_op);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment