wxPoint logicalPt = event.GetLogicalPosition(dc);
int hit = GetBuffer().HitTest(dc, logicalPt, position);
- if (hit != wxRICHTEXT_HITTEST_NONE)
+ if ((hit != wxRICHTEXT_HITTEST_NONE) && !(hit & wxRICHTEXT_HITTEST_OUTSIDE))
{
wxRichTextEvent cmdEvent(
wxEVT_COMMAND_RICHTEXT_LEFT_CLICK,
// so subtract 1 for deleted character and add 1 for conversion to character position.
if (m_caretPosition > -1 && !HasSelection())
{
- GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition, m_caretPosition), this);
+ bool processed = false;
+ if (event.CmdDown())
+ {
+ long pos = wxRichTextCtrl::FindNextWordPosition(-1);
+ if (pos != -1 && (pos < m_caretPosition))
+ {
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(pos+1, m_caretPosition), this);
+ processed = true;
+ }
+ }
+
+ if (!processed)
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition, m_caretPosition), this);
}
else
DeleteSelectedContent();
/// Add a new paragraph of text to the end of the buffer
wxRichTextRange wxRichTextCtrl::AddParagraph(const wxString& text)
{
- return GetBuffer().AddParagraph(text);
+ wxRichTextRange range = GetBuffer().AddParagraph(text);
+ LayoutContent();
+ return range;
}
/// Add an image
wxRichTextRange wxRichTextCtrl::AddImage(const wxImage& image)
{
- return GetBuffer().AddImage(image);
+ wxRichTextRange range = GetBuffer().AddImage(image);
+ LayoutContent();
+ return range;
}
// ----------------------------------------------------------------------------
void wxRichTextCtrl::SelectNone()
{
if (!(GetSelectionRange() == wxRichTextRange(-2, -2)))
- SetSelection(-2, -2);
+ {
+ Refresh(false);
+ m_selectionRange = wxRichTextRange(-2, -2);
+ }
m_selectionAnchor = -2;
}
if (!para)
return false;
+ if (position == para->GetRange().GetEnd())
+ position --;
+
long positionStart = position;
long positionEnd = position;
if (positionEnd >= para->GetRange().GetEnd())
positionEnd = para->GetRange().GetEnd();
+ if (positionEnd < positionStart)
+ return false;
+
SetSelection(positionStart, positionEnd+1);
if (positionStart >= 0)
void wxRichTextCtrl::DoSetValue(const wxString& value, int flags)
{
- Clear();
+ // Don't call Clear here, since it always sends a text updated event
+ m_buffer.ResetAndClearCommands();
+ m_buffer.SetDirty(true);
+ m_caretPosition = -1;
+ m_caretPositionForDefaultStyle = -2;
+ m_caretAtLineStart = false;
+ m_selectionRange.SetRange(-2, -2);
+
+ Scroll(0,0);
+
+ if (!IsFrozen())
+ {
+ LayoutContent();
+ Refresh(false);
+ }
if (!value.IsEmpty())
{
// Remove empty paragraph
GetBuffer().Clear();
- DoWriteText(value);
+ DoWriteText(value, flags);
// for compatibility, don't move the cursor when doing SetValue()
SetInsertionPoint(0);
}
DoSetSelection(from, to);
+ SetDefaultStyleToCursorStyle();
}
void wxRichTextCtrl::DoSetSelection(long from, long to, bool WXUNUSED(scrollCaret))
{
- m_selectionAnchor = from;
- m_selectionRange.SetRange(from, to-1);
- if (from > -2)
- m_caretPosition = from-1;
+ if (from == to)
+ {
+ SelectNone();
+ }
+ else
+ {
+ m_selectionAnchor = from;
+ m_selectionRange.SetRange(from, to-1);
+ if (from > -2)
+ m_caretPosition = from-1;
- Refresh(false);
- PositionCaret();
+ Refresh(false);
+ PositionCaret();
+ }
}
// ----------------------------------------------------------------------------
{
SelectNone();
- GetBuffer().DeleteRangeWithUndo(wxRichTextRange(from, to), this);
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(from, to-1), this);
LayoutContent();
if (!IsFrozen())
if (HasSelection())
return SetStyleEx(GetSelectionRange(), attr, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY);
else
- SetAndShowDefaultStyle(attr);
+ {
+ wxRichTextAttr current = GetDefaultStyleEx();
+ current.Apply(attr);
+ SetAndShowDefaultStyle(current);
+ }
return true;
}
if (HasSelection())
return SetStyleEx(GetSelectionRange(), attr, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY);
else
- SetAndShowDefaultStyle(attr);
+ {
+ wxRichTextAttr current = GetDefaultStyleEx();
+ current.Apply(attr);
+ SetAndShowDefaultStyle(current);
+ }
return true;
}
if (HasSelection())
return SetStyleEx(GetSelectionRange(), attr, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY);
else
- SetAndShowDefaultStyle(attr);
+ {
+ wxRichTextAttr current = GetDefaultStyleEx();
+ current.Apply(attr);
+ SetAndShowDefaultStyle(current);
+ }
return true;
}
return SetStyleEx(GetSelectionRange(), attr, flags);
else
{
- SetAndShowDefaultStyle(attr);
+ wxRichTextAttr current = GetDefaultStyleEx();
+ current.Apply(attr);
+ SetAndShowDefaultStyle(current);
return true;
}
}