summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorGrzegorz Araminowicz <grzegorz.araminowicz@collabora.com>2019-03-15 23:50:13 +0100
committerMiklos Vajna <vmiklos@collabora.com>2019-05-21 09:30:23 +0200
commitcdb764a6367daaa4842be57d144275a87c2802b4 (patch)
tree5f995bba3487896f0c2e6349f56743a2aafdc5f4 /oox
parentf8586c223f07ddff4bba5d5c694cee33ac811412 (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.cxx17
-rw-r--r--oox/source/ppt/pptshapegroupcontext.cxx25
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx19
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();