]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxRICHTEXT_SETSTYLE_RESET SetStyleEx() flag to allow for clearing attributes...
authorJulian Smart <julian@anthemion.co.uk>
Fri, 17 Nov 2006 08:33:34 +0000 (08:33 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Fri, 17 Nov 2006 08:33:34 +0000 (08:33 +0000)
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

docs/latex/wx/richtextbuffer.tex
docs/latex/wx/richtextctrl.tex
include/wx/richtext/richtextbuffer.h
src/richtext/richtextbuffer.cpp
src/richtext/richtextctrl.cpp

index b0a57a1313918698c3fdeaa7634e5196c9076c73..414088257394b794c3fc08d13a70e289f4bc07c4 100644 (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\_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.
+\item wxRICHTEXT\_SETSTYLE\_RESET: resets (clears) the existing style before applying the new style.
 \end{itemize}
 
 \membersection{wxRichTextBuffer::SetStyleSheet}\label{wxrichtextbuffersetstylesheet}
index 87b3b88e0a6e1a5734aca9814709f1c30e06076a..d268a9be200c2b0d1d8a1a3fd15df83862be39a0 100644 (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\_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.
+\item wxRICHTEXT\_SETSTYLE\_RESET: resets (clears) the existing style before applying the new style.
 \end{itemize}
 
 \membersection{wxRichTextCtrl::SetStyleSheet}\label{wxrichtextctrlsetstylesheet}
index c57f858c331a2290b895bc2474049223caab5300..8478c3f3925f4470e94ea8b6dbf54cb4ac075dbb 100644 (file)
@@ -176,6 +176,9 @@ class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer;
 // 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
  */
index 0b1841d64cbc91a3241fcaab2317f8f29850a223..1f3184d1a84c416118469dc7fae74d424133fa69 100644 (file)
@@ -1599,11 +1599,29 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const
     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.
-    wxRichTextAttr characterAttributes(style);
+    wxRichTextAttr characterAttributes(wholeStyle);
     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.
 
@@ -1651,15 +1669,20 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const
                 // to be included in the paragraph style
                 if ((paragraphStyle || parasOnly) && !charactersOnly)
                 {
-                    if (applyMinimal)
+                    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
@@ -1725,15 +1748,20 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const
                     {
                         wxRichTextObject* child = node2->GetData();
 
-                        if (applyMinimal)
+                        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;
index 11b54b3fda9250672070a9d2375bb3ec1b9c5cee..52bfe09cd01052328356b1b8135059d6cc3ab7e0 100644 (file)
@@ -769,7 +769,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
                 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);
 
                 EndBatchUndo();