Further fixes, for selected text display and new paragraph insertion

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@51752 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2008-02-13 14:24:37 +00:00
parent 592476a384
commit 35e93e199f
3 changed files with 41 additions and 15 deletions

View File

@@ -192,6 +192,7 @@ class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer;
#define wxRICHTEXT_INSERT_NONE 0x00
#define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
#define wxRICHTEXT_INSERT_INTERACTIVE 0x02
/*!
* Extra formatting flags not in wxTextAttr

View File

@@ -1157,14 +1157,11 @@ bool wxRichTextParagraphLayoutBox::InsertFragment(long position, wxRichTextParag
emptyParagraphAttributes = objectNode->GetData()->GetAttributes();
while (objectNode)
{
if (!objectNode->GetData()->IsEmpty())
{
wxRichTextObject* newObj = objectNode->GetData()->Clone();
// Append
para->AppendChild(newObj);
}
objectNode = objectNode->GetNext();
}
@@ -1210,6 +1207,7 @@ bool wxRichTextParagraphLayoutBox::InsertFragment(long position, wxRichTextParag
// 4. Add back the remaining content.
if (finalPara)
{
if (nextObject)
finalPara->MoveFromList(savedObjects);
// Ensure there's at least one object
@@ -4340,11 +4338,11 @@ bool wxRichTextPlainText::Draw(wxDC& dc, const wxRichTextRange& range, const wxR
wxString str = m_text;
wxString toRemove = wxRichTextLineBreakChar;
str.Replace(toRemove, wxT(" "));
if (textAttr.HasTextEffects() && (textAttr.GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS))
str.MakeUpper();
long len = range.GetLength();
wxString stringChunk = str.Mid(range.GetStart() - offset, (size_t) len);
if (textAttr.HasTextEffects() && (textAttr.GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS))
stringChunk.MakeUpper();
int charHeight = dc.GetCharHeight();
@@ -4969,6 +4967,15 @@ bool wxRichTextBuffer::InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, int
action->GetNewParagraphs().AppendChild(newPara);
action->GetNewParagraphs().UpdateRanges();
action->GetNewParagraphs().SetPartialParagraph(false);
wxRichTextParagraph* para = GetParagraphAtPosition(pos, false);
long pos1 = pos;
if (flags & wxRICHTEXT_INSERT_INTERACTIVE)
{
if (para && para->GetRange().GetEnd() == pos)
pos1 ++;
}
action->SetPosition(pos);
if (p)
@@ -4976,10 +4983,28 @@ bool wxRichTextBuffer::InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, int
// Use the default character style
if (!GetDefaultStyle().IsDefault() && newPara->GetChildren().GetFirst())
newPara->GetChildren().GetFirst()->GetData()->SetAttributes(GetDefaultStyle());
{
// Check whether the default style merely reflects the paragraph/basic style,
// in which case don't apply it.
wxTextAttrEx defaultStyle(GetDefaultStyle());
wxTextAttrEx toApply;
if (para)
{
wxRichTextAttr combinedAttr = para->GetCombinedAttributes();
wxTextAttrEx newAttr;
// This filters out attributes that are accounted for by the current
// paragraph/basic style
wxRichTextApplyStyle(toApply, defaultStyle, & combinedAttr);
}
else
toApply = defaultStyle;
if (!toApply.IsDefault())
newPara->GetChildren().GetFirst()->GetData()->SetAttributes(toApply);
}
// Set the range we'll need to delete in Undo
action->SetRange(wxRichTextRange(pos, pos));
action->SetRange(wxRichTextRange(pos1, pos1));
SubmitAction(action);
@@ -6182,7 +6207,7 @@ bool wxRichTextAction::Do()
wxPoint firstVisiblePt = m_ctrl->GetFirstVisiblePoint();
int lastY = firstVisiblePt.y + clientSize.y;
wxRichTextParagraph* para = m_buffer->GetParagraphAtPosition(GetPosition());
wxRichTextParagraph* para = m_buffer->GetParagraphAtPosition(GetRange().GetStart());
wxRichTextObjectList::compatibility_iterator node = m_buffer->GetChildren().Find(para);
while (node)
{
@@ -6215,9 +6240,9 @@ bool wxRichTextAction::Do()
}
#endif
m_buffer->InsertFragment(GetPosition(), m_newParagraphs);
m_buffer->InsertFragment(GetRange().GetStart(), m_newParagraphs);
m_buffer->UpdateRanges();
m_buffer->Invalidate(GetRange());
m_buffer->Invalidate(wxRichTextRange(GetRange().GetStart()-1, GetRange().GetEnd()));
long newCaretPosition = GetPosition() + m_newParagraphs.GetRange().GetLength();

View File

@@ -582,7 +582,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
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();