diff options
author | Grzegorz Araminowicz <grzegorz.araminowicz@collabora.com> | 2019-03-15 23:50:13 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-03-18 09:22:45 +0100 |
commit | 58278ea997b92d02177b6641794f49a4c7005130 (patch) | |
tree | 03ff74a3849bbe1f2e7f8f97f00e70327efc1875 /oox | |
parent | 38beb477db4e2213feb7c8bc85fd7df7d93ae89d (diff) |
PPTX import: save also OOXDrawing in InteropGrabBag
Change-Id: Ieaf341dd13e06046044f3523c3aad74476160402
Reviewed-on: https://gerrit.libreoffice.org/69328
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/drawingml/shape.cxx | 17 | ||||
-rw-r--r-- | oox/source/ppt/pptshapegroupcontext.cxx | 23 | ||||
-rw-r--r-- | oox/source/shape/ShapeContextHandler.cxx | 19 |
3 files changed, 32 insertions, 27 deletions
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 0c522bdfe63e..3c84428389a5 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -64,6 +64,7 @@ #include <com/sun/star/beans/XMultiPropertySet.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/xml/AttributeData.hpp> +#include <com/sun/star/xml/dom/XDocument.hpp> #include <com/sun/star/xml/sax/XFastSAXSerializable.hpp> #include <com/sun/star/drawing/HomogenMatrix3.hpp> #include <com/sun/star/drawing/TextVerticalAdjust.hpp> @@ -1388,6 +1389,22 @@ Reference< XShape > const & Shape::createAndInsert( return mxShape; } +void Shape::keepDiagramDrawing(XmlFilterBase& rFilterBase, const OUString& rFragmentPath) +{ + uno::Sequence<uno::Any> diagramDrawing(2); + // drawingValue[0] => dom, drawingValue[1] => Sequence of associated relationships + + sal_Int32 length = maDiagramDoms.getLength(); + maDiagramDoms.realloc(length + 1); + + diagramDrawing[0] <<= rFilterBase.importFragment(rFragmentPath); + diagramDrawing[1] <<= resolveRelationshipsOfTypeFromOfficeDoc(rFilterBase, rFragmentPath, "image"); + + beans::PropertyValue* pValue = maDiagramDoms.getArray(); + pValue[length].Name = "OOXDrawing"; + pValue[length].Value <<= diagramDrawing; +} + void Shape::keepDiagramCompatibilityInfo() { try diff --git a/oox/source/ppt/pptshapegroupcontext.cxx b/oox/source/ppt/pptshapegroupcontext.cxx index c53b69823c9b..c2e5f2f2c9b4 100644 --- a/oox/source/ppt/pptshapegroupcontext.cxx +++ b/oox/source/ppt/pptshapegroupcontext.cxx @@ -134,16 +134,19 @@ void PPTShapeGroupContext::importExtDrawings( ) if( pGraphicShape ) { for (auto const& extDrawing : pGraphicShape->getExtDrawings()) - { - getFilter().importFragment( new ExtDrawingFragmentHandler( getFilter(), getFragmentPathFromRelId(extDrawing), - mpSlidePersistPtr, - meShapeLocation, - mpGroupShapePtr, - pGraphicShape ) ); - // Apply font color imported from color fragment - if( pGraphicShape->getFontRefColorForNodes().isUsed() ) - applyFontRefColor(mpGroupShapePtr, pGraphicShape->getFontRefColorForNodes()); - } + { + OUString aFragmentPath = getFragmentPathFromRelId(extDrawing); + getFilter().importFragment( new ExtDrawingFragmentHandler( getFilter(), aFragmentPath, + mpSlidePersistPtr, + meShapeLocation, + mpGroupShapePtr, + pGraphicShape ) ); + pGraphicShape->keepDiagramDrawing(getFilter(), aFragmentPath); + + // Apply font color imported from color fragment + if( pGraphicShape->getFontRefColorForNodes().isUsed() ) + applyFontRefColor(mpGroupShapePtr, pGraphicShape->getFontRefColorForNodes()); + } pGraphicShape = oox::drawingml::ShapePtr( nullptr ); } } diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx index 4abd405c234e..32533eadf825 100644 --- a/oox/source/shape/ShapeContextHandler.cxx +++ b/oox/source/shape/ShapeContextHandler.cxx @@ -431,23 +431,8 @@ ShapeContextHandler::getShape() oox::drawingml::ShapePtr pShapePtr( new Shape( "com.sun.star.drawing.GroupShape" ) ); pShapePtr->setDiagramType(); mxFilterBase->importFragment(new ShapeDrawingFragmentHandler(*mxFilterBase, aFragmentPath, pShapePtr)); - - uno::Sequence<beans::PropertyValue> aValue(mpShape->getDiagramDoms()); - uno::Sequence < uno::Any > diagramDrawing(2); - // drawingValue[0] => dom, drawingValue[1] => Sequence of associated relationships - - sal_Int32 length = aValue.getLength(); - aValue.realloc(length+1); - - diagramDrawing[0] <<= mxFilterBase->importFragment( aFragmentPath ); - diagramDrawing[1] <<= pShapePtr->resolveRelationshipsOfTypeFromOfficeDoc( - *mxFilterBase, aFragmentPath, "image" ); - - beans::PropertyValue* pValue = aValue.getArray(); - pValue[length].Name = "OOXDrawing"; - pValue[length].Value <<= diagramDrawing; - - pShapePtr->setDiagramDoms( aValue ); + pShapePtr->setDiagramDoms(mpShape->getDiagramDoms()); + pShapePtr->keepDiagramDrawing(*mxFilterBase, aFragmentPath); pShapePtr->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix, pShapePtr->getFillProperties() ); xResult = pShapePtr->getXShape(); |