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
\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
combined style at this point is already the style in question.
\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
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.
\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 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,
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}
\membersection{wxRichTextBuffer::SetStyleSheet}\label{wxrichtextbuffersetstylesheet}
\end{itemize}
\membersection{wxRichTextBuffer::SetStyleSheet}\label{wxrichtextbuffersetstylesheet}
\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
combined style at this point is already the style in question.
\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
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.
\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 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,
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}
\membersection{wxRichTextCtrl::SetStyleSheet}\label{wxrichtextctrlsetstylesheet}
\end{itemize}
\membersection{wxRichTextCtrl::SetStyleSheet}\label{wxrichtextctrlsetstylesheet}
// the current indentation will be used
#define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
// the current indentation will be used
#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
*/
bool applyMinimal = ((flags & wxRICHTEXT_SETSTYLE_OPTIMIZE) != 0);
bool parasOnly = ((flags & wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY) != 0);
bool charactersOnly = ((flags & wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY) != 0);
bool applyMinimal = ((flags & wxRICHTEXT_SETSTYLE_OPTIMIZE) != 0);
bool parasOnly = ((flags & wxRICHTEXT_SETSTYLE_PARAGRAPHS_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
// to the data.
// If we are associated with a control, make undoable; otherwise, apply immediately
// to the data.
// to be included in the paragraph style
if ((paragraphStyle || parasOnly) && !charactersOnly)
{
// to be included in the paragraph style
if ((paragraphStyle || parasOnly) && !charactersOnly)
{
+ if (resetExistingStyle)
+ newPara->GetAttributes() = wholeStyle;
+ else
- // 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);
+ 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);
- else
- wxRichTextApplyStyle(newPara->GetAttributes(), style);
}
#if wxRICHTEXT_USE_DYNAMIC_STYLES
}
#if wxRICHTEXT_USE_DYNAMIC_STYLES
{
wxRichTextObject* child = node2->GetData();
{
wxRichTextObject* child = node2->GetData();
+ if (resetExistingStyle)
+ child->GetAttributes() = characterAttributes;
+ else
- // 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);
+ 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);
- else
- wxRichTextApplyStyle(child->GetAttributes(), characterAttributes);
if (node2 == lastNode)
break;
if (node2 == lastNode)
break;
DeleteSelectedContent(& newPos);
wxString str = (wxChar) event.GetKeyCode();
DeleteSelectedContent(& newPos);
wxString str = (wxChar) event.GetKeyCode();
- GetBuffer().InsertTextWithUndo(newPos+1, str, this, wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE);
+ GetBuffer().InsertTextWithUndo(newPos+1, str, this, 0);