X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5912d19ef7db2e64e3b4e130cbaf872a30173d1a..b2b4f8c0ca2884f99a923d30b4b37b12c76e936b:/src/richtext/richtextctrl.cpp diff --git a/src/richtext/richtextctrl.cpp b/src/richtext/richtextctrl.cpp index b84f2db4c7..5995b29fb8 100644 --- a/src/richtext/richtextctrl.cpp +++ b/src/richtext/richtextctrl.cpp @@ -74,6 +74,7 @@ BEGIN_EVENT_TABLE( wxRichTextCtrl, wxControl ) EVT_SIZE(wxRichTextCtrl::OnSize) EVT_SET_FOCUS(wxRichTextCtrl::OnSetFocus) EVT_KILL_FOCUS(wxRichTextCtrl::OnKillFocus) + EVT_MOUSE_CAPTURE_LOST(wxRichTextCtrl::OnCaptureLost) EVT_CONTEXT_MENU(wxRichTextCtrl::OnContextMenu) EVT_MENU(wxID_UNDO, wxRichTextCtrl::OnUndo) @@ -325,6 +326,11 @@ void wxRichTextCtrl::OnKillFocus(wxFocusEvent& WXUNUSED(event)) // Refresh(false); } +void wxRichTextCtrl::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event)) +{ + m_dragging = false; +} + /// Left-click void wxRichTextCtrl::OnLeftClick(wxMouseEvent& event) { @@ -556,7 +562,15 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event) DeleteSelectedContent(& newPos); - GetBuffer().InsertNewlineWithUndo(newPos+1, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE); + if (event.ShiftDown()) + { + wxString text; + text = wxRichTextLineBreakChar; + GetBuffer().InsertTextWithUndo(newPos+1, text, this); + } + else + GetBuffer().InsertNewlineWithUndo(newPos+1, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE); + EndBatchUndo(); SetDefaultStyleToCursorStyle(); @@ -587,10 +601,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event) // 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), - m_caretPosition, // Current caret position - m_caretPosition-1, // New caret position - this); + GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition, m_caretPosition), this); } else DeleteSelectedContent(); @@ -625,10 +636,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event) // Submit range in character positions, which are greater than caret positions, if (m_caretPosition < GetBuffer().GetRange().GetEnd()+1 && !HasSelection()) { - GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition+1, m_caretPosition+1), - m_caretPosition, // Current caret position - m_caretPosition+1, // New caret position - this); + GetBuffer().DeleteRangeWithUndo(wxRichTextRange(m_caretPosition+1, m_caretPosition+1), this); } else DeleteSelectedContent(); @@ -826,10 +834,7 @@ bool wxRichTextCtrl::DeleteSelectedContent(long* newPos) if (HasSelection()) { long pos = m_selectionRange.GetStart(); - GetBuffer().DeleteRangeWithUndo(m_selectionRange, - m_caretPosition, // Current caret position - pos, // New caret position - this); + GetBuffer().DeleteRangeWithUndo(m_selectionRange, this); m_selectionRange.SetRange(-2, -2); if (newPos) @@ -2040,7 +2045,7 @@ void wxRichTextCtrl::DoWriteText(const wxString& value, int flags) { wxString valueUnix = wxTextFile::Translate(value, wxTextFileType_Unix); - GetBuffer().InsertTextWithUndo(m_caretPosition+1, valueUnix, this); + GetBuffer().InsertTextWithUndo(m_caretPosition+1, valueUnix, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE); if ( flags & SetValue_SendEvent ) SendTextUpdatedEvent(); @@ -2101,6 +2106,13 @@ bool wxRichTextCtrl::Newline() return GetBuffer().InsertNewlineWithUndo(m_caretPosition+1, this); } +/// Insert a line break at the current insertion point. +bool wxRichTextCtrl::LineBreak() +{ + wxString text; + text = wxRichTextLineBreakChar; + return GetBuffer().InsertTextWithUndo(m_caretPosition+1, text, this); +} // ---------------------------------------------------------------------------- // Clipboard operations @@ -2249,6 +2261,8 @@ void wxRichTextCtrl::DoSetSelection(long from, long to, bool WXUNUSED(scrollCare { m_selectionAnchor = from; m_selectionRange.SetRange(from, to-1); + if (from > -2) + m_caretPosition = from-1; Refresh(false); PositionCaret(); @@ -2274,10 +2288,7 @@ void wxRichTextCtrl::Remove(long from, long to) { SelectNone(); - GetBuffer().DeleteRangeWithUndo(wxRichTextRange(from, to), - m_caretPosition, // Current caret position - from, // New caret position - this); + GetBuffer().DeleteRangeWithUndo(wxRichTextRange(from, to), this); LayoutContent(); if (!IsFrozen()) @@ -2924,7 +2935,7 @@ bool wxRichTextCtrl::ApplyStyle(wxRichTextStyleDefinition* def) { // Flags are defined within each definition, so only certain // attributes are applied. - wxRichTextAttr attr(def->GetStyle()); + wxRichTextAttr attr(GetStyleSheet() ? def->GetStyleMergedWithBase(GetStyleSheet()) : def->GetStyle()); int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE; @@ -3098,6 +3109,12 @@ bool wxRichTextCtrl::PromoteList(int promoteBy, const wxRichTextRange& range, co return GetBuffer().PromoteList(promoteBy, range.ToInternal(), defName, flags, specifiedLevel); } +/// Deletes the content in the given range +bool wxRichTextCtrl::Delete(const wxRichTextRange& range) +{ + return GetBuffer().DeleteRangeWithUndo(range.ToInternal(), this); +} + const wxArrayString& wxRichTextCtrl::GetAvailableFontNames() { if (sm_availableFontNames.GetCount() == 0)