diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-05-30 09:56:58 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-05-30 09:59:45 +0200 |
commit | 467f335161d0d098c167612fb530f3abe3b2cef4 (patch) | |
tree | 8a460cc6d98235d95f62f0f6bdd5f463cb146246 /oox/source/shape | |
parent | 6c1107ad8fd6375ed02906e8700c24b471df2d97 (diff) |
oox: initial smartart text is imported into Writer, take two
The original commit (8c6fb76c2cc24c336a28702b5f7f31cb5964129a) broke the
sw_subsequent_ooxmltok test, as it threated getDiagramShapeContext() a
const method, but that's not true. Check mxDiagramShapeContext directly
instead.
Change-Id: Idd730787be41cc11e6c1fc962da60f05e024ee84
Diffstat (limited to 'oox/source/shape')
-rw-r--r-- | oox/source/shape/ShapeContextHandler.cxx | 26 | ||||
-rw-r--r-- | oox/source/shape/ShapeContextHandler.hxx | 2 |
2 files changed, 28 insertions, 0 deletions
diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx index 32342380e2f6..064360303427 100644 --- a/oox/source/shape/ShapeContextHandler.cxx +++ b/oox/source/shape/ShapeContextHandler.cxx @@ -30,6 +30,7 @@ #include "oox/vml/vmldrawingfragment.hxx" #include "oox/vml/vmlshape.hxx" #include "oox/vml/vmlshapecontainer.hxx" +#include "oox/drawingml/diagram/diagram.hxx" namespace oox { namespace shape { @@ -120,6 +121,19 @@ ShapeContextHandler::getDrawingShapeContext() } uno::Reference<xml::sax::XFastContextHandler> +ShapeContextHandler::getDiagramShapeContext() +{ + if (!mxDiagramShapeContext.is()) + { + FragmentHandlerRef rFragmentHandler(new ShapeFragmentHandler(*mxFilterBase, msRelationFragmentPath)); + mpShape.reset(new Shape()); + mxDiagramShapeContext.set(new DiagramGraphicDataContext(*rFragmentHandler, mpShape)); + } + + return mxDiagramShapeContext; +} + +uno::Reference<xml::sax::XFastContextHandler> ShapeContextHandler::getContextHandler() { uno::Reference<xml::sax::XFastContextHandler> xResult; @@ -130,6 +144,9 @@ ShapeContextHandler::getContextHandler() case NMSP_vml: xResult.set(getDrawingShapeContext()); break; + case NMSP_dmlDiagram: + xResult.set(getDiagramShapeContext()); + break; default: xResult.set(getGraphicShapeContext(mnStartToken)); break; @@ -154,6 +171,9 @@ void SAL_CALL ShapeContextHandler::startFastElement mpThemePtr.reset(new Theme()); + if (Element == DGM_TOKEN(relIds)) + createFastChildContext(Element, Attribs); + uno::Reference<XFastContextHandler> xContextHandler(getContextHandler()); if (xContextHandler.is()) @@ -247,6 +267,12 @@ ShapeContextHandler::getShape() throw (uno::RuntimeException) if( const ::oox::vml::ShapeBase* pShape = mpDrawing->getShapes().takeLastShape() ) xResult = pShape->convertAndInsert( xShapes ); } + else if (mxDiagramShapeContext.is()) + { + basegfx::B2DHomMatrix aMatrix; + mpShape->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix ); + xResult = mpShape->getXShape(); + } else if (mpShape.get() != NULL) { basegfx::B2DHomMatrix aTransformation; diff --git a/oox/source/shape/ShapeContextHandler.hxx b/oox/source/shape/ShapeContextHandler.hxx index df9c3987a2c9..95aee66b0564 100644 --- a/oox/source/shape/ShapeContextHandler.hxx +++ b/oox/source/shape/ShapeContextHandler.hxx @@ -159,6 +159,7 @@ private: GraphicShapeContextPtr; css::uno::Reference<XFastContextHandler> mxDrawingFragmentHandler; css::uno::Reference<XFastContextHandler> mxGraphicShapeContext; + css::uno::Reference<XFastContextHandler> mxDiagramShapeContext; core::XmlFilterRef mxFilterBase; drawingml::ThemePtr mpThemePtr; @@ -168,6 +169,7 @@ private: css::uno::Reference<XFastContextHandler> getGraphicShapeContext(::sal_Int32 Element); css::uno::Reference<XFastContextHandler> getDrawingShapeContext(); + css::uno::Reference<XFastContextHandler> getDiagramShapeContext(); css::uno::Reference<XFastContextHandler> getContextHandler(); }; |