summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-05-30 09:56:58 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-05-30 09:59:45 +0200
commit467f335161d0d098c167612fb530f3abe3b2cef4 (patch)
tree8a460cc6d98235d95f62f0f6bdd5f463cb146246 /oox
parent6c1107ad8fd6375ed02906e8700c24b471df2d97 (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')
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx26
-rw-r--r--oox/source/shape/ShapeContextHandler.hxx2
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();
};