From afff80287bad972890b1bcd5f5e00084a8507605 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sun, 10 Nov 2013 15:56:37 +0000 Subject: [PATCH] Corrected and tidied XML import/export of standard data members git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75161 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/richtext/richtextxml.h | 5 ++++ src/richtext/richtextxml.cpp | 50 ++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/include/wx/richtext/richtextxml.h b/include/wx/richtext/richtextxml.h index 013aa97693..072d34b2a7 100644 --- a/include/wx/richtext/richtextxml.h +++ b/include/wx/richtext/richtextxml.h @@ -119,6 +119,10 @@ public: /// Create a string containing style attributes static wxString AddAttributes(const wxRichTextAttr& attr, bool isPara = false); + + /// Create a string containing style attributes, plus further object 'attributes' (shown, id) + static wxString AddAttributes(wxRichTextObject* obj, bool isPara = false); + virtual bool ExportStyleDefinition(wxOutputStream& stream, wxRichTextStyleDefinition* def, int level); virtual bool WriteProperties(wxOutputStream& stream, const wxRichTextProperties& properties, int level); @@ -136,6 +140,7 @@ public: static void AddAttribute(wxXmlNode* node, const wxString& rootName, const wxTextAttrBorders& borders); static bool AddAttributes(wxXmlNode* node, wxRichTextAttr& attr, bool isPara = false); + static bool AddAttributes(wxXmlNode* node, wxRichTextObject* obj, bool isPara = false); virtual bool ExportStyleDefinition(wxXmlNode* parent, wxRichTextStyleDefinition* def); diff --git a/src/richtext/richtextxml.cpp b/src/richtext/richtextxml.cpp index 250ba47b3f..d25601b861 100644 --- a/src/richtext/richtextxml.cpp +++ b/src/richtext/richtextxml.cpp @@ -366,11 +366,7 @@ bool wxRichTextObject::ExportXML(wxOutputStream& stream, int indent, wxRichTextX handler->GetHelper().OutputIndentation(stream, indent); handler->GetHelper().OutputString(stream, wxT("<") + GetXMLNodeName()); - wxString style = handler->GetHelper().AddAttributes(GetAttributes(), true); - if (!IsShown()) - style << wxT(" show=\"0\""); - if (!GetId().IsEmpty()) - style << wxT(" id=\"") << handler->GetHelper().AttributeToXML(GetId()) << wxT("\""); + wxString style = handler->GetHelper().AddAttributes(this, true); handler->GetHelper().OutputString(stream, style + wxT(">")); @@ -402,12 +398,8 @@ bool wxRichTextObject::ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handle { wxXmlNode* elementNode = new wxXmlNode(wxXML_ELEMENT_NODE, GetXMLNodeName()); parent->AddChild(elementNode); - handler->GetHelper().AddAttributes(elementNode, GetAttributes(), true); + handler->GetHelper().AddAttributes(elementNode, this, true); handler->GetHelper().WriteProperties(elementNode, GetProperties()); - if (!IsShown()) - elementNode->AddAttribute(wxT("show"), wxT("0")); - if (!GetId().IsEmpty()) - elementNode->AddAttribute(wxT("id"), GetId()); wxRichTextCompositeObject* composite = wxDynamicCast(this, wxRichTextCompositeObject); if (composite) @@ -485,7 +477,7 @@ bool wxRichTextPlainText::ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* nod // Export this object directly to the given stream. bool wxRichTextPlainText::ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler) { - wxString style = handler->GetHelper().AddAttributes(GetAttributes(), false); + wxString style = handler->GetHelper().AddAttributes(this, false); int i; int last = 0; @@ -742,7 +734,7 @@ bool wxRichTextImage::ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* node, w // Export this object directly to the given stream. bool wxRichTextImage::ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler) { - wxString style = handler->GetHelper().AddAttributes(GetAttributes(), false); + wxString style = handler->GetHelper().AddAttributes(this, false); handler->GetHelper().OutputIndentation(stream, indent); handler->GetHelper().OutputString(stream, wxT("AddAttribute(wxT("imagetype"), wxRichTextXMLHelper::MakeString((int) GetImageBlock().GetImageType())); - handler->GetHelper().AddAttributes(elementNode, GetAttributes(), false); + handler->GetHelper().AddAttributes(elementNode, this, false); handler->GetHelper().WriteProperties(elementNode, GetProperties()); wxXmlNode* dataNode = new wxXmlNode(wxXML_ELEMENT_NODE, wxT("data")); @@ -889,7 +881,7 @@ bool wxRichTextParagraphLayoutBox::ExportXML(wxOutputStream& stream, int indent, wxString nodeName = GetXMLNodeName(); handler->GetHelper().OutputString(stream, wxT("<") + nodeName); - wxString style = handler->GetHelper().AddAttributes(GetAttributes(), true); + wxString style = handler->GetHelper().AddAttributes(this, true); if (GetPartialParagraph()) style << wxT(" partialparagraph=\"true\""); @@ -927,7 +919,7 @@ bool wxRichTextParagraphLayoutBox::ExportXML(wxXmlNode* parent, wxRichTextXMLHan { wxXmlNode* elementNode = new wxXmlNode(wxXML_ELEMENT_NODE, GetXMLNodeName()); parent->AddChild(elementNode); - handler->GetHelper().AddAttributes(elementNode, GetAttributes(), true); + handler->GetHelper().AddAttributes(elementNode, this, true); handler->GetHelper().WriteProperties(elementNode, GetProperties()); if (GetPartialParagraph()) @@ -1001,7 +993,7 @@ bool wxRichTextTable::ExportXML(wxOutputStream& stream, int indent, wxRichTextXM wxString nodeName = GetXMLNodeName(); handler->GetHelper().OutputString(stream, wxT("<") + nodeName); - wxString style = handler->GetHelper().AddAttributes(GetAttributes(), true); + wxString style = handler->GetHelper().AddAttributes(this, true); style << wxT(" rows=\"") << m_rowCount << wxT("\""); style << wxT(" cols=\"") << m_colCount << wxT("\""); @@ -1036,7 +1028,7 @@ bool wxRichTextTable::ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handler { wxXmlNode* elementNode = new wxXmlNode(wxXML_ELEMENT_NODE, GetXMLNodeName()); parent->AddChild(elementNode); - handler->GetHelper().AddAttributes(elementNode, GetAttributes(), true); + handler->GetHelper().AddAttributes(elementNode, this, true); handler->GetHelper().WriteProperties(elementNode, GetProperties()); elementNode->AddAttribute(wxT("rows"), wxString::Format(wxT("%d"), m_rowCount)); @@ -2268,6 +2260,17 @@ wxString wxRichTextXMLHelper::AddAttributes(const wxRichTextAttr& attr, bool isP return str; } +// Create a string containing style attributes, plus further object 'attributes' (shown, id) +wxString wxRichTextXMLHelper::AddAttributes(wxRichTextObject* obj, bool isPara) +{ + wxString style = AddAttributes(obj->GetAttributes(), isPara); + if (!obj->IsShown()) + style << wxT(" show=\"0\""); + if (!obj->GetId().IsEmpty()) + style << wxT(" id=\"") << AttributeToXML(obj->GetId()) << wxT("\""); + return style; +} + // Write the properties bool wxRichTextXMLHelper::WriteProperties(wxOutputStream& stream, const wxRichTextProperties& properties, int level) { @@ -2749,6 +2752,19 @@ bool wxRichTextXMLHelper::AddAttributes(wxXmlNode* node, wxRichTextAttr& attr, b return true; } +bool wxRichTextXMLHelper::AddAttributes(wxXmlNode* node, wxRichTextObject* obj, bool isPara) +{ + if (obj) + { + if (!obj->IsShown()) + node->AddAttribute(wxT("show"), wxT("0")); + if (!obj->GetId().IsEmpty()) + node->AddAttribute(wxT("id"), obj->GetId()); + } + + return AddAttributes(node, obj->GetAttributes(), isPara); +} + bool wxRichTextXMLHelper::WriteProperties(wxXmlNode* node, const wxRichTextProperties& properties) { if (properties.GetCount() > 0)