diff options
author | Bjoern Michaelsen <bjoern.michaelsen@sun.com> | 2009-12-11 16:20:25 +0100 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@sun.com> | 2009-12-11 16:20:25 +0100 |
commit | fecf6836305ed2b654420ea318f8d44cc47d8b7e (patch) | |
tree | df029de933f3c65471e1e2c7c518a5c8f65e63e2 /xmloff/source/text/txtparae.cxx | |
parent | eec26ce8cf443fe6c272625d697c79e25c69a463 (diff) |
cbosdo02: #i33737# odf export
----------------
cbosdo02: #i33737# odf export
----------------
cbosdo02: #i33737# odf import
----------------
cbosdo02: #i33737# fixing uno sequence for field parameters
HG: Enter commit message. Lines beginning with 'HG:' are removed.
HG: Remove all lines to abort the collapse operation.
Diffstat (limited to 'xmloff/source/text/txtparae.cxx')
-rw-r--r-- | xmloff/source/text/txtparae.cxx | 97 |
1 files changed, 79 insertions, 18 deletions
diff --git a/xmloff/source/text/txtparae.cxx b/xmloff/source/text/txtparae.cxx index 60adedd5ed13..4630941b4fce 100644 --- a/xmloff/source/text/txtparae.cxx +++ b/xmloff/source/text/txtparae.cxx @@ -119,6 +119,7 @@ #include "MultiPropertySetHelper.hxx" #include <xmloff/formlayerexport.hxx> #include "XMLTextCharStyleNamesElementExport.hxx" +#include <comphelper/stlunosequence.hxx> // --> OD 2008-04-25 #refactorlists# #include <txtlists.hxx> @@ -234,6 +235,21 @@ namespace const OUString BoundFrames::our_sAnchorType = OUString::createFromAscii("AnchorType"); const OUString BoundFrames::our_sAnchorFrame = OUString::createFromAscii("AnchorFrame"); + class FieldParamExporter + { + public: + FieldParamExporter(SvXMLExport* const pExport, Reference<XNameContainer> xFieldParams) + : m_pExport(pExport) + , m_xFieldParams(xFieldParams) + { }; + void Export(); + + private: + SvXMLExport* const m_pExport; + const Reference<XNameContainer> m_xFieldParams; + + void ExportParameter(const OUString& sKey, const OUString& sValue); + }; } namespace xmloff @@ -389,6 +405,55 @@ BoundFrameSets::BoundFrameSets(const Reference<XInterface> xModel) &lcl_ShapeFilter)); }; +void FieldParamExporter::Export() +{ + static const Type aStringType = ::getCppuType((OUString*)0); + static const Type aBoolType = ::getCppuType((sal_Bool*)0); + static const Type aSeqType = ::getCppuType((Sequence<OUString>*)0); + static const Type aIntType = ::getCppuType((sal_Int32*)0); + Sequence<OUString> vParameters(m_xFieldParams->getElementNames()); + for(const OUString* pCurrent=::comphelper::stl_begin(vParameters); pCurrent!=::comphelper::stl_end(vParameters); ++pCurrent) + { + const Any aValue = m_xFieldParams->getByName(*pCurrent); + const Type aValueType = aValue.getValueType(); + if(aValueType == aStringType) + { + OUString sValue; + aValue >>= sValue; + ExportParameter(*pCurrent,sValue); + } + else if(aValueType == aBoolType) + { + sal_Bool bValue = false; + aValue >>= bValue; + ExportParameter(*pCurrent,OUString::createFromAscii(bValue ? "true" : "false")); + } + else if(aValueType == aSeqType) + { + Sequence<OUString> vValue; + aValue >>= vValue; + for(OUString* pSeqCurrent = ::comphelper::stl_begin(vValue); pSeqCurrent != ::comphelper::stl_end(vValue); ++pSeqCurrent) + { + ExportParameter(*pCurrent, *pSeqCurrent); + } + } + else if(aValueType == aIntType) + { + sal_Int32 nValue = 0; + aValue >>= nValue; + ExportParameter(*pCurrent, OUStringBuffer().append(nValue).makeStringAndClear()); + } + } +} + +void FieldParamExporter::ExportParameter(const OUString& sKey, const OUString& sValue) +{ + m_pExport->AddAttribute(XML_NAMESPACE_FIELD, XML_NAME, sKey); + m_pExport->AddAttribute(XML_NAMESPACE_FIELD, XML_VALUE, sValue); + m_pExport->StartElement(XML_NAMESPACE_FIELD, XML_PARAM, sal_False); + m_pExport->EndElement(XML_NAMESPACE_FIELD, XML_PARAM, sal_False); +} + void XMLTextParagraphExport::Add( sal_uInt16 nFamily, const Reference < XPropertySet > & rPropSet, const XMLPropertyState** ppAddStates, bool bDontSeek ) @@ -2231,21 +2296,19 @@ void XMLTextParagraphExport::exportTextRangeEnumeration( else if (sType.equals(sTextFieldStart)) { Reference<XNamed> xBookmark(xPropSet->getPropertyValue(sBookmark), UNO_QUERY); - if (xBookmark.is()) { + if (xBookmark.is()) + { GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_NAME, xBookmark->getName()); } Reference< ::com::sun::star::text::XFormField > xFormField(xPropSet->getPropertyValue(sBookmark), UNO_QUERY); - if (xFormField.is()) { + if (xFormField.is()) + { GetExport().AddAttribute(XML_NAMESPACE_FIELD, XML_TYPE, xFormField->getFieldType()); } GetExport().StartElement(XML_NAMESPACE_FIELD, XML_FIELDMARK_START, sal_False); - if (xFormField.is()) { - for(sal_Int16 i=0;i<xFormField->getParamCount();i++) { - GetExport().AddAttribute(XML_NAMESPACE_FIELD, XML_NAME, xFormField->getParamName(i)); - GetExport().AddAttribute(XML_NAMESPACE_FIELD, XML_VALUE, xFormField->getParamValue(i)); - GetExport().StartElement(XML_NAMESPACE_FIELD, XML_PARAM, sal_False); - GetExport().EndElement(XML_NAMESPACE_FIELD, XML_PARAM, sal_False); - } + if (xFormField.is()) + { + FieldParamExporter(&GetExport(), xFormField->getParameters()).Export(); } GetExport().EndElement(XML_NAMESPACE_FIELD, XML_FIELDMARK_START, sal_False); } @@ -2257,21 +2320,19 @@ void XMLTextParagraphExport::exportTextRangeEnumeration( else if (sType.equals(sTextFieldStartEnd)) { Reference<XNamed> xBookmark(xPropSet->getPropertyValue(sBookmark), UNO_QUERY); - if (xBookmark.is()) { + if (xBookmark.is()) + { GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_NAME, xBookmark->getName()); } Reference< ::com::sun::star::text::XFormField > xFormField(xPropSet->getPropertyValue(sBookmark), UNO_QUERY); - if (xFormField.is()) { + if (xFormField.is()) + { GetExport().AddAttribute(XML_NAMESPACE_FIELD, XML_TYPE, xFormField->getFieldType()); } GetExport().StartElement(XML_NAMESPACE_FIELD, XML_FIELDMARK, sal_False); - if (xFormField.is()) { - for(sal_Int16 i=0;i<xFormField->getParamCount();i++) { - GetExport().AddAttribute(XML_NAMESPACE_FIELD, XML_NAME, xFormField->getParamName(i)); - GetExport().AddAttribute(XML_NAMESPACE_FIELD, XML_VALUE, xFormField->getParamValue(i)); - GetExport().StartElement(XML_NAMESPACE_FIELD, XML_PARAM, sal_False); - GetExport().EndElement(XML_NAMESPACE_FIELD, XML_PARAM, sal_False); - } + if (xFormField.is()) + { + FieldParamExporter(&GetExport(), xFormField->getParameters()).Export(); } GetExport().EndElement(XML_NAMESPACE_FIELD, XML_FIELDMARK, sal_False); } |