Kaydet (Commit) fdf4aaa3 authored tarafından Miklos Vajna's avatar Miklos Vajna

tdf#124398 DOCX drawingML import: handle charts in group shapes

Regression from commit 8c73b16f (DOCX
import: declare wpg as a supported feature, 2013-12-05), the problem was
that <wpg:graphicFrame> did not forward to to the relevant oox context,
and also Writer had no idea how to create a
com.sun.star.drawing.OLE2Shape. Fix the later by using the same service
name that's in use for the non-groupshape case.

Change-Id: Id3536854da7c1f01525bb38d801496ecebd4c161
Reviewed-on: https://gerrit.libreoffice.org/71505Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
üst a5c0cf41
......@@ -220,7 +220,10 @@ ChartShapeInfo& Shape::setChartType( bool bEmbedShapes )
{
OSL_ENSURE( meFrameType == FRAMETYPE_GENERIC, "Shape::setChartType - multiple frame types" );
meFrameType = FRAMETYPE_CHART;
msServiceName = "com.sun.star.drawing.OLE2Shape";
if (mbWps)
msServiceName = "com.sun.star.drawing.temporaryForXMLImportOLE2Shape";
else
msServiceName = "com.sun.star.drawing.OLE2Shape";
mxChartShapeInfo.reset( new ChartShapeInfo( bEmbedShapes ) );
return *mxChartShapeInfo;
}
......
......@@ -61,7 +61,11 @@ oox::core::ContextHandlerRef WpgContext::onCreateContext(sal_Int32 nElementToken
return new oox::drawingml::ShapeGroupContext(*this, mpShape, std::make_shared<oox::drawingml::Shape>("com.sun.star.drawing.GroupShape"));
}
case XML_graphicFrame:
break;
{
auto pShape = std::make_shared<oox::drawingml::Shape>("com.sun.star.drawing.GraphicObjectShape");
pShape->setWps(true);
return new oox::drawingml::GraphicalObjectFrameContext(*this, mpShape, pShape, /*bEmbedShapesInChart=*/true);
}
default:
SAL_WARN("oox", "WpgContext::createFastChildContext: unhandled element: " << getBaseToken(nElementToken));
break;
......
......@@ -217,6 +217,18 @@ DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx")
// and as result only one page should be generated.
DECLARE_OOXMLIMPORT_TEST(testTdf113182, "tdf113182.docx") { CPPUNIT_ASSERT_EQUAL(1, getPages()); }
DECLARE_OOXMLIMPORT_TEST(testTdf124398, "tdf124398.docx")
{
uno::Reference<container::XIndexAccess> xGroup(getShape(1), uno::UNO_QUERY);
CPPUNIT_ASSERT(xGroup.is());
// Without the accompanying fix in place, this test would have failed with 'Expected: 2; Actual:
// 1', i.e. the chart children of the group shape was lost.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xGroup->getCount());
uno::Reference<drawing::XShapeDescriptor> xShape(xGroup->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.OLE2Shape"), xShape->getShapeType());
}
DECLARE_OOXMLIMPORT_TEST(testTdf113946, "tdf113946.docx")
{
OUString aTop = parseDump("/root/page/body/txt/anchored/SwAnchoredDrawObject/bounds", "top");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment