DEFINE_EVENT_TYPE(wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_RICHTEXT_BUFFER_RESET)
IMPLEMENT_CLASS( wxRichTextCtrl, wxControl )
SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
}
- GetBuffer().Reset();
- GetBuffer().SetRichTextCtrl(this);
-
- SetCaret(new wxCaret(this, wxRICHTEXT_DEFAULT_CARET_WIDTH, 16));
- GetCaret()->Show();
-
if (style & wxTE_READONLY)
SetEditable(false);
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
SetBackgroundStyle(wxBG_STYLE_CUSTOM);
+ GetBuffer().Reset();
+ GetBuffer().SetRichTextCtrl(this);
+
+ SetCaret(new wxCaret(this, wxRICHTEXT_DEFAULT_CARET_WIDTH, 16));
+ GetCaret()->Show();
+
// Tell the sizers to use the given or best size
SetInitialSize(size);
/// Member initialisation
void wxRichTextCtrl::Init()
{
- m_freezeCount = 0;
m_contextMenu = NULL;
m_caret = NULL;
m_caretPosition = -1;
m_caretPositionForDefaultStyle = -2;
}
-/// Call Freeze to prevent refresh
-void wxRichTextCtrl::Freeze()
+void wxRichTextCtrl::DoThaw()
{
- m_freezeCount ++;
-}
-
-/// Call Thaw to refresh
-void wxRichTextCtrl::Thaw()
-{
- m_freezeCount --;
-
- if (m_freezeCount == 0)
- {
- if (GetBuffer().GetDirty())
- LayoutContent();
- else
- SetupScrollbars();
- Refresh(false);
- }
+ if (GetBuffer().GetDirty())
+ LayoutContent();
+ else
+ SetupScrollbars();
+ Refresh(false);
}
/// Clear all text
m_caretAtLineStart = false;
m_selectionRange.SetRange(-2, -2);
- if (m_freezeCount == 0)
+ Scroll(0,0);
+
+ if (!IsFrozen())
{
LayoutContent();
Refresh(false);
#else
wxPaintDC dc(this);
#endif
- PrepareDC(dc);
- if (m_freezeCount > 0)
+ if (IsFrozen())
return;
+ PrepareDC(dc);
+
dc.SetFont(GetFont());
// Paint the background
m_dragging = true;
CaptureMouse();
- SelectNone();
-
bool caretAtLineStart = false;
if (hit & wxRICHTEXT_HITTEST_BEFORE)
position --;
}
+ long oldCaretPos = m_caretPosition;
+
MoveCaret(position, caretAtLineStart);
SetDefaultStyleToCursorStyle();
+
+ if (event.ShiftDown())
+ {
+ bool extendSel = false;
+ if (m_selectionRange.GetStart() == -2)
+ extendSel = ExtendSelection(oldCaretPos, m_caretPosition, wxRICHTEXT_SHIFT_DOWN);
+ else
+ extendSel = ExtendSelection(m_caretPosition, m_caretPosition, wxRICHTEXT_SHIFT_DOWN);
+
+ if (extendSel)
+ Refresh(false);
+ }
+ else
+ SelectNone();
}
event.Skip();
GetBuffer().InsertTextWithUndo(newPos+1, text, this);
}
else
- GetBuffer().InsertNewlineWithUndo(newPos+1, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE);
+ GetBuffer().InsertNewlineWithUndo(newPos+1, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE|wxRICHTEXT_INSERT_INTERACTIVE);
EndBatchUndo();
SetDefaultStyleToCursorStyle();
/// Set up scrollbars, e.g. after a resize
void wxRichTextCtrl::SetupScrollbars(bool atTop)
{
- if (m_freezeCount)
+ if (IsFrozen())
return;
if (GetBuffer().IsEmpty())
SelectNone();
m_caretPosition = pos - 1;
+
+ PositionCaret();
}
void wxRichTextCtrl::SetInsertionPointEnd()
}
DoSetSelection(from, to);
+ SetDefaultStyleToCursorStyle();
}
void wxRichTextCtrl::DoSetSelection(long from, long to, bool WXUNUSED(scrollCaret))
{
SelectNone();
- GetBuffer().DeleteRangeWithUndo(wxRichTextRange(from, to), this);
+ GetBuffer().DeleteRangeWithUndo(wxRichTextRange(from, to-1), this);
LayoutContent();
if (!IsFrozen())
// attributes are applied.
wxTextAttr attr(GetStyleSheet() ? def->GetStyleMergedWithBase(GetStyleSheet()) : def->GetStyle());
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE;
+ int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_RESET;
if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition)))
{