Use paragraph's attributes for paragraph-related styles, and also

use combined attributes


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41706 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2006-10-08 14:00:55 +00:00
parent 3e3a754f9c
commit 27507b618a
2 changed files with 32 additions and 29 deletions

View File

@@ -47,8 +47,8 @@ protected:
#endif #endif
/// Output character formatting /// Output character formatting
virtual void BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxOutputStream& stream ); virtual void BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, const wxTextAttrEx& paraStyle, wxOutputStream& stream );
virtual void EndCharacterFormatting(const wxTextAttrEx& WXUNUSED(currentStyle), const wxTextAttrEx& thisStyle, wxOutputStream& stream ); virtual void EndCharacterFormatting(const wxTextAttrEx& WXUNUSED(currentStyle), const wxTextAttrEx& thisStyle, const wxTextAttrEx& paraStyle, wxOutputStream& stream );
/// Output paragraph formatting /// Output paragraph formatting
virtual void OutputParagraphFormatting(const wxTextAttrEx& WXUNUSED(currentStyle), const wxTextAttrEx& thisStyle, wxOutputStream& stream/*, bool start*/); virtual void OutputParagraphFormatting(const wxTextAttrEx& WXUNUSED(currentStyle), const wxTextAttrEx& thisStyle, wxOutputStream& stream/*, bool start*/);

View File

@@ -98,7 +98,9 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream&
if (para) if (para)
{ {
OutputParagraphFormatting(currentParaStyle, para->GetAttributes(), stream); wxTextAttrEx paraStyle(para->GetCombinedAttributes());
OutputParagraphFormatting(currentParaStyle, paraStyle, stream);
wxRichTextObjectList::compatibility_iterator node2 = para->GetChildren().GetFirst(); wxRichTextObjectList::compatibility_iterator node2 = para->GetChildren().GetFirst();
while (node2) while (node2)
@@ -107,11 +109,12 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream&
wxRichTextPlainText* textObj = wxDynamicCast(obj, wxRichTextPlainText); wxRichTextPlainText* textObj = wxDynamicCast(obj, wxRichTextPlainText);
if (textObj && !textObj->IsEmpty()) if (textObj && !textObj->IsEmpty())
{ {
BeginCharacterFormatting(currentCharStyle, obj->GetAttributes(), stream); wxTextAttrEx charStyle(para->GetCombinedAttributes(obj->GetAttributes()));
BeginCharacterFormatting(currentCharStyle, charStyle, paraStyle, stream);
str << textObj->GetText(); str << textObj->GetText();
EndCharacterFormatting(currentCharStyle, obj->GetAttributes(), stream); EndCharacterFormatting(currentCharStyle, charStyle, paraStyle, stream);
} }
wxRichTextImage* image = wxDynamicCast(obj, wxRichTextImage); wxRichTextImage* image = wxDynamicCast(obj, wxRichTextImage);
@@ -131,12 +134,12 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream&
return true; return true;
} }
void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxOutputStream& stream) void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, const wxTextAttrEx& paraStyle, wxOutputStream& stream)
{ {
wxTextOutputStream str(stream); wxTextOutputStream str(stream);
//Is the item bulleted one? //Is the item bulleted one?
if( thisStyle.GetBulletStyle() != wxTEXT_ATTR_BULLET_STYLE_NONE ) if( paraStyle.GetBulletStyle() != wxTEXT_ATTR_BULLET_STYLE_NONE )
{ {
//Is there any opened list? //Is there any opened list?
if( m_list ) if( m_list )
@@ -145,7 +148,7 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
//Is the item among the previous ones //Is the item among the previous ones
//Is the item one of the previous list tag's child items //Is the item one of the previous list tag's child items
if( (thisStyle.GetLeftIndent() == (m_indent + 100)) || (thisStyle.GetLeftIndent() < 100) ) if( (paraStyle.GetLeftIndent() == (m_indent + 100)) || (paraStyle.GetLeftIndent() < 100) )
str << wxT("<li>");//Yes it is str << wxT("<li>");//Yes it is
else else
{ {
@@ -155,12 +158,12 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
str << (m_is_ul ? wxT("</ul>") : wxT("</ol>")); str << (m_is_ul ? wxT("</ul>") : wxT("</ol>"));
//And renavigate to new list's horizontal position //And renavigate to new list's horizontal position
NavigateToListPosition(thisStyle, str); NavigateToListPosition(paraStyle, str);
//Ok it's done //Ok it's done
//Get the appropriate tag, an ol for numerical values, an ul for dot, square etc. //Get the appropriate tag, an ol for numerical values, an ul for dot, square etc.
wxString tag; wxString tag;
TypeOfList(thisStyle, tag); TypeOfList(paraStyle, tag);
str << tag << wxT("<li>"); str << tag << wxT("<li>");
} }
} }
@@ -169,11 +172,11 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
//No there isn't a list //No there isn't a list
//navigate to new list's horizontal position(indent) //navigate to new list's horizontal position(indent)
NavigateToListPosition(thisStyle, str); NavigateToListPosition(paraStyle, str);
//Get the appropriate tag, an ol for numerical values, an ul for dot, square etc. //Get the appropriate tag, an ol for numerical values, an ul for dot, square etc.
wxString tag; wxString tag;
TypeOfList(thisStyle, tag); TypeOfList(paraStyle, tag);
str << tag << wxT("<li>"); str << tag << wxT("<li>");
//Now we have a list, mark it. //Now we have a list, mark it.
@@ -191,25 +194,25 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
} }
// does the item have an indentation ? // does the item have an indentation ?
if( thisStyle.GetLeftIndent() ) if( paraStyle.GetLeftIndent() )
{ {
if( thisStyle.GetBulletStyle() == wxTEXT_ATTR_BULLET_STYLE_NONE ) if( paraStyle.GetBulletStyle() == wxTEXT_ATTR_BULLET_STYLE_NONE )
{ {
if( m_indent ) if( m_indent )
{ {
if( (thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent()) == m_indent ) if( (paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent()) == m_indent )
{ {
if( thisStyle.GetLeftSubIndent() < 0 ) if( paraStyle.GetLeftSubIndent() < 0 )
{ {
str << SymbolicIndent(~thisStyle.GetLeftSubIndent()); str << SymbolicIndent(~paraStyle.GetLeftSubIndent());
} }
} }
else else
{ {
if( thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent() > m_indent ) if( paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent() > m_indent )
{ {
Indent(thisStyle, str); Indent(paraStyle, str);
m_indent = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent(); m_indent = paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent();
m_indents.Add( m_indent ); m_indents.Add( m_indent );
} }
else else
@@ -217,19 +220,19 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
int i = m_indents.size() - 1; int i = m_indents.size() - 1;
for(; i > -1; i--) for(; i > -1; i--)
{ {
if( m_indent < (thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent()) ) if( m_indent < (paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent()) )
{ {
Indent(thisStyle, str); Indent(paraStyle, str);
m_indent = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent(); m_indent = paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent();
m_indents.Add( m_indent ); m_indents.Add( m_indent );
break; break;
} }
else if( m_indent == (thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent()) ) else if( m_indent == (paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent()) )
{ {
if( thisStyle.GetLeftSubIndent() < 0 ) if( paraStyle.GetLeftSubIndent() < 0 )
{ {
str << SymbolicIndent(~thisStyle.GetLeftSubIndent()); str << SymbolicIndent(~paraStyle.GetLeftSubIndent());
} }
break; break;
} }
@@ -248,8 +251,8 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
} }
else else
{ {
Indent(thisStyle, str); Indent(paraStyle, str);
m_indent = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent(); m_indent = paraStyle.GetLeftIndent() + paraStyle.GetLeftSubIndent();
m_indents.Add( m_indent ); m_indents.Add( m_indent );
} }
} }
@@ -291,7 +294,7 @@ void wxRichTextHTMLHandler::BeginCharacterFormatting(const wxTextAttrEx& current
str << wxT("<u>"); str << wxT("<u>");
} }
void wxRichTextHTMLHandler::EndCharacterFormatting(const wxTextAttrEx& WXUNUSED(currentStyle), const wxTextAttrEx& thisStyle, wxOutputStream& stream) void wxRichTextHTMLHandler::EndCharacterFormatting(const wxTextAttrEx& WXUNUSED(currentStyle), const wxTextAttrEx& thisStyle, const wxTextAttrEx& WXUNUSED(paraStyle), wxOutputStream& stream)
{ {
wxTextOutputStream str(stream); wxTextOutputStream str(stream);