diff options
author | Grzegorz Araminowicz <grzegorz.araminowicz@collabora.com> | 2019-03-15 23:50:13 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-05-21 09:30:23 +0200 |
commit | cdb764a6367daaa4842be57d144275a87c2802b4 (patch) | |
tree | 5f995bba3487896f0c2e6349f56743a2aafdc5f4 /oox | |
parent | f8586c223f07ddff4bba5d5c694cee33ac811412 (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>
Reviewed-on: https://gerrit.libreoffice.org/72473
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/drawingml/shape.cxx | 17 | ||||
-rw-r--r-- | oox/source/ppt/pptshapegroupcontext.cxx | 25 | ||||
-rw-r--r-- | oox/source/shape/ShapeContextHandler.cxx | 19 |
3 files changed, 33 insertions, 28 deletions
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 3e04f3b7494e..4848f4086e02 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> @@ -1394,6 +1395,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 9a775655518f..6535e12d3f81 100644 --- a/oox/source/ppt/pptshapegroupcontext.cxx +++ b/oox/source/ppt/pptshapegroupcontext.cxx @@ -148,17 +148,20 @@ 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()); - } - pGraphicShape = oox::drawingml::ShapePtr( nullptr ); + { + 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 b80af12ac15e..2747572f0479 100644 --- a/oox/source/shape/ShapeContextHandler.cxx +++ b/oox/source/shape/ShapeContextHandler.cxx @@ -425,23 +425,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(); |