EVT_MIDDLE_DOWN(wxRichTextCtrl::OnMiddleClick)
EVT_LEFT_DCLICK(wxRichTextCtrl::OnLeftDClick)
EVT_CHAR(wxRichTextCtrl::OnChar)
+ EVT_KEY_DOWN(wxRichTextCtrl::OnChar)
EVT_SIZE(wxRichTextCtrl::OnSize)
EVT_SET_FOCUS(wxRichTextCtrl::OnSetFocus)
EVT_KILL_FOCUS(wxRichTextCtrl::OnKillFocus)
LayoutContent();
else
SetupScrollbars();
- Refresh(false);
+
+ wxWindow::DoThaw();
}
/// Clear all text
if (event.AltDown())
flags |= wxRICHTEXT_ALT_DOWN;
+ if (event.GetEventType() == wxEVT_KEY_DOWN)
+ {
+ // Must process this before translation, otherwise it's translated into a WXK_DELETE event.
+ if (event.CmdDown() && event.GetKeyCode() == WXK_BACK)
+ {
+ BeginBatchUndo(_("Delete Text"));
+
+ long newPos = m_caretPosition;
+
+ DeleteSelectedContent(& newPos);
+
+ // Submit range in character positions, which are greater than caret positions,
+ // so subtract 1 for deleted character and add 1 for conversion to character position.
+ if (newPos > -1)
+ {
+ bool processed = false;
+ if (event.CmdDown())
+ {
+ long pos = wxRichTextCtrl::FindNextWordPosition(-1);
+ if (pos != -1 && (pos < newPos))
+ {
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(pos+1, newPos), this);
+ processed = true;
+ }
+ }
+
+ if (!processed)
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(newPos, newPos), this);
+ }
+
+ EndBatchUndo();
+
+ if (GetLastPosition() == -1)
+ {
+ GetBuffer().Reset();
+
+ m_caretPosition = -1;
+ PositionCaret();
+ SetDefaultStyleToCursorStyle();
+ }
+
+ ScrollIntoView(m_caretPosition, WXK_LEFT);
+
+ wxRichTextEvent cmdEvent(
+ wxEVT_COMMAND_RICHTEXT_DELETE,
+ GetId());
+ cmdEvent.SetEventObject(this);
+ cmdEvent.SetFlags(flags);
+ cmdEvent.SetPosition(m_caretPosition+1);
+ GetEventHandler()->ProcessEvent(cmdEvent);
+
+ Update();
+ }
+ else
+ event.Skip();
+
+ return;
+ }
+
if (event.GetKeyCode() == WXK_LEFT ||
event.GetKeyCode() == WXK_RIGHT ||
event.GetKeyCode() == WXK_UP ||
{
BeginBatchUndo(_("Delete Text"));
+ long newPos = m_caretPosition;
+
+ DeleteSelectedContent(& newPos);
+
// Submit range in character positions, which are greater than caret positions,
// so subtract 1 for deleted character and add 1 for conversion to character position.
- if (m_caretPosition > -1 && !HasSelection())
+ if (newPos > -1)
{
bool processed = false;
if (event.CmdDown())
{
long pos = wxRichTextCtrl::FindNextWordPosition(-1);
- if (pos != -1 && (pos < m_caretPosition))
+ if (pos != -1 && (pos < newPos))
{
- GetBuffer().DeleteRangeWithUndo(wxRichTextRange(pos+1, m_caretPosition), this);
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(pos+1, newPos), this);
processed = true;
}
}
if (!processed)
- GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition, m_caretPosition), this);
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(newPos, newPos), this);
}
- else
- DeleteSelectedContent();
EndBatchUndo();
{
BeginBatchUndo(_("Delete Text"));
+ long newPos = m_caretPosition;
+
+ DeleteSelectedContent(& newPos);
+
// Submit range in character positions, which are greater than caret positions,
- if (m_caretPosition < GetBuffer().GetRange().GetEnd()+1 && !HasSelection())
+ if (newPos < GetBuffer().GetRange().GetEnd()+1)
{
- GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition+1, m_caretPosition+1), this);
+ bool processed = false;
+ if (event.CmdDown())
+ {
+ long pos = wxRichTextCtrl::FindNextWordPosition(1);
+ if (pos != -1 && (pos > newPos))
+ {
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(newPos+1, pos), this);
+ processed = true;
+ }
+ }
+
+ if (!processed)
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(newPos+1, newPos+1), this);
}
- else
- DeleteSelectedContent();
EndBatchUndo();
{
if (flags & wxRICHTEXT_SHIFT_DOWN)
{
+ if (oldPos == newPos)
+ return false;
+
wxRichTextRange oldSelection = m_selectionRange;
// If not currently selecting, start selecting
// the end.
if (newPos > m_selectionAnchor)
m_selectionRange.SetRange(m_selectionAnchor+1, newPos);
+ else if (newPos == m_selectionAnchor)
+ m_selectionRange = wxRichTextRange(-2, -2);
else
m_selectionRange.SetRange(newPos+1, m_selectionAnchor);
}