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-03-18 09:22:45 +0100
commit58278ea997b92d02177b6641794f49a4c7005130 (patch)
tree03ff74a3849bbe1f2e7f8f97f00e70327efc1875 /oox
parent38beb477db4e2213feb7c8bc85fd7df7d93ae89d (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.cxx17
-rw-r--r--oox/source/ppt/pptshapegroupcontext.cxx23
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx19
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();