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 )
EVT_KILL_FOCUS(wxRichTextCtrl::OnKillFocus)
EVT_MOUSE_CAPTURE_LOST(wxRichTextCtrl::OnCaptureLost)
EVT_CONTEXT_MENU(wxRichTextCtrl::OnContextMenu)
+ EVT_SYS_COLOUR_CHANGED(wxRichTextCtrl::OnSysColourChanged)
EVT_MENU(wxID_UNDO, wxRichTextCtrl::OnUndo)
EVT_UPDATE_UI(wxID_UNDO, wxRichTextCtrl::OnUpdateUndo)
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
}
/// Right-click
-void wxRichTextCtrl::OnRightClick(wxMouseEvent& WXUNUSED(event))
+void wxRichTextCtrl::OnRightClick(wxMouseEvent& event)
{
SetFocus();
cmdEvent.SetEventObject(this);
cmdEvent.SetPosition(m_caretPosition+1);
- GetEventHandler()->ProcessEvent(cmdEvent);
+ if (!GetEventHandler()->ProcessEvent(cmdEvent))
+ event.Skip();
}
/// Left-double-click
startX = 0;
startY = startY * ppuY;
- int sx = 0, sy = 0;
- GetVirtualSize(& sx, & sy);
- sx = 0;
- if (ppuY != 0)
- sy = sy/ppuY;
-
wxRect rect = line->GetRect();
-
wxSize clientSize = GetClientSize();
- return !(((rect.y + rect.height) > (clientSize.y + startY)) || rect.y < startY);
+ return (rect.GetBottom() > startY) && (rect.GetTop() < (startY + clientSize.y));
}
void wxRichTextCtrl::SetCaretPosition(long position, bool showAtLineStart)
/// 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()
sm_availableFontNames.Clear();
}
+void wxRichTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event))
+{
+ //wxLogDebug(wxT("wxRichTextCtrl::OnSysColourChanged"));
+
+ wxTextAttrEx basicStyle = GetBasicStyle();
+ basicStyle.SetTextColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
+ SetBasicStyle(basicStyle);
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
+
+ Refresh();
+}
+
#endif
// wxUSE_RICHTEXT