diff options
author | Daniel Sikeler <d.sikeler94@gmail.com> | 2015-08-21 17:45:55 +0200 |
---|---|---|
committer | Daniel Sikeler <d.sikeler94@gmail.com> | 2015-08-21 17:45:55 +0200 |
commit | 89e562ff508f594dc19b88eb59a5c553462dd703 (patch) | |
tree | 0c41ed5244c1474f8b9b5dac1c5a2cf14ac5f9ac | |
parent | 421af826aff0ab31cbe6d286a50b25289d17daa0 (diff) |
fastparser impl. for XMLDdeFieldImportContext
Change-Id: Icbe7c849db862ec7c80fc5570124ba6b6db4a22a
-rw-r--r-- | xmloff/inc/txtfldi.hxx | 5 | ||||
-rw-r--r-- | xmloff/source/text/txtfldi.cxx | 61 |
2 files changed, 66 insertions, 0 deletions
diff --git a/xmloff/inc/txtfldi.hxx b/xmloff/inc/txtfldi.hxx index 6bdc5ad528a9..b7aa042b632f 100644 --- a/xmloff/inc/txtfldi.hxx +++ b/xmloff/inc/txtfldi.hxx @@ -1161,6 +1161,9 @@ public: XMLTextImportHelper& rHlp, sal_uInt16 nPrfx, const OUString& sLocalName); + XMLDdeFieldImportContext( SvXMLImport& rImport, + XMLTextImportHelper& rHlp, + sal_Int32 Element ); protected: /// process attribute values @@ -1169,6 +1172,8 @@ protected: /// create textfield, attach master, and insert into document virtual void EndElement() SAL_OVERRIDE; + virtual void endFastElement( sal_Int32 Element ) + throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE; /// empty method virtual void PrepareField( diff --git a/xmloff/source/text/txtfldi.cxx b/xmloff/source/text/txtfldi.cxx index 2f11dfa5c8cf..e6037665af4b 100644 --- a/xmloff/source/text/txtfldi.cxx +++ b/xmloff/source/text/txtfldi.cxx @@ -3575,6 +3575,16 @@ XMLDdeFieldImportContext::XMLDdeFieldImportContext( { } +XMLDdeFieldImportContext::XMLDdeFieldImportContext( + SvXMLImport& rImport, + XMLTextImportHelper& rHlp, + sal_Int32 Element ) +: XMLTextFieldImportContext( rImport, rHlp, sAPI_dde, Element ), + sName(), + sPropertyContent(sAPI_content) +{ +} + void XMLDdeFieldImportContext::ProcessAttribute( sal_uInt16 nAttrToken, const OUString& sAttrValue ) @@ -3636,6 +3646,57 @@ void XMLDdeFieldImportContext::EndElement() // not valid: ignore } +void XMLDdeFieldImportContext::endFastElement( sal_Int32 /*Element*/ ) + throw( RuntimeException, SAXException, std::exception ) +{ + if (bValid) + { + // find master + OUStringBuffer sBuf; + sBuf.appendAscii(sAPI_fieldmaster_prefix); + sBuf.appendAscii(sAPI_dde); + sBuf.append('.'); + sBuf.append(sName); + OUString sMasterName = sBuf.makeStringAndClear(); + + Reference<XTextFieldsSupplier> xTextFieldsSupp(GetImport().GetModel(), + UNO_QUERY); + Reference<container::XNameAccess> xFieldMasterNameAccess( + xTextFieldsSupp->getTextFieldMasters(), UNO_QUERY); + + if (xFieldMasterNameAccess->hasByName(sMasterName)) + { + Reference<XPropertySet> xMaster; + Any aAny = xFieldMasterNameAccess->getByName(sMasterName); + aAny >>= xMaster; + //apply the content to the master + xMaster->setPropertyValue( sPropertyContent, uno::makeAny( GetContent())); + // master exists: create text field and attach + Reference<XPropertySet> xField; + sBuf.appendAscii(sAPI_textfield_prefix); + sBuf.appendAscii(sAPI_dde); + if (CreateField(xField, sBuf.makeStringAndClear())) + { + Reference<XDependentTextField> xDepTextField(xField,UNO_QUERY); + xDepTextField->attachTextFieldMaster(xMaster); + + // attach field to document + Reference<XTextContent> xTextContent(xField, UNO_QUERY); + if (xTextContent.is()) + { + GetImportHelper().InsertTextContent(xTextContent); + + // we're lucky. nothing else to prepare. + } + // else: fail, because text content could not be created + } + // else: fail, because field could not be created + } + // else: fail, because no master was found (faulty document?!) + } + // not valid: ignore +} + void XMLDdeFieldImportContext::PrepareField( const Reference<XPropertySet> &) { |