summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Sikeler <d.sikeler94@gmail.com>2015-08-21 17:45:55 +0200
committerDaniel Sikeler <d.sikeler94@gmail.com>2015-08-21 17:45:55 +0200
commit89e562ff508f594dc19b88eb59a5c553462dd703 (patch)
tree0c41ed5244c1474f8b9b5dac1c5a2cf14ac5f9ac
parent421af826aff0ab31cbe6d286a50b25289d17daa0 (diff)
fastparser impl. for XMLDdeFieldImportContext
Change-Id: Icbe7c849db862ec7c80fc5570124ba6b6db4a22a
-rw-r--r--xmloff/inc/txtfldi.hxx5
-rw-r--r--xmloff/source/text/txtfldi.cxx61
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> &)
{