Added wxRICHTEXT_SETSTYLE_RESET SetStyleEx() flag to allow for clearing attributes before setting new ones

SetStyle() now looks up and applies named paragraph or character style
Fixed a bug in text entry (taking previous paragraph's style)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43459 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2006-11-17 08:33:34 +00:00
parent 380a5dd803
commit 523d2f145e
5 changed files with 53 additions and 20 deletions

View File

@@ -807,10 +807,11 @@ This differs from the wxRichTextCtrl API, where you would specify (5,6).
\item wxRICHTEXT\_SETSTYLE\_WITH\_UNDO: specifies that this operation should be undoable. \item wxRICHTEXT\_SETSTYLE\_WITH\_UNDO: specifies that this operation should be undoable.
\item wxRICHTEXT\_SETSTYLE\_OPTIMIZE: specifies that the style should not be applied if the \item wxRICHTEXT\_SETSTYLE\_OPTIMIZE: specifies that the style should not be applied if the
combined style at this point is already the style in question. combined style at this point is already the style in question.
\item define wxRICHTEXT\_SETSTYLE\_PARAGRAPHS\_ONLY: specifies that the style should only be applied to paragraphs, \item wxRICHTEXT\_SETSTYLE\_PARAGRAPHS\_ONLY: specifies that the style should only be applied to paragraphs,
and not the content. This allows content styling to be preserved independently from that of e.g. a named paragraph style. and not the content. This allows content styling to be preserved independently from that of e.g. a named paragraph style.
\item wxRICHTEXT\_SETSTYLE\_CHARACTERS\_ONLY: specifies that the style should only be applied to characters, \item wxRICHTEXT\_SETSTYLE\_CHARACTERS\_ONLY: specifies that the style should only be applied to characters,
and not the paragraph. This allows content styling to be preserved independently from that of e.g. a named paragraph style. and not the paragraph. This allows content styling to be preserved independently from that of e.g. a named paragraph style.
\item wxRICHTEXT\_SETSTYLE\_RESET: resets (clears) the existing style before applying the new style.
\end{itemize} \end{itemize}
\membersection{wxRichTextBuffer::SetStyleSheet}\label{wxrichtextbuffersetstylesheet} \membersection{wxRichTextBuffer::SetStyleSheet}\label{wxrichtextbuffersetstylesheet}

View File

@@ -1373,10 +1373,11 @@ So, for example, to set the style for a character at position 5, use the range (
\item wxRICHTEXT\_SETSTYLE\_WITH\_UNDO: specifies that this operation should be undoable. \item wxRICHTEXT\_SETSTYLE\_WITH\_UNDO: specifies that this operation should be undoable.
\item wxRICHTEXT\_SETSTYLE\_OPTIMIZE: specifies that the style should not be applied if the \item wxRICHTEXT\_SETSTYLE\_OPTIMIZE: specifies that the style should not be applied if the
combined style at this point is already the style in question. combined style at this point is already the style in question.
\item define wxRICHTEXT\_SETSTYLE\_PARAGRAPHS\_ONLY: specifies that the style should only be applied to paragraphs, \item wxRICHTEXT\_SETSTYLE\_PARAGRAPHS\_ONLY: specifies that the style should only be applied to paragraphs,
and not the content. This allows content styling to be preserved independently from that of e.g. a named paragraph style. and not the content. This allows content styling to be preserved independently from that of e.g. a named paragraph style.
\item wxRICHTEXT\_SETSTYLE\_CHARACTERS\_ONLY: specifies that the style should only be applied to characters, \item wxRICHTEXT\_SETSTYLE\_CHARACTERS\_ONLY: specifies that the style should only be applied to characters,
and not the paragraph. This allows content styling to be preserved independently from that of e.g. a named paragraph style. and not the paragraph. This allows content styling to be preserved independently from that of e.g. a named paragraph style.
\item wxRICHTEXT\_SETSTYLE\_RESET: resets (clears) the existing style before applying the new style.
\end{itemize} \end{itemize}
\membersection{wxRichTextCtrl::SetStyleSheet}\label{wxrichtextctrlsetstylesheet} \membersection{wxRichTextCtrl::SetStyleSheet}\label{wxrichtextctrlsetstylesheet}

View File

@@ -176,6 +176,9 @@ class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer;
// the current indentation will be used // the current indentation will be used
#define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
// Resets the existing style before applying the new style
#define wxRICHTEXT_SETSTYLE_RESET 0x40
/*! /*!
* Flags for text insertion * Flags for text insertion
*/ */

View File

@@ -1599,11 +1599,29 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const
bool applyMinimal = ((flags & wxRICHTEXT_SETSTYLE_OPTIMIZE) != 0); bool applyMinimal = ((flags & wxRICHTEXT_SETSTYLE_OPTIMIZE) != 0);
bool parasOnly = ((flags & wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY) != 0); bool parasOnly = ((flags & wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY) != 0);
bool charactersOnly = ((flags & wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY) != 0); bool charactersOnly = ((flags & wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY) != 0);
bool resetExistingStyle = ((flags & wxRICHTEXT_SETSTYLE_RESET) != 0);
// Apply paragraph style first, if any
wxRichTextAttr wholeStyle(style);
if (wholeStyle.HasParagraphStyleName() && GetStyleSheet())
{
wxRichTextParagraphStyleDefinition* def = GetStyleSheet()->FindParagraphStyle(wholeStyle.GetParagraphStyleName());
if (def)
wxRichTextApplyStyle(wholeStyle, def->GetStyle());
}
// Limit the attributes to be set to the content to only character attributes. // Limit the attributes to be set to the content to only character attributes.
wxRichTextAttr characterAttributes(style); wxRichTextAttr characterAttributes(wholeStyle);
characterAttributes.SetFlags(characterAttributes.GetFlags() & (wxTEXT_ATTR_CHARACTER)); characterAttributes.SetFlags(characterAttributes.GetFlags() & (wxTEXT_ATTR_CHARACTER));
if (characterAttributes.HasCharacterStyleName() && GetStyleSheet())
{
wxRichTextCharacterStyleDefinition* def = GetStyleSheet()->FindCharacterStyle(characterAttributes.GetCharacterStyleName());
if (def)
wxRichTextApplyStyle(characterAttributes, def->GetStyle());
}
// If we are associated with a control, make undoable; otherwise, apply immediately // If we are associated with a control, make undoable; otherwise, apply immediately
// to the data. // to the data.
@@ -1651,15 +1669,20 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const
// to be included in the paragraph style // to be included in the paragraph style
if ((paragraphStyle || parasOnly) && !charactersOnly) if ((paragraphStyle || parasOnly) && !charactersOnly)
{ {
if (applyMinimal) if (resetExistingStyle)
{ newPara->GetAttributes() = wholeStyle;
// Only apply attributes that will make a difference to the combined
// style as seen on the display
wxRichTextAttr combinedAttr(para->GetCombinedAttributes());
wxRichTextApplyStyle(newPara->GetAttributes(), style, & combinedAttr);
}
else else
wxRichTextApplyStyle(newPara->GetAttributes(), style); {
if (applyMinimal)
{
// Only apply attributes that will make a difference to the combined
// style as seen on the display
wxRichTextAttr combinedAttr(para->GetCombinedAttributes());
wxRichTextApplyStyle(newPara->GetAttributes(), wholeStyle, & combinedAttr);
}
else
wxRichTextApplyStyle(newPara->GetAttributes(), wholeStyle);
}
} }
#if wxRICHTEXT_USE_DYNAMIC_STYLES #if wxRICHTEXT_USE_DYNAMIC_STYLES
@@ -1725,15 +1748,20 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const
{ {
wxRichTextObject* child = node2->GetData(); wxRichTextObject* child = node2->GetData();
if (applyMinimal) if (resetExistingStyle)
{ child->GetAttributes() = characterAttributes;
// Only apply attributes that will make a difference to the combined
// style as seen on the display
wxRichTextAttr combinedAttr(newPara->GetCombinedAttributes(child->GetAttributes()));
wxRichTextApplyStyle(child->GetAttributes(), characterAttributes, & combinedAttr);
}
else else
wxRichTextApplyStyle(child->GetAttributes(), characterAttributes); {
if (applyMinimal)
{
// Only apply attributes that will make a difference to the combined
// style as seen on the display
wxRichTextAttr combinedAttr(newPara->GetCombinedAttributes(child->GetAttributes()));
wxRichTextApplyStyle(child->GetAttributes(), characterAttributes, & combinedAttr);
}
else
wxRichTextApplyStyle(child->GetAttributes(), characterAttributes);
}
if (node2 == lastNode) if (node2 == lastNode)
break; break;

View File

@@ -769,7 +769,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
DeleteSelectedContent(& newPos); DeleteSelectedContent(& newPos);
wxString str = (wxChar) event.GetKeyCode(); wxString str = (wxChar) event.GetKeyCode();
GetBuffer().InsertTextWithUndo(newPos+1, str, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE); GetBuffer().InsertTextWithUndo(newPos+1, str, this, 0);
EndBatchUndo(); EndBatchUndo();