[Libreoffice-commits] .: oox/source

Miklos Vajna vmiklos at kemper.freedesktop.org
Wed May 30 00:59:38 PDT 2012


 oox/source/shape/ShapeContextHandler.cxx |   26 ++++++++++++++++++++++++++
 oox/source/shape/ShapeContextHandler.hxx |    2 ++
 2 files changed, 28 insertions(+)

New commits:
commit 467f335161d0d098c167612fb530f3abe3b2cef4
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Wed May 30 09:56:58 2012 +0200

    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

diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx
index 3234238..0643603 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 df9c398..95aee66 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();
 };
 


More information about the Libreoffice-commits mailing list