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:
@@ -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}
|
||||||
|
@@ -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}
|
||||||
|
@@ -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
|
||||||
*/
|
*/
|
||||||
|
@@ -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;
|
||||||
|
@@ -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();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user