From 9d0d41f0f3c5215770bc7246a089d54a7244df55 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Sat, 19 Dec 2015 23:29:17 +0100 Subject: move saveInteropProperties from writerfilter to oox Change-Id: I4f9769ad496198d2d002775dee4ee0a2f08d6f3b --- oox/source/ole/oleobjecthelper.cxx | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'oox') diff --git a/oox/source/ole/oleobjecthelper.cxx b/oox/source/ole/oleobjecthelper.cxx index f5d4df409748..5e6c057b0b56 100644 --- a/oox/source/ole/oleobjecthelper.cxx +++ b/oox/source/ole/oleobjecthelper.cxx @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -28,6 +29,7 @@ #include #include #include +#include #include "oox/helper/propertymap.hxx" namespace oox { @@ -72,6 +74,44 @@ OleObjectHelper::~OleObjectHelper() } } +void SaveInteropProperties(uno::Reference const& xModel, + OUString const& rObjectName, OUString const*const pOldObjectName, + OUString const& rProgId, OUString const& rDrawAspect) +{ + static const char sEmbeddingsPropName[] = "EmbeddedObjects"; + + // get interop grab bag from document + uno::Reference const xDocProps(xModel, uno::UNO_QUERY); + comphelper::SequenceAsHashMap aGrabBag(xDocProps->getPropertyValue("InteropGrabBag")); + + // get EmbeddedObjects property inside grab bag + comphelper::SequenceAsHashMap objectsList; + if (aGrabBag.find(sEmbeddingsPropName) != aGrabBag.end()) + objectsList << aGrabBag[sEmbeddingsPropName]; + + uno::Sequence< beans::PropertyValue > aGrabBagAttribute(2); + aGrabBagAttribute[0].Name = "ProgID"; + aGrabBagAttribute[0].Value <<= rProgId; + aGrabBagAttribute[1].Name = "DrawAspect"; + aGrabBagAttribute[1].Value <<= rDrawAspect; + + // If we got an "old name", erase that first. + if (pOldObjectName) + { + comphelper::SequenceAsHashMap::iterator it = objectsList.find(*pOldObjectName); + if (it != objectsList.end()) + objectsList.erase(it); + } + + objectsList[rObjectName] = uno::Any( aGrabBagAttribute ); + + // put objects list back into the grab bag + aGrabBag[sEmbeddingsPropName] = uno::Any(objectsList.getAsConstPropertyValueList()); + + // put grab bag back into the document + xDocProps->setPropertyValue("InteropGrabBag", uno::Any(aGrabBag.getAsConstPropertyValueList())); +} + bool OleObjectHelper::importOleObject( PropertyMap& rPropMap, const OleObjectInfo& rOleObject, const awt::Size& rObjSize ) { bool bRet = false; -- cgit