[Libreoffice-commits] .: oox/inc oox/Library_oox.mk oox/source sc/source sd/source sw/source

Thorsten Behrens thorsten at kemper.freedesktop.org
Fri Aug 12 07:56:47 PDT 2011


 oox/Library_oox.mk                                        |    4 
 oox/inc/oox/core/fastparser.hxx                           |    5 
 oox/inc/oox/core/filterbase.hxx                           |    5 
 oox/inc/oox/core/xmlfilterbase.hxx                        |   29 
 oox/inc/oox/drawingml/chart/converterbase.hxx             |    2 
 oox/inc/oox/drawingml/customshapeproperties.hxx           |    1 
 oox/inc/oox/drawingml/diagram/datamodelcontext.hxx        |   57 -
 oox/inc/oox/drawingml/diagram/diagram.hxx                 |  242 ----
 oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx  |  103 --
 oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx      |  212 ----
 oox/inc/oox/drawingml/drawingmltypes.hxx                  |    3 
 oox/inc/oox/drawingml/graphicshapecontext.hxx             |    5 
 oox/inc/oox/drawingml/scene3dcontext.hxx                  |   56 +
 oox/inc/oox/drawingml/shape.hxx                           |   28 
 oox/inc/oox/drawingml/shape3dproperties.hxx               |  135 ++
 oox/inc/oox/drawingml/theme.hxx                           |    8 
 oox/inc/oox/ppt/dgmimport.hxx                             |   71 +
 oox/inc/oox/ppt/dgmlayout.hxx                             |   72 +
 oox/inc/oox/ppt/pptimport.hxx                             |    2 
 oox/inc/oox/xls/excelfilter.hxx                           |    2 
 oox/inc/oox/xls/workbookhelper.hxx                        |    2 
 oox/source/core/fastparser.cxx                            |    5 
 oox/source/core/filterbase.cxx                            |    9 
 oox/source/core/services.cxx                              |    4 
 oox/source/core/xmlfilterbase.cxx                         |  174 ++-
 oox/source/drawingml/chart/chartspaceconverter.cxx        |    5 
 oox/source/drawingml/chart/converterbase.cxx              |    4 
 oox/source/drawingml/chart/datasourceconverter.cxx        |   13 
 oox/source/drawingml/clrscheme.cxx                        |    2 
 oox/source/drawingml/color.cxx                            |    1 
 oox/source/drawingml/customshapegeometry.cxx              |    6 
 oox/source/drawingml/diagram/constraintlistcontext.cxx    |  101 ++
 oox/source/drawingml/diagram/constraintlistcontext.hxx    |   54 +
 oox/source/drawingml/diagram/datamodelcontext.cxx         |  237 +++-
 oox/source/drawingml/diagram/datamodelcontext.hxx         |   56 +
 oox/source/drawingml/diagram/diagram.cxx                  |  518 +++++++---
 oox/source/drawingml/diagram/diagram.hxx                  |  319 ++++++
 oox/source/drawingml/diagram/diagramdefinitioncontext.cxx |   13 
 oox/source/drawingml/diagram/diagramdefinitioncontext.hxx |    2 
 oox/source/drawingml/diagram/diagramfragmenthandler.cxx   |  177 ++-
 oox/source/drawingml/diagram/diagramfragmenthandler.hxx   |  115 ++
 oox/source/drawingml/diagram/diagramlayoutatoms.cxx       |  689 +++++++++++++-
 oox/source/drawingml/diagram/diagramlayoutatoms.hxx       |  318 ++++++
 oox/source/drawingml/diagram/layoutnodecontext.cxx        |  128 +-
 oox/source/drawingml/diagram/layoutnodecontext.hxx        |    3 
 oox/source/drawingml/drawingmltypes.cxx                   |    4 
 oox/source/drawingml/fillproperties.cxx                   |    3 
 oox/source/drawingml/graphicshapecontext.cxx              |   63 -
 oox/source/drawingml/lineproperties.cxx                   |    5 
 oox/source/drawingml/scene3dcontext.cxx                   |  189 +++
 oox/source/drawingml/shape.cxx                            |   48 
 oox/source/drawingml/shape3dproperties.cxx                |   66 +
 oox/source/drawingml/shapepropertiescontext.cxx           |    5 
 oox/source/drawingml/textparagraph.cxx                    |    9 
 oox/source/drawingml/textparagraphproperties.cxx          |    1 
 oox/source/helper/storagebase.cxx                         |   20 
 oox/source/ppt/dgmimport.cxx                              |  140 ++
 oox/source/ppt/dgmlayout.cxx                              |  198 ++++
 oox/source/ppt/pptimport.cxx                              |    4 
 oox/source/ppt/presentationfragmenthandler.cxx            |   13 
 oox/source/shape/ShapeFilterBase.cxx                      |    4 
 oox/source/shape/ShapeFilterBase.hxx                      |    2 
 oox/source/xls/excelfilter.cxx                            |    2 
 oox/source/xls/workbookhelper.cxx                         |    4 
 sc/source/filter/excel/xestream.cxx                       |    4 
 sc/source/filter/inc/xestream.hxx                         |    2 
 sd/source/filter/eppt/epptooxml.hxx                       |    2 
 sw/source/filter/ww8/docxexportfilter.hxx                 |    2 
 68 files changed, 3711 insertions(+), 1076 deletions(-)

New commits:
commit a81327ff2faaf21c22f1a902bea170942d5207e6
Author: Thorsten Behrens <tbehrens at novell.com>
Date:   Fri Aug 12 15:53:12 2011 +0200

    Import SmartArt graphics to Impress
    
    Extending the existing functionality to
     * properly parse and model the declarative shapes
     * provide means for round-tripping, and re-rendering the
       shapes from xml snippets
     * implements the layouts composite, cycle, linear, and the
       special 'text' node
    
    This is based on the initial smartart work from hfiguiere at novell.com

diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index 42f16c9..63d9c63 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -125,6 +125,7 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
     oox/source/drawingml/connectorshapecontext \
     oox/source/drawingml/customshapegeometry \
     oox/source/drawingml/customshapeproperties \
+    oox/source/drawingml/diagram/constraintlistcontext \
     oox/source/drawingml/diagram/datamodelcontext \
     oox/source/drawingml/diagram/diagram \
     oox/source/drawingml/diagram/diagramdefinitioncontext \
@@ -143,6 +144,7 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
     oox/source/drawingml/objectdefaultcontext \
     oox/source/drawingml/shapecontext \
     oox/source/drawingml/shape \
+    oox/source/drawingml/shape3dproperties \
     oox/source/drawingml/shapegroupcontext \
     oox/source/drawingml/shapepropertiescontext \
     oox/source/drawingml/shapepropertymap \
@@ -230,6 +232,8 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
     oox/source/ppt/commontimenodecontext \
     oox/source/ppt/conditioncontext \
     oox/source/ppt/customshowlistcontext \
+    oox/source/ppt/dgmimport \
+    oox/source/ppt/dgmlayout \
     oox/source/ppt/headerfootercontext \
     oox/source/ppt/layoutfragmenthandler \
     oox/source/ppt/pptfilterhelpers \
diff --git a/oox/inc/oox/core/fastparser.hxx b/oox/inc/oox/core/fastparser.hxx
index 01dc2f0..3d13a49 100644
--- a/oox/inc/oox/core/fastparser.hxx
+++ b/oox/inc/oox/core/fastparser.hxx
@@ -84,9 +84,14 @@ public:
 
      sal_Int32 getNamespaceId( const ::rtl::OUString& aUrl );
 
+    ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >
+               getTokenHandler() const { return mxTokenHandler; }
+
 private:
     ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastParser >
                         mxParser;
+    ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >
+                        mxTokenHandler;
     const NamespaceMap& mrNamespaceMap;
 };
 
diff --git a/oox/inc/oox/core/filterbase.hxx b/oox/inc/oox/core/filterbase.hxx
index 4a58cc5..cbc9379 100644
--- a/oox/inc/oox/core/filterbase.hxx
+++ b/oox/inc/oox/core/filterbase.hxx
@@ -49,6 +49,7 @@ namespace com { namespace sun { namespace star {
     namespace awt { struct DeviceInfo; }
     namespace frame { class XFrame; }
     namespace frame { class XModel; }
+    namespace drawing { class XShape; }
     namespace graphic { class XGraphic; }
     namespace io { class XInputStream; }
     namespace io { class XOutputStream; }
@@ -147,6 +148,10 @@ public:
     const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >&
                         getTargetFrame() const;
 
+    /// Returns the parent shape to load into (if any)
+    const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >&
+                        getParentShape() const;
+
     /** Returns the status indicator (may be null). */
     const ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator >&
                         getStatusIndicator() const;
diff --git a/oox/inc/oox/core/xmlfilterbase.hxx b/oox/inc/oox/core/xmlfilterbase.hxx
index 17f8367..0e015da 100644
--- a/oox/inc/oox/core/xmlfilterbase.hxx
+++ b/oox/inc/oox/core/xmlfilterbase.hxx
@@ -43,8 +43,10 @@
 namespace com { namespace sun { namespace star {
     namespace container { class XNameContainer; }
     namespace document { class XDocumentProperties; }
+    namespace xml { namespace dom { class XDocument; } }
     namespace xml { namespace sax { class XLocator; } }
     namespace xml { namespace sax { class XFastDocumentHandler; } }
+    namespace xml { namespace sax { class XFastSAXSerializable; } }
 } } }
 
 namespace oox {
@@ -95,7 +97,7 @@ public:
 
     /** Has to be implemented by each filter, returns a filter-specific chart
         converter object, that should be global per imported document. */
-    virtual ::oox::drawingml::chart::ChartConverter& getChartConverter() = 0;
+    virtual ::oox::drawingml::chart::ChartConverter* getChartConverter() = 0;
 
     /** Has to be implemented by each filter to return the table style list. */
     virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles() = 0;
@@ -113,6 +115,31 @@ public:
      */
     bool                importFragment( const ::rtl::Reference< FragmentHandler >& rxHandler );
 
+    /** Imports a fragment into an xml::dom::XDocument.
+
+        @param rFragmentPath path to fragment
+
+        @return a non-empty reference to the XDocument, if the
+        fragment could be imported.
+     */
+    ::com::sun::star::uno::Reference<
+       ::com::sun::star::xml::dom::XDocument> importFragment( const ::rtl::OUString& rFragmentPath );
+
+    /** Imports a fragment from an xml::dom::XDocument using the
+        passed fragment handler
+
+        @param rxHandler fragment handler; path to fragment is
+        ignored, input source is the rxSerializer
+
+        @param rxSerializer usually retrieved from a
+        xml::dom::XDocument, will get serialized into rxHandler
+
+        @return true, if the fragment could be imported.
+     */
+    bool importFragment( const ::rtl::Reference< FragmentHandler >& rxHandler,
+                         const ::com::sun::star::uno::Reference<
+                               ::com::sun::star::xml::sax::XFastSAXSerializable >& rxSerializer );
+
     /** Imports the relations fragment associated with the specified fragment.
 
         @return  The relations collection of the specified fragment.
diff --git a/oox/inc/oox/drawingml/chart/converterbase.hxx b/oox/inc/oox/drawingml/chart/converterbase.hxx
index 3c50680..ba7566e 100644
--- a/oox/inc/oox/drawingml/chart/converterbase.hxx
+++ b/oox/inc/oox/drawingml/chart/converterbase.hxx
@@ -82,7 +82,7 @@ protected:
     /** Returns the filter object of the imported/exported document. */
     ::oox::core::XmlFilterBase& getFilter() const;
     /** Returns the chart converter. */
-    ChartConverter&     getChartConverter() const;
+    ChartConverter*     getChartConverter() const;
     /** Returns the API chart document model. */
     ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >
                         getChartDocument() const;
diff --git a/oox/inc/oox/drawingml/customshapeproperties.hxx b/oox/inc/oox/drawingml/customshapeproperties.hxx
index 112a337..413b2a7 100644
--- a/oox/inc/oox/drawingml/customshapeproperties.hxx
+++ b/oox/inc/oox/drawingml/customshapeproperties.hxx
@@ -123,6 +123,7 @@ public:
             const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > & xPropSet,
                         const ::com::sun::star::uno::Reference < ::com::sun::star::drawing::XShape > & xShape) const;
 
+    const rtl::OUString& getShapePresetType() const { return maShapePresetType; }
     void setShapePresetType( const rtl::OUString& rShapePresetType ){ maShapePresetType = rShapePresetType; };
 
     std::vector< CustomShapeGuide >&    getAdjustmentGuideList(){ return maAdjustmentGuideList; };
diff --git a/oox/inc/oox/drawingml/diagram/datamodelcontext.hxx b/oox/inc/oox/drawingml/diagram/datamodelcontext.hxx
deleted file mode 100644
index 9e78a88..0000000
--- a/oox/inc/oox/drawingml/diagram/datamodelcontext.hxx
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-
-#ifndef OOX_DRAWINGML_SHAPECONTEXT_HXX
-#define OOX_DRAWINGML_SHAPECONTEXT_HXX
-
-#include <com/sun/star/drawing/XShapes.hpp>
-
-#include "oox/core/contexthandler.hxx"
-#include "oox/drawingml/diagram/diagram.hxx"
-
-namespace oox { namespace drawingml {
-
-// CT_DataModel
-class DataModelContext : public ::oox::core::ContextHandler
-{
-public:
-    DataModelContext( ::oox::core::ContextHandler& rParent, const DiagramDataPtr & pDataModelPtr );
-    virtual ~DataModelContext();
-
-    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-
-protected:
-    DiagramDataPtr mpDataModel;
-};
-
-} }
-
-#endif  //  OOX_DRAWINGML_SHAPEGROUPCONTEXT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/inc/oox/drawingml/diagram/diagram.hxx b/oox/inc/oox/drawingml/diagram/diagram.hxx
index f0b77c4..9b75667 100644
--- a/oox/inc/oox/drawingml/diagram/diagram.hxx
+++ b/oox/inc/oox/drawingml/diagram/diagram.hxx
@@ -26,232 +26,40 @@
  *
  ************************************************************************/
 
-
-
 #ifndef OOX_DRAWINGML_DIAGRAM_HXX
 #define OOX_DRAWINGML_DIAGRAM_HXX
 
-#include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
+#include <rtl/ustring.hxx>
 #include "oox/drawingml/shape.hxx"
-#include "oox/drawingml/diagram/diagramlayoutatoms.hxx"
-
-namespace oox { namespace drawingml {
-
-namespace dgm {
+#include "oox/core/xmlfilterbase.hxx"
 
-/** A Connection
- */
-class Connection
-{
-public:
-    Connection()
-        : mnType( 0 )
-        , mnSourceOrder( 0 )
-        , mnDestOrder( 0 )
-        {
-        }
+#include <com/sun/star/xml/dom/XDocument.hpp>
 
-    void dump();
-
-    sal_Int32 mnType;
-    ::rtl::OUString msModelId;
-    ::rtl::OUString msSourceId;
-    ::rtl::OUString msDestId;
-    ::rtl::OUString msParTransId;
-    ::rtl::OUString msPresId;
-    ::rtl::OUString msSibTransId;
-    sal_Int32 mnSourceOrder;
-    sal_Int32 mnDestOrder;
-
-};
-
-typedef boost::shared_ptr< Connection > ConnectionPtr;
-typedef std::vector< ConnectionPtr > Connections;
+namespace oox { namespace drawingml {
 
-class Point;
+/** load diagram data, and put resulting graphic into shape
 
-typedef boost::shared_ptr< Point > PointPtr;
-typedef std::vector< PointPtr >      Points;
-/** A point
+    This method loads the diagram data fragments from the given paths,
+    generate and layout the shapes, and push it as children into the
+    referenced shape.
  */
-class Point
-{
-public:
-    Point();
-    ShapePtr & getShape( )
-        { return mpShape; }
-
-    void setCnxId( const ::rtl::OUString & sCnxId )
-        { msCnxId = sCnxId; }
-    void setModelId( const ::rtl::OUString & sModelId );
-    const ::rtl::OUString & getModelId() const
-        { return msModelId; }
-    void setType( const sal_Int32 nType )
-        { mnType = nType; }
-    sal_Int32 getType() const
-        { return mnType; }
-
-    void dump();
-private:
-    ShapePtr        mpShape;
-    ::rtl::OUString msCnxId;
-    ::rtl::OUString msModelId;
-    sal_Int32       mnType;
-};
-
-
-class PointsTree;
-typedef boost::shared_ptr< PointsTree > PointsTreePtr;
-
-/** a points tree node */
-class PointsTree
-    : public boost::enable_shared_from_this< PointsTree >
-{
-public:
-    typedef std::vector< PointsTreePtr > Childrens;
-    PointsTree()
-        {};
-    PointsTree( const PointPtr & pPoint )
-        : mpNode( pPoint )
-        { }
-    bool addChild( const PointsTreePtr & pChild );
-    const PointPtr & getPoint() const
-        { return mpNode; }
-    PointsTreePtr getParent() const;
-    Childrens::const_iterator beginChild() const
-        { return maChildrens.begin(); }
-    Childrens::const_iterator endChild() const
-        { return maChildrens.end(); }
-private:
-    PointPtr                           mpNode;
-    boost::weak_ptr< PointsTree >      mpParent;
-    Childrens       maChildrens;
-};
-
-}
-
-////////////////////
-
-class DiagramData
-{
-public:
-
-    DiagramData();
-    FillPropertiesPtr & getFillProperties()
-        { return mpFillProperties; }
-    dgm::Connections & getConnections()
-        { return maConnections; }
-    dgm::Points & getPoints()
-        { return maPoints; }
-    void dump();
-private:
-    FillPropertiesPtr   mpFillProperties;
-    dgm::Connections    maConnections;
-    dgm::Points         maPoints;
-};
-
-typedef boost::shared_ptr< DiagramData > DiagramDataPtr;
-
-
-
-////////////////////
-
-class DiagramLayout
-{
-public:
-    void setDefStyle( const ::rtl::OUString & sDefStyle )
-        { msDefStyle = sDefStyle; }
-    void setMinVer( const ::rtl::OUString & sMinVer )
-        { msMinVer = sMinVer; }
-    void setUniqueId( const ::rtl::OUString & sUniqueId )
-        { msUniqueId = sUniqueId; }
-    const ::rtl::OUString & getUniqueId()
-        { return msUniqueId; }
-    void setTitle( const ::rtl::OUString & sTitle )
-        { msTitle = sTitle; }
-    void setDesc( const ::rtl::OUString & sDesc )
-        { msDesc = sDesc; }
-
-    LayoutNodePtr & getNode()
-        { return mpNode; }
-    const LayoutNodePtr & getNode() const
-        { return mpNode; }
-    DiagramDataPtr & getSampData()
-        { return mpSampData; }
-    const DiagramDataPtr & getSampData() const
-        { return mpSampData; }
-    DiagramDataPtr & getStyleData()
-        { return mpStyleData; }
-    const DiagramDataPtr & getStyleData() const
-        { return mpStyleData; }
-
-    void layout( const dgm::PointsTreePtr & pTree, const com::sun::star::awt::Point & pt );
-private:
-    ::rtl::OUString msDefStyle;
-    ::rtl::OUString msMinVer;
-    ::rtl::OUString msUniqueId;
-
-    ::rtl::OUString msTitle;
-    ::rtl::OUString msDesc;
-    LayoutNodePtr  mpNode;
-    DiagramDataPtr mpSampData;
-    DiagramDataPtr mpStyleData;
-    // TODO
-    // catLst
-    // clrData
-};
-
-typedef boost::shared_ptr< DiagramLayout > DiagramLayoutPtr;
-
-///////////////////////
-
-class DiagramQStyles
-{
-
-};
-
-typedef boost::shared_ptr< DiagramQStyles > DiagramQStylesPtr;
-
-///////////////////////
-
-class DiagramColors
-{
-
-};
-
-typedef boost::shared_ptr< DiagramColors > DiagramColorsPtr;
-
-///////////////////////
-
-class Diagram
-{
-public:
-    void setData( const DiagramDataPtr & );
-    void setLayout( const DiagramLayoutPtr & );
-    DiagramLayoutPtr getLayout() const
-        {
-            return mpLayout;
-        }
-    void setQStyles( const DiagramQStylesPtr & );
-    void setColors( const DiagramColorsPtr & );
-
-    void addTo( const ShapePtr & pShape );
-    ::rtl::OUString getLayoutId() const;
-private:
-    void build( );
-    DiagramDataPtr    mpData;
-    DiagramLayoutPtr  mpLayout;
-    DiagramQStylesPtr mpQStyles;
-    DiagramColorsPtr  mpColors;
-    std::map< ::rtl::OUString, ShapePtr > maShapeMap;
-    dgm::PointsTreePtr  mpRoot;
-};
-
-
-typedef boost::shared_ptr< Diagram > DiagramPtr;
-
+void loadDiagram( const ShapePtr& pShape,
+                  core::XmlFilterBase& rFilter,
+                  const ::rtl::OUString& rDataModelPath,
+                  const ::rtl::OUString& rLayoutPath,
+                  const ::rtl::OUString& rQStylePath,
+                  const ::rtl::OUString& rColorStylePath );
+
+void loadDiagram( const ShapePtr& pShape,
+                  core::XmlFilterBase& rFilter,
+                  const ::com::sun::star::uno::Reference<
+                     ::com::sun::star::xml::dom::XDocument>& rXDataModelDom,
+                  const ::com::sun::star::uno::Reference<
+                     ::com::sun::star::xml::dom::XDocument>& rXLayoutDom,
+                  const ::com::sun::star::uno::Reference<
+                     ::com::sun::star::xml::dom::XDocument>& rXQStyleDom,
+                  const ::com::sun::star::uno::Reference<
+                     ::com::sun::star::xml::dom::XDocument>& rXColorStyleDom );
 } }
 
 #endif
diff --git a/oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx b/oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx
deleted file mode 100644
index 6186efb..0000000
--- a/oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-
-#ifndef OOX_DRAWINGML_DIAGRAMFRAGMENTHANDLER
-#define OOX_DRAWINGML_DIAGRAMFRAGMENTHANDLER
-
-#include "oox/core/fragmenthandler.hxx"
-#include "oox/drawingml/diagram/diagram.hxx"
-
-namespace oox { namespace drawingml {
-
-
-class DiagramDataFragmentHandler : public ::oox::core::FragmentHandler
-{
-public:
-    DiagramDataFragmentHandler( oox::core::XmlFilterBase& rFilter, const ::rtl::OUString& rFragmentPath, const DiagramDataPtr pDataPtr ) throw();
-    virtual ~DiagramDataFragmentHandler() throw();
-
-    virtual void SAL_CALL endDocument() throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-
-private:
-
-    DiagramDataPtr  mpDataPtr;
-};
-
-
-
-class DiagramLayoutFragmentHandler : public ::oox::core::FragmentHandler
-{
-public:
-    DiagramLayoutFragmentHandler( oox::core::XmlFilterBase& rFilter, const ::rtl::OUString& rFragmentPath, const DiagramLayoutPtr pDataPtr ) throw();
-    virtual ~DiagramLayoutFragmentHandler() throw();
-
-    virtual void SAL_CALL endDocument() throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-
-private:
-
-    DiagramLayoutPtr    mpDataPtr;
-};
-
-class DiagramQStylesFragmentHandler : public ::oox::core::FragmentHandler
-{
-public:
-    DiagramQStylesFragmentHandler( oox::core::XmlFilterBase& rFilter, const ::rtl::OUString& rFragmentPath, const DiagramQStylesPtr pDataPtr ) throw();
-    virtual ~DiagramQStylesFragmentHandler() throw();
-
-    virtual void SAL_CALL endDocument() throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-
-private:
-
-    DiagramQStylesPtr   mpDataPtr;
-};
-
-
-class DiagramColorsFragmentHandler : public ::oox::core::FragmentHandler
-{
-public:
-    DiagramColorsFragmentHandler( ::oox::core::XmlFilterBase& rFilter, const ::rtl::OUString& rFragmentPath, const DiagramColorsPtr pDataPtr ) throw();
-    virtual ~DiagramColorsFragmentHandler() throw();
-
-    virtual void SAL_CALL endDocument() throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
-
-private:
-
-    DiagramColorsPtr    mpDataPtr;
-};
-
-} }
-
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx b/oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx
deleted file mode 100644
index 44a46a8..0000000
--- a/oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx
+++ /dev/null
@@ -1,212 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-
-
-
-
-#ifndef OOX_DRAWINGML_DIAGRAMLAYOUTATOMS_HXX
-#define OOX_DRAWINGML_DIAGRAMLAYOUTATOMS_HXX
-
-#include <map>
-#include <string>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/array.hpp>
-
-#include <com/sun/star/uno/Any.hxx>
-#include <com/sun/star/xml/sax/XFastAttributeList.hpp>
-
-#include "oox/drawingml/shape.hxx"
-
-
-namespace oox { namespace drawingml {
-
-
-// AG_IteratorAttributes
-class IteratorAttr
-{
-public:
-    IteratorAttr();
-
-    // not sure this belong here, but wth
-    void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
-
-private:
-    sal_Int32 mnAxis;
-    sal_Int32 mnCnt;
-    sal_Bool  mbHideLastTrans;
-    sal_Int32 mnPtType;
-    sal_Int32 mnSt;
-    sal_Int32 mnStep;
-};
-
-class ConditionAttr
-{
-public:
-    ConditionAttr();
-
-    // not sure this belong here, but wth
-    void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
-
-private:
-    sal_Int32 mnFunc;
-    sal_Int32 mnArg;
-    sal_Int32 mnOp;
-    ::rtl::OUString msVal;
-};
-
-class LayoutAtom;
-
-typedef boost::shared_ptr< LayoutAtom > LayoutAtomPtr;
-
-/** abstract Atom for the layout */
-class LayoutAtom
-{
-public:
-    virtual ~LayoutAtom()
-        {}
-    // TODO change signature to the proper one
-    virtual void processAtom() = 0;
-    void setName( const ::rtl::OUString & sName )
-        { msName = sName; }
-    void addChild( const LayoutAtomPtr & pNode )
-        { mpChildNodes.push_back( pNode ); }
-
-    // dump for debug
-    virtual void dump(int level = 0);
-protected:
-    std::vector< LayoutAtomPtr > mpChildNodes;
-    ::rtl::OUString msName;
-};
-
-class AlgAtom
-    : public LayoutAtom
-{
-public:
-    virtual ~AlgAtom()
-        {}
-    typedef std::map< std::string, ::com::sun::star::uno::Any > ParamMap;
-
-    virtual void processAtom()
-        {}
-private:
-    ParamMap mParams;
-};
-
-
-class ForEachAtom
-    : public LayoutAtom
-{
-public:
-    virtual ~ForEachAtom()
-        {}
-
-    IteratorAttr & iterator()
-        { return maIter; }
-    virtual void processAtom();
-private:
-    IteratorAttr maIter;
-};
-
-typedef boost::shared_ptr< ForEachAtom > ForEachAtomPtr;
-
-
-class ConditionAtom
-    : public LayoutAtom
-{
-public:
-    ConditionAtom( bool bElse = false )
-        : LayoutAtom( )
-        , mbElse( bElse )
-        {}
-    virtual ~ConditionAtom()
-        {}
-    bool test();
-    virtual void processAtom()
-        {}
-    IteratorAttr & iterator()
-        { return maIter; }
-    ConditionAttr & cond()
-        { return maCond; }
-private:
-    bool          mbElse;
-    IteratorAttr  maIter;
-    ConditionAttr maCond;
-};
-
-typedef boost::shared_ptr< ConditionAtom > ConditionAtomPtr;
-
-
-/** "choose" statements. Atoms will be tested in order. */
-class ChooseAtom
-    : public LayoutAtom
-{
-public:
-    virtual ~ChooseAtom()
-        {}
-    virtual void processAtom();
-};
-
-class LayoutNode
-    : public LayoutAtom
-{
-public:
-    enum {
-        VAR_animLvl = 0,
-        VAR_animOne,
-        VAR_bulletEnabled,
-        VAR_chMax,
-        VAR_chPref,
-        VAR_dir,
-        VAR_hierBranch,
-        VAR_orgChart,
-        VAR_resizeHandles
-    };
-    // we know that the array is of fixed size
-    // the use of Any allow having empty values
-    typedef boost::array< ::com::sun::star::uno::Any, 9 > VarMap;
-
-    virtual ~LayoutNode()
-        {}
-    virtual void processAtom()
-        {}
-    VarMap & variables()
-        { return mVariables; }
-private:
-    VarMap                       mVariables;
-    std::vector< ShapePtr >      mpShapes;
-};
-
-typedef boost::shared_ptr< LayoutNode > LayoutNodePtr;
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/inc/oox/drawingml/drawingmltypes.hxx b/oox/inc/oox/drawingml/drawingmltypes.hxx
index 86a1ddb..c66d729 100644
--- a/oox/inc/oox/drawingml/drawingmltypes.hxx
+++ b/oox/inc/oox/drawingml/drawingmltypes.hxx
@@ -60,6 +60,9 @@ typedef ::boost::shared_ptr< FillProperties > FillPropertiesPtr;
 struct GraphicProperties;
 typedef ::boost::shared_ptr< GraphicProperties > GraphicPropertiesPtr;
 
+struct Shape3DProperties;
+typedef ::boost::shared_ptr< Shape3DProperties > Shape3DPropertiesPtr;
+
 struct TextCharacterProperties;
 typedef ::boost::shared_ptr< TextCharacterProperties > TextCharacterPropertiesPtr;
 
diff --git a/oox/inc/oox/drawingml/graphicshapecontext.hxx b/oox/inc/oox/drawingml/graphicshapecontext.hxx
index 45ac831..0abfbaa 100644
--- a/oox/inc/oox/drawingml/graphicshapecontext.hxx
+++ b/oox/inc/oox/drawingml/graphicshapecontext.hxx
@@ -31,7 +31,6 @@
 
 #include "oox/drawingml/shape.hxx"
 #include "oox/drawingml/shapecontext.hxx"
-#include "oox/drawingml/diagram/diagram.hxx"
 
 namespace oox { namespace vml { struct OleObjectInfo; } }
 
@@ -74,6 +73,8 @@ private:
 
 // ====================================================================
 
+class Diagram;
+
 class DiagramGraphicDataContext
     : public ShapeContext
 {
@@ -83,8 +84,6 @@ public:
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
 
 private:
-    DiagramPtr loadDiagram();
-
     ::rtl::OUString msDm;
     ::rtl::OUString msLo;
     ::rtl::OUString msQs;
diff --git a/oox/inc/oox/drawingml/scene3dcontext.hxx b/oox/inc/oox/drawingml/scene3dcontext.hxx
new file mode 100644
index 0000000..c64bbf3
--- /dev/null
+++ b/oox/inc/oox/drawingml/scene3dcontext.hxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: fillpropertiesgroupcontext.hxx,v $
+ * $Revision: 1.6 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_DRAWINGML_SCENE3DPROPERTIESCONTEXT_HPP
+#define OOX_DRAWINGML_SCENE3DPROPERTIESCONTEXT_HPP
+
+#include "oox/core/contexthandler.hxx"
+
+namespace oox { namespace drawingml {
+
+struct Shape3DProperties;
+
+// ---------------------------------------------------------------------
+
+class Scene3DPropertiesContext : public ::oox::core::ContextHandler
+{
+public:
+    Scene3DPropertiesContext( ::oox::core::ContextHandler& rParent, Shape3DProperties& r3DProperties ) throw();
+
+    ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs )
+            throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
+
+private:
+    Shape3DProperties& mr3DProperties;
+};
+
+} }
+
+#endif // OOX_DRAWINGML_SCENE3DPROPERTIESCONTEXT_HPP
diff --git a/oox/inc/oox/drawingml/shape.hxx b/oox/inc/oox/drawingml/shape.hxx
index 486b8ef..325af38 100644
--- a/oox/inc/oox/drawingml/shape.hxx
+++ b/oox/inc/oox/drawingml/shape.hxx
@@ -33,6 +33,7 @@
 #include "oox/drawingml/drawingmltypes.hxx"
 #include "oox/drawingml/customshapeproperties.hxx"
 #include "oox/drawingml/textliststyle.hxx"
+#include "oox/drawingml/shape3dproperties.hxx"
 
 #include <com/sun/star/frame/XModel.hpp>
 #include <com/sun/star/drawing/XDrawPage.hpp>
@@ -80,6 +81,7 @@ class Shape
 public:
 
     explicit Shape( const sal_Char* pServiceType = 0 );
+    explicit Shape( const ShapePtr& pSourceShape );
     virtual ~Shape();
 
     rtl::OUString&                  getServiceName(){ return msServiceName; }
@@ -98,13 +100,20 @@ public:
 
     CustomShapePropertiesPtr        getCustomShapeProperties(){ return mpCustomShapePropertiesPtr; }
 
+    Shape3DProperties&              get3DProperties() { return *mp3DPropertiesPtr; }
+    const Shape3DProperties&        get3DProperties() const { return *mp3DPropertiesPtr; }
+
     table::TablePropertiesPtr       getTableProperties();
 
     void                              setChildPosition( com::sun::star::awt::Point nPosition ){ maChPosition = nPosition; }
     void                              setChildSize( com::sun::star::awt::Size aSize ){ maChSize = aSize; }
 
-    void                            setPosition( com::sun::star::awt::Point nPosition ){ maPosition = nPosition; }
-    void                            setSize( com::sun::star::awt::Size aSize ){ maSize = aSize; }
+    void                              setPosition( com::sun::star::awt::Point nPosition ){ maPosition = nPosition; }
+    const com::sun::star::awt::Point& getPosition() const { return maPosition; }
+
+    void                              setSize( com::sun::star::awt::Size aSize ){ maSize = aSize; }
+    const com::sun::star::awt::Size&  getSize() const { return maSize; }
+
     void                            setRotation( sal_Int32 nRotation ) { mnRotation = nRotation; }
     void                            setFlip( sal_Bool bFlipH, sal_Bool bFlipV ) { mbFlipH = bFlipH; mbFlipV = bFlipV; }
     void                            addChild( const ShapePtr pChildPtr ) { maChildren.push_back( pChildPtr ); }
@@ -149,6 +158,14 @@ public:
 
     void                dropChildren() { maChildren.clear(); }
 
+    void                addChildren(
+                            ::oox::core::XmlFilterBase& rFilterBase,
+                            const Theme* pTheme,
+                            const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes,
+                            basegfx::B2DHomMatrix& aTransformation,
+                            const ::com::sun::star::awt::Rectangle* pShapeRect = 0,
+                            ShapeIdMap* pShapeMap = 0 );
+
     void                setXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rXShape )
                             { mxShape = rXShape; };
     const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &
@@ -199,6 +216,7 @@ protected:
     GraphicPropertiesPtr        mpGraphicPropertiesPtr;
     CustomShapePropertiesPtr    mpCustomShapePropertiesPtr;
     table::TablePropertiesPtr   mpTablePropertiesPtr;
+    Shape3DPropertiesPtr        mp3DPropertiesPtr;
     PropertyMap                 maShapeProperties;
     PropertyMap                 maDefaultShapeProperties;
     TextListStylePtr            mpMasterTextListStyle;
@@ -238,7 +256,11 @@ private:
     sal_Bool                        mbHidden;
 };
 
-::rtl::OUString GetShapeType( sal_Int32 nType );
+// ---------------------------------------------------------------------
+
+/** Get custom shape preset string from xml token id
+ */
+::rtl::OUString GetShapePresetType( sal_Int32 nType );
 
 // ============================================================================
 
diff --git a/oox/inc/oox/drawingml/shape3dproperties.hxx b/oox/inc/oox/drawingml/shape3dproperties.hxx
new file mode 100644
index 0000000..2fe82aa
--- /dev/null
+++ b/oox/inc/oox/drawingml/shape3dproperties.hxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: fillproperties.hxx,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_DRAWINGML_SHAPE3DPROPERTIES_HXX
+#define OOX_DRAWINGML_SHAPE3DPROPERTIES_HXX
+
+#include <map>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/geometry/IntegerRectangle2D.hpp>
+#include "oox/core/xmlfilterbase.hxx"
+#include "oox/drawingml/color.hxx"
+#include "oox/helper/helper.hxx"
+
+namespace oox { class PropertyMap; }
+namespace oox { class PropertySet; }
+namespace oox { namespace core { class ModelObjectContainer; } }
+
+namespace oox {
+namespace drawingml {
+
+// ============================================================================
+
+struct Shape3DPropertyNames
+{
+    ::rtl::OUString     maFillStyle;
+    ::rtl::OUString     maFillColor;
+    ::rtl::OUString     maFillTransparence;
+    ::rtl::OUString     maFillGradient;
+    ::rtl::OUString     maFillBitmap;
+    ::rtl::OUString     maFillBitmapMode;
+    ::rtl::OUString     maFillBitmapTile;
+    ::rtl::OUString     maFillBitmapStretch;
+    ::rtl::OUString     maFillBitmapLogicalSize;
+    ::rtl::OUString     maFillBitmapSizeX;
+    ::rtl::OUString     maFillBitmapSizeY;
+    ::rtl::OUString     maFillBitmapOffsetX;
+    ::rtl::OUString     maFillBitmapOffsetY;
+    ::rtl::OUString     maFillBitmapRectanglePoint;
+    bool                mbNamedFillGradient;
+    bool                mbNamedFillBitmap;
+    bool                mbTransformGraphic;
+
+    Shape3DPropertyNames();
+};
+
+// ============================================================================
+
+struct Shape3DProperties
+{
+    typedef ::std::map< double, Color > GradientStopMap;
+
+    OptValue< sal_Int32 > moFillType;           /// Fill type (OOXML token).
+    OptValue< bool >    moRotateWithShape;      /// True = rotate gradient/bitmap with shape.
+    Color               maFillColor;            /// Solid fill color and transparence.
+    GradientStopMap     maGradientStops;        /// Gradient stops (colors/transparence).
+    OptValue< sal_Int32 > moGradientPath;       /// If set, gradient follows rectangle, circle, or shape.
+    OptValue< sal_Int32 > moShadeAngle;         /// Rotation angle of linear gradients.
+    OptValue< bool >    moShadeScaled;
+    OptValue< sal_Int32 > moFlipModeToken;
+    OptValue< com::sun::star::geometry::IntegerRectangle2D > moFillToRect;
+    OptValue< com::sun::star::geometry::IntegerRectangle2D > moTileRect;
+    OptValue< sal_Int32 > moPattPreset;         /// Preset pattern type.
+    Color               maPattFgColor;          /// Pattern foreground color.
+    Color               maPattBgColor;          /// Pattern background color.
+    ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > mxGraphic;
+    Color               maColorChangeFrom;      /// Start color of color transformation.
+    Color               maColorChangeTo;        /// Destination color of color transformation.
+    OptValue< sal_Int32 > moBitmapMode;         /// Bitmap tile or stretch.
+    OptValue< sal_Int32 > moTileX;              /// Width of bitmap tiles.
+    OptValue< sal_Int32 > moTileY;              /// Height of bitmap tiles.
+    OptValue< sal_Int32 > moTileSX;
+    OptValue< sal_Int32 > moTileSY;
+    OptValue< sal_Int32 > moTileAlign;          /// Anchor point inside bitmap.
+
+    static Shape3DPropertyNames DEFAULTNAMES;      /// Default fill property names for shape fill.
+    static Shape3DPropertyNames DEFAULTPICNAMES;   /// Default fill property names for pictures.
+
+    /** Overwrites all members that are explicitly set in rSourceProps. */
+    void                assignUsed( const Shape3DProperties& rSourceProps );
+
+    /** Tries to resolve current settings to a solid color, e.g. returns the
+        start color of a gradient. */
+    Color               getBestSolidColor() const;
+
+    /** Writes the properties to the passed property map. */
+    void                pushToPropMap(
+                            PropertyMap& rPropMap,
+                            const Shape3DPropertyNames& rPropNames,
+                            const ::oox::core::XmlFilterBase& rFilter,
+                            ::oox::core::ModelObjectContainer& rObjContainer,
+                            sal_Int32 nShapeRotation, sal_Int32 nPhClr ) const;
+
+    /** Writes the properties to the passed property set. */
+    void                pushToPropSet(
+                            PropertySet& rPropSet,
+                            const Shape3DPropertyNames& rPropNames,
+                            const ::oox::core::XmlFilterBase& rFilter,
+                            ::oox::core::ModelObjectContainer& rObjContainer,
+                            sal_Int32 nShapeRotation, sal_Int32 nPhClr ) const;
+};
+
+// ============================================================================
+
+} // namespace drawingml
+} // namespace oox
+
+#endif
+
diff --git a/oox/inc/oox/drawingml/theme.hxx b/oox/inc/oox/drawingml/theme.hxx
index 81041be..d6dbb2c 100644
--- a/oox/inc/oox/drawingml/theme.hxx
+++ b/oox/inc/oox/drawingml/theme.hxx
@@ -32,6 +32,7 @@
 #include "oox/drawingml/clrscheme.hxx"
 #include "oox/drawingml/shape.hxx"
 #include "oox/drawingml/textfont.hxx"
+#include <com/sun/star/xml/dom/XDocument.hpp>
 
 namespace oox {
 namespace drawingml {
@@ -94,6 +95,11 @@ public:
     inline Shape&                   getTxDef() { return maTxDef; }
     inline const Shape&             getTxDef() const { return maTxDef; }
 
+    void                            setFragment( const ::com::sun::star::uno::Reference<
+                                                    ::com::sun::star::xml::dom::XDocument>& xRef ) { mxFragment=xRef; }
+    const ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::dom::XDocument>& getFragment() const { return mxFragment; }
+
 private:
     ::rtl::OUString     maStyleName;
     ClrScheme           maClrScheme;
@@ -105,6 +111,8 @@ private:
     Shape               maSpDef;
     Shape               maLnDef;
     Shape               maTxDef;
+    ::com::sun::star::uno::Reference<
+        ::com::sun::star::xml::dom::XDocument> mxFragment;
 };
 
 // ============================================================================
diff --git a/oox/inc/oox/ppt/dgmimport.hxx b/oox/inc/oox/ppt/dgmimport.hxx
new file mode 100644
index 0000000..8541eb7
--- /dev/null
+++ b/oox/inc/oox/ppt/dgmimport.hxx
@@ -0,0 +1,71 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: pptimport.hxx,v $
+ * $Revision: 1.6 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_POWERPOINT_QUICKDIAGRAMMINGIMPORT_HXX
+#define OOX_POWERPOINT_QUICKDIAGRAMMINGIMPORT_HXX
+
+#include "oox/core/xmlfilterbase.hxx"
+
+#include <com/sun/star/animations/XAnimationNode.hpp>
+#include <oox/drawingml/theme.hxx>
+#include "oox/ppt/presentationfragmenthandler.hxx"
+#include "oox/ppt/slidepersist.hxx"
+#include <vector>
+#include <map>
+
+namespace oox { namespace ppt {
+
+// ---------------------------------------------------------------------
+
+class QuickDiagrammingImport : public oox::core::XmlFilterBase
+{
+public:
+
+    QuickDiagrammingImport( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
+
+    // from FilterBase
+    virtual bool importDocument() throw();
+    virtual bool exportDocument() throw();
+
+    virtual const ::oox::drawingml::Theme* getCurrentTheme() const;
+    virtual sal_Int32 getSchemeClr( sal_Int32 nColorSchemeToken ) const;
+    virtual const oox::drawingml::table::TableStyleListPtr getTableStyles();
+
+    virtual oox::vml::Drawing* getVmlDrawing();
+    virtual oox::drawingml::chart::ChartConverter* getChartConverter();
+
+private:
+    virtual ::rtl::OUString implGetImplementationName() const;
+    virtual ::oox::ole::VbaProject* implCreateVbaProject() const;
+};
+
+} }
+
+#endif // OOX_POWERPOINT_QUICKDIAGRAMMINGIMPORT_HXX
diff --git a/oox/inc/oox/ppt/dgmlayout.hxx b/oox/inc/oox/ppt/dgmlayout.hxx
new file mode 100644
index 0000000..6f8161e
--- /dev/null
+++ b/oox/inc/oox/ppt/dgmlayout.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: pptimport.hxx,v $
+ * $Revision: 1.6 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_POWERPOINT_QUICKDIAGRAMMINGLAYOUT_HXX
+#define OOX_POWERPOINT_QUICKDIAGRAMMINGLAYOUT_HXX
+
+#include "oox/core/xmlfilterbase.hxx"
+
+#include <com/sun/star/animations/XAnimationNode.hpp>
+#include <oox/drawingml/theme.hxx>
+#include "oox/ppt/presentationfragmenthandler.hxx"
+#include "oox/ppt/slidepersist.hxx"
+#include <vector>
+#include <map>
+
+namespace oox { namespace ppt {
+
+// ---------------------------------------------------------------------
+
+class QuickDiagrammingLayout : public oox::core::XmlFilterBase
+{
+public:
+
+    QuickDiagrammingLayout( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
+
+    // from FilterBase
+    virtual bool importDocument() throw();
+    virtual bool exportDocument() throw();
+
+    virtual const ::oox::drawingml::Theme* getCurrentTheme() const;
+    virtual sal_Int32 getSchemeClr( sal_Int32 nColorSchemeToken ) const;
+    virtual const oox::drawingml::table::TableStyleListPtr getTableStyles();
+
+    virtual ::oox::vml::Drawing* getVmlDrawing();
+    virtual ::oox::drawingml::chart::ChartConverter* getChartConverter();
+
+private:
+    virtual ::rtl::OUString implGetImplementationName() const;
+    virtual ::oox::ole::VbaProject* implCreateVbaProject() const;
+    drawingml::ThemePtr mpThemePtr;
+};
+
+} }
+
+#endif // OOX_POWERPOINT_QUICKDIAGRAMMINGLAYOUT_HXX
diff --git a/oox/inc/oox/ppt/pptimport.hxx b/oox/inc/oox/ppt/pptimport.hxx
index 06f345b..79df421 100644
--- a/oox/inc/oox/ppt/pptimport.hxx
+++ b/oox/inc/oox/ppt/pptimport.hxx
@@ -57,7 +57,7 @@ public:
     virtual const ::oox::drawingml::Theme* getCurrentTheme() const;
     virtual ::oox::vml::Drawing* getVmlDrawing();
     virtual const oox::drawingml::table::TableStyleListPtr getTableStyles();
-    virtual ::oox::drawingml::chart::ChartConverter& getChartConverter();
+    virtual ::oox::drawingml::chart::ChartConverter* getChartConverter();
 
     void                                                    setActualSlidePersist( SlidePersistPtr pActualSlidePersist ){ mpActualSlidePersist = pActualSlidePersist; };
     std::map< rtl::OUString, oox::drawingml::ThemePtr >&    getThemes(){ return maThemes; };
diff --git a/oox/inc/oox/xls/excelfilter.hxx b/oox/inc/oox/xls/excelfilter.hxx
index e4cc767..c15b6cc 100644
--- a/oox/inc/oox/xls/excelfilter.hxx
+++ b/oox/inc/oox/xls/excelfilter.hxx
@@ -71,7 +71,7 @@ public:
     virtual const ::oox::drawingml::Theme* getCurrentTheme() const;
     virtual ::oox::vml::Drawing* getVmlDrawing();
     virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles();
-    virtual ::oox::drawingml::chart::ChartConverter& getChartConverter();
+    virtual ::oox::drawingml::chart::ChartConverter* getChartConverter();
 
     virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rDescriptor ) throw( ::com::sun::star::uno::RuntimeException );
 
diff --git a/oox/inc/oox/xls/workbookhelper.hxx b/oox/inc/oox/xls/workbookhelper.hxx
index 8509e13..bb9a3d2 100644
--- a/oox/inc/oox/xls/workbookhelper.hxx
+++ b/oox/inc/oox/xls/workbookhelper.hxx
@@ -250,7 +250,7 @@ public:
     /** Returns the converter for string to cell address/range conversion. */
     AddressConverter&   getAddressConverter() const;
     /** Returns the chart object converter. */
-    ExcelChartConverter& getChartConverter() const;
+    ExcelChartConverter* getChartConverter() const;
     /** Returns the page and print settings converter. */
     PageSettingsConverter& getPageSettingsConverter() const;
 
diff --git a/oox/source/core/fastparser.cxx b/oox/source/core/fastparser.cxx
index 947397a..d6b37bc 100644
--- a/oox/source/core/fastparser.cxx
+++ b/oox/source/core/fastparser.cxx
@@ -81,8 +81,11 @@ FastParser::FastParser( const Reference< XComponentContext >& rxContext ) throw(
     Reference< XMultiComponentFactory > xFactory( rxContext->getServiceManager(), UNO_SET_THROW );
     mxParser.set( xFactory->createInstanceWithContext( CREATE_OUSTRING( "com.sun.star.xml.sax.FastParser" ), rxContext ), UNO_QUERY_THROW );
 
+    // create the fast tokenhandler
+    mxTokenHandler.set( new FastTokenHandler );
+
     // create the fast token handler based on the OOXML token list
-    mxParser->setTokenHandler( new FastTokenHandler );
+    mxParser->setTokenHandler( mxTokenHandler );
 }
 
 FastParser::~FastParser()
diff --git a/oox/source/core/filterbase.cxx b/oox/source/core/filterbase.cxx
index 5c8ca79..5e37d06 100644
--- a/oox/source/core/filterbase.cxx
+++ b/oox/source/core/filterbase.cxx
@@ -33,6 +33,7 @@
 #include <com/sun/star/frame/XModel.hpp>
 #include <com/sun/star/task/XStatusIndicator.hpp>
 #include <com/sun/star/task/XInteractionHandler.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
 #include <comphelper/docpasswordhelper.hxx>
 #include <comphelper/mediadescriptor.hxx>
 #include <osl/mutex.hxx>
@@ -53,6 +54,7 @@ namespace core {
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::frame;
 using namespace ::com::sun::star::graphic;
+using namespace ::com::sun::star::drawing;
 using namespace ::com::sun::star::io;
 using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::task;
@@ -159,6 +161,7 @@ struct FilterBaseImpl
     Reference< XStream >                mxOutStream;
     Reference< XStatusIndicator >       mxStatusIndicator;
     Reference< XInteractionHandler >    mxInteractionHandler;
+    Reference< XShape >                 mxParentShape;
 
     explicit            FilterBaseImpl( const Reference< XComponentContext >& rxContext ) throw( RuntimeException );
 
@@ -281,6 +284,11 @@ const Reference< XFrame >& FilterBase::getTargetFrame() const
     return mxImpl->mxTargetFrame;
 }
 
+const Reference< XShape >& FilterBase::getParentShape() const
+{
+    return mxImpl->mxParentShape;
+}
+
 const Reference< XStatusIndicator >& FilterBase::getStatusIndicator() const
 {
     return mxImpl->mxStatusIndicator;
@@ -578,6 +586,7 @@ void FilterBase::setMediaDescriptor( const Sequence< PropertyValue >& rMediaDesc
     mxImpl->mxTargetFrame = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_FRAME(), Reference< XFrame >() );
     mxImpl->mxStatusIndicator = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_STATUSINDICATOR(), Reference< XStatusIndicator >() );
     mxImpl->mxInteractionHandler = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_INTERACTIONHANDLER(), Reference< XInteractionHandler >() );
+    mxImpl->mxParentShape = mxImpl->maMediaDesc.getUnpackedValueOrDefault( CREATE_OUSTRING( "ParentShape" ), mxImpl->mxParentShape );
 
     // Check for ISO OOXML
     OUString sFilterName = mxImpl->maMediaDesc.getUnpackedValueOrDefault( CREATE_OUSTRING( "FilterName" ), OUString() );
diff --git a/oox/source/core/services.cxx b/oox/source/core/services.cxx
index 199d8a6..a0d2a46 100644
--- a/oox/source/core/services.cxx
+++ b/oox/source/core/services.cxx
@@ -44,6 +44,8 @@ namespace oox {
     namespace docprop { DECLARE_FUNCTIONS( DocumentPropertiesImport );  }
     namespace ole {     DECLARE_FUNCTIONS( WordVbaProjectFilter );      }
     namespace ppt {     DECLARE_FUNCTIONS( PowerPointImport );          }
+    namespace ppt {     DECLARE_FUNCTIONS( QuickDiagrammingImport );    }
+    namespace ppt {     DECLARE_FUNCTIONS( QuickDiagrammingLayout );    }
     namespace shape {   DECLARE_FUNCTIONS( ShapeContextHandler );       }
     namespace xls {     DECLARE_FUNCTIONS( BiffDetector );              }
     namespace xls {     DECLARE_FUNCTIONS( ExcelFilter );               }
@@ -68,6 +70,8 @@ static ::cppu::ImplementationEntry const spServices[] =
     IMPLEMENTATION_ENTRY( ::oox::docprop::DocumentPropertiesImport ),
     IMPLEMENTATION_ENTRY( ::oox::ole::WordVbaProjectFilter ),
     IMPLEMENTATION_ENTRY( ::oox::ppt::PowerPointImport ),
+    IMPLEMENTATION_ENTRY( ::oox::ppt::QuickDiagrammingImport ),
+    IMPLEMENTATION_ENTRY( ::oox::ppt::QuickDiagrammingLayout ),
     IMPLEMENTATION_ENTRY( ::oox::shape::ShapeContextHandler ),
     IMPLEMENTATION_ENTRY( ::oox::xls::BiffDetector ),
     IMPLEMENTATION_ENTRY( ::oox::xls::ExcelFilter ),
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index 1daea94..7d17921 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -33,11 +33,13 @@
 #include <com/sun/star/embed/XRelationshipAccess.hpp>
 #include <com/sun/star/xml/sax/InputSource.hpp>
 #include <com/sun/star/xml/sax/XFastParser.hpp>
+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
 #include <com/sun/star/document/XDocumentProperties.hpp>
 #include <comphelper/mediadescriptor.hxx>
 #include <sax/fshelper.hxx>
 #include <rtl/strbuf.hxx>
 #include <rtl/ustrbuf.hxx>
+#include <rtl/instance.hxx>
 #include "oox/core/fastparser.hxx"
 #include "oox/core/filterdetect.hxx"
 #include "oox/core/fragmenthandler.hxx"
@@ -48,6 +50,8 @@
 #include "oox/helper/zipstorage.hxx"
 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
 #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp>
+#include <com/sun/star/xml/dom/XDocument.hpp>
+#include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <comphelper/processfactory.hxx>
 #include <comphelper/mediadescriptor.hxx>
@@ -56,6 +60,9 @@
 using ::com::sun::star::uno::XComponentContext;
 using ::com::sun::star::document::XOOXMLDocumentPropertiesImporter;
 using ::com::sun::star::document::XDocumentPropertiesSupplier;
+using ::com::sun::star::xml::dom::XDocument;
+using ::com::sun::star::xml::dom::XDocumentBuilder;
+using ::com::sun::star::xml::sax::XFastSAXSerializable;
 using ::com::sun::star::beans::XPropertySet;
 using ::com::sun::star::lang::XComponent;
 
@@ -103,46 +110,89 @@ struct XmlFilterBaseImpl
 {
     typedef RefMap< OUString, Relations > RelationsMap;
 
-    FastParser          maFastParser;
-    const OUString      maBinSuffix;
-    const OUString      maVmlSuffix;
-    RelationsMap        maRelationsMap;
-    TextFieldStack      maTextFieldStack;
+    FastParser                     maFastParser;
+    const OUString                 maBinSuffix;
+    const OUString                 maVmlSuffix;
+    RelationsMap                   maRelationsMap;
+    TextFieldStack                 maTextFieldStack;
 
     explicit            XmlFilterBaseImpl( const Reference< XComponentContext >& rxContext ) throw( RuntimeException );
 };
 
 // ----------------------------------------------------------------------------
 
+namespace
+{
+    struct NamespaceIds: public rtl::StaticWithInit<
+        Sequence< Pair< OUString, sal_Int32 > >,
+        NamespaceIds>
+    {
+        Sequence< Pair< OUString, sal_Int32 > > operator()()
+        {
+            static const char* const namespaceURIs[] = {
+                "http://www.w3.org/XML/1998/namespace",
+                "http://schemas.openxmlformats.org/package/2006/relationships",
+                "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
+                "http://schemas.openxmlformats.org/drawingml/2006/main",
+                "http://schemas.openxmlformats.org/drawingml/2006/diagram",
+                "http://schemas.openxmlformats.org/drawingml/2006/chart",
+                "http://schemas.openxmlformats.org/drawingml/2006/chartDrawing",
+                "urn:schemas-microsoft-com:vml",
+                "urn:schemas-microsoft-com:office:office",
+                "urn:schemas-microsoft-com:office:word",
+                "urn:schemas-microsoft-com:office:excel",
+                "urn:schemas-microsoft-com:office:powerpoint",
+                "http://schemas.microsoft.com/office/2006/activeX",
+                "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
+                "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing",
+                "http://schemas.microsoft.com/office/excel/2006/main",
+                "http://schemas.openxmlformats.org/presentationml/2006/main"
+            };
+
+            static const sal_Int32 namespaceIds[] = {
+                NMSP_xml,
+                NMSP_packageRel,
+                NMSP_officeRel,
+                NMSP_dml,
+                NMSP_dmlDiagram,
+                NMSP_dmlChart,
+                NMSP_dmlChartDr,
+                NMSP_dmlSpreadDr,
+                NMSP_vml,
+                NMSP_vmlOffice,
+                NMSP_vmlWord,
+                NMSP_vmlExcel,
+                NMSP_vmlPowerpoint,
+                NMSP_xls,
+                NMSP_ppt,
+                NMSP_ax,
+                NMSP_xm,
+                NMSP_mce,
+                NMSP_mceTest,
+            };
+
+            Sequence< Pair< OUString, sal_Int32 > > aRet(STATIC_ARRAY_SIZE(namespaceIds));
+            for( sal_Int32 i=0; i<aRet.getLength(); ++i )
+                aRet[i] = make_Pair(
+                    ::rtl::OUString::createFromAscii(namespaceURIs[i]),
+                    namespaceIds[i]);
+            return aRet;
+        }
+    };
+}
+
+// ----------------------------------------------------------------------------
+
 XmlFilterBaseImpl::XmlFilterBaseImpl( const Reference< XComponentContext >& rxContext ) throw( RuntimeException ) :
     maFastParser( rxContext ),
     maBinSuffix( CREATE_OUSTRING( ".bin" ) ),
     maVmlSuffix( CREATE_OUSTRING( ".vml" ) )
 {
     // register XML namespaces
-    maFastParser.registerNamespace( NMSP_xml );
-    maFastParser.registerNamespace( NMSP_packageRel );
-    maFastParser.registerNamespace( NMSP_officeRel );
-
-    maFastParser.registerNamespace( NMSP_dml );
-    maFastParser.registerNamespace( NMSP_dmlDiagram );
-    maFastParser.registerNamespace( NMSP_dmlChart );
-    maFastParser.registerNamespace( NMSP_dmlChartDr );
-    maFastParser.registerNamespace( NMSP_dmlSpreadDr );
-
-    maFastParser.registerNamespace( NMSP_vml );
-    maFastParser.registerNamespace( NMSP_vmlOffice );
-    maFastParser.registerNamespace( NMSP_vmlWord );
-    maFastParser.registerNamespace( NMSP_vmlExcel );
-    maFastParser.registerNamespace( NMSP_vmlPowerpoint );
-
-    maFastParser.registerNamespace( NMSP_xls );
-    maFastParser.registerNamespace( NMSP_ppt );
-
-    maFastParser.registerNamespace( NMSP_ax );
-    maFastParser.registerNamespace( NMSP_xm );
-    maFastParser.registerNamespace( NMSP_mce );
-    maFastParser.registerNamespace( NMSP_mceTest );
+    const Sequence< Pair< OUString, sal_Int32 > > ids=
+        NamespaceIds::get();
+    for( sal_Int32 i=0; i<ids.getLength(); ++i )
+        maFastParser.registerNamespace( ids[i].Second );
 }
 
 
@@ -284,6 +334,69 @@ sal_Int32 XmlFilterBase::getNamespaceId( const OUString& rUrl )
      return mxImpl->maFastParser.getNamespaceId( rUrl );
 }
 
+Reference<XDocument> XmlFilterBase::importFragment( const ::rtl::OUString& aFragmentPath )
+{
+    Reference<XDocument> xRet;
+
+    // path to fragment stream valid?
+    OSL_ENSURE( aFragmentPath.getLength() > 0, "XmlFilterBase::importFragment - empty fragment path" );
+    if( aFragmentPath.getLength() == 0 )
+        return xRet;
+
+    // try to open the fragment stream (this may fail - do not assert)
+    Reference< XInputStream > xInStrm = openInputStream( aFragmentPath );
+    if( !xInStrm.is() )
+        return xRet;
+
+    // binary streams (fragment extension is '.bin') currently not supported
+    sal_Int32 nBinSuffixPos = aFragmentPath.getLength() - mxImpl->maBinSuffix.getLength();
+    if( (nBinSuffixPos >= 0) && aFragmentPath.match( mxImpl->maBinSuffix, nBinSuffixPos ) )
+        return xRet;
+
+    // try to import XML stream
+    try
+    {
+        // create the dom parser
+        Reference< XComponentContext > xContext =
+            lcl_getComponentContext(getServiceFactory());
+        Reference<XDocumentBuilder> xDomBuilder(
+            xContext->getServiceManager()->createInstanceWithContext(
+                ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.dom.DocumentBuilder" )),
+                xContext),
+            UNO_QUERY_THROW );
+
+        // create DOM from fragment
+        xRet = xDomBuilder->parse(xInStrm);
+    }
+    catch( Exception& )
+    {
+    }
+
+    return xRet;
+}
+
+bool XmlFilterBase::importFragment( const ::rtl::Reference< FragmentHandler >& rxHandler,
+                                    const Reference< XFastSAXSerializable >& rxSerializer )
+{
+    Reference< XFastDocumentHandler > xDocHandler( rxHandler.get() );
+    if( !xDocHandler.is() )
+        return false;
+
+    // try to import XML stream
+    try
+    {
+        rxSerializer->fastSerialize( xDocHandler,
+                                     mxImpl->maFastParser.getTokenHandler(),
+                                     Sequence< StringPair >(),
+                                     NamespaceIds::get() );
+        return true;
+    }
+    catch( Exception& )
+    {}
+
+    return false;
+}
+
 RelationsRef XmlFilterBase::importRelations( const OUString& rFragmentPath )
 {
     // try to find cached relations
@@ -555,6 +668,11 @@ XmlFilterBase& XmlFilterBase::exportDocumentProperties( Reference< XDocumentProp
     return *this;
 }
 
+::oox::drawingml::chart::ChartConverter* XmlFilterBase::getChartConverter()
+{
+    return 0;
+}
+
 // protected ------------------------------------------------------------------
 
 Reference< XInputStream > XmlFilterBase::implGetInputStream( MediaDescriptor& rMediaDesc ) const
diff --git a/oox/source/drawingml/chart/chartspaceconverter.cxx b/oox/source/drawingml/chart/chartspaceconverter.cxx
index 44ae5c0..822ac52 100644
--- a/oox/source/drawingml/chart/chartspaceconverter.cxx
+++ b/oox/source/drawingml/chart/chartspaceconverter.cxx
@@ -84,9 +84,12 @@ ChartSpaceConverter::~ChartSpaceConverter()
 
 void ChartSpaceConverter::convertFromModel( const Reference< XShapes >& rxExternalPage, const Point& rChartPos )
 {
+    if( !getChartConverter() )
+        return;
+
     /*  create data provider (virtual function in the ChartConverter class,
         derived converters may create an external data provider) */
-    getChartConverter().createDataProvider( getChartDocument() );
+    getChartConverter()->createDataProvider( getChartDocument() );
 
     // attach number formatter of container document to data receiver
     try
diff --git a/oox/source/drawingml/chart/converterbase.cxx b/oox/source/drawingml/chart/converterbase.cxx
index 7e563ae..d4735b5 100644
--- a/oox/source/drawingml/chart/converterbase.cxx
+++ b/oox/source/drawingml/chart/converterbase.cxx
@@ -255,9 +255,9 @@ XmlFilterBase& ConverterRoot::getFilter() const
     return mxData->mrFilter;
 }
 
-ChartConverter& ConverterRoot::getChartConverter() const
+ChartConverter* ConverterRoot::getChartConverter() const
 {
-    return mxData->mrConverter;
+    return &mxData->mrConverter;
 }
 
 Reference< XChartDocument > ConverterRoot::getChartDocument() const
diff --git a/oox/source/drawingml/chart/datasourceconverter.cxx b/oox/source/drawingml/chart/datasourceconverter.cxx
index 805595f..4f5da6e 100644
--- a/oox/source/drawingml/chart/datasourceconverter.cxx
+++ b/oox/source/drawingml/chart/datasourceconverter.cxx
@@ -57,12 +57,15 @@ DataSequenceConverter::~DataSequenceConverter()
 Reference< XDataSequence > DataSequenceConverter::createDataSequence( const OUString& rRole )
 {
     // create data sequence from data source model (virtual call at chart converter)
-    Reference< XDataSequence > xDataSeq = getChartConverter().createDataSequence( getChartDocument()->getDataProvider(), mrModel );
-
-    // set sequence role
-    PropertySet aSeqProp( xDataSeq );
-    aSeqProp.setProperty( PROP_Role, rRole );
+    Reference< XDataSequence > xDataSeq;
+    if( getChartConverter() )
+    {
+        xDataSeq = getChartConverter()->createDataSequence( getChartDocument()->getDataProvider(), mrModel );
 
+        // set sequen   ce role
+        PropertySet aSeqProp( xDataSeq );
+        aSeqProp.setProperty( PROP_Role, rRole );
+    }
     return xDataSeq;
 }
 
diff --git a/oox/source/drawingml/clrscheme.cxx b/oox/source/drawingml/clrscheme.cxx
index 776cbb1..7aa58a9 100644
--- a/oox/source/drawingml/clrscheme.cxx
+++ b/oox/source/drawingml/clrscheme.cxx
@@ -26,6 +26,7 @@
  *
  ************************************************************************/
 
+#include <osl/diagnose.h>
 #include "oox/drawingml/clrscheme.hxx"
 #include "oox/token/tokens.hxx"
 
@@ -62,6 +63,7 @@ ClrScheme::~ClrScheme()
 
 sal_Bool ClrScheme::getColor( sal_Int32 nSchemeClrToken, sal_Int32& rColor ) const
 {
+    OSL_ASSERT((nSchemeClrToken & sal_Int32(0xFFFF0000))==0);
     switch( nSchemeClrToken )
     {
         case XML_bg1 : nSchemeClrToken = XML_lt1; break;
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx
index 9b2ce7e..74b49fb 100644
--- a/oox/source/drawingml/color.cxx
+++ b/oox/source/drawingml/color.cxx
@@ -382,6 +382,7 @@ sal_Int32 Color::getColor( const GraphicHelper& rGraphicHelper, sal_Int32 nPhClr
     {
         for( TransformVec::const_iterator aIt = maTransforms.begin(), aEnd = maTransforms.end(); aIt != aEnd; ++aIt )
         {
+        OSL_ASSERT((aIt->mnToken & sal_Int32(0xFFFF0000))==0);
             switch( aIt->mnToken )
             {
                 case XML_red:       toCrgb(); lclSetValue( mnC1, aIt->mnValue );    break;
diff --git a/oox/source/drawingml/customshapegeometry.cxx b/oox/source/drawingml/customshapegeometry.cxx
index 1627530..9d58367 100644
--- a/oox/source/drawingml/customshapegeometry.cxx
+++ b/oox/source/drawingml/customshapegeometry.cxx
@@ -1169,8 +1169,9 @@ Path2DListContext::Path2DListContext( ContextHandler& rParent, CustomShapeProper
 
 // ---------------------------------------------------------------------
 
-OUString GetShapeType( sal_Int32 nType )
+OUString GetShapePresetType( sal_Int32 nType )
 {
+    OSL_ASSERT((nType & sal_Int32(0xFFFF0000))==0);
     OUString sType;
      switch( nType )
     {
@@ -1799,6 +1800,7 @@ OUString GetShapeType( sal_Int32 nType )
 
 static OUString GetTextShapeType( sal_Int32 nType )
 {
+    OSL_ASSERT((nType & sal_Int32(0xFFFF0000))==0);
     OUString sType;
     switch( nType )
     {
@@ -2029,7 +2031,7 @@ PresetShapeGeometryContext::PresetShapeGeometryContext( ContextHandler& rParent,
     OUString sShapeType;
     sal_Int32 nShapeType = xAttribs->getOptionalValueToken( XML_prst, FastToken::DONTKNOW );
     if ( nShapeType != FastToken::DONTKNOW )
-        sShapeType = GetShapeType( nShapeType );
+        sShapeType = GetShapePresetType( nShapeType );
     OSL_ENSURE( sShapeType.getLength(), "oox::drawingml::CustomShapeCustomGeometryContext::CustomShapeCustomGeometryContext(), unknown shape type" );
     mrCustomShapeProperties.setShapePresetType( sShapeType );
 }
diff --git a/oox/source/drawingml/diagram/constraintlistcontext.cxx b/oox/source/drawingml/diagram/constraintlistcontext.cxx
new file mode 100644
index 0000000..42cbe45
--- /dev/null
+++ b/oox/source/drawingml/diagram/constraintlistcontext.cxx
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "constraintlistcontext.hxx"
+#include "oox/helper/attributelist.hxx"
+
+using namespace ::oox::core;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::xml::sax;
+using ::rtl::OUString;
+
+namespace oox { namespace drawingml {
+
+// CT_ConstraintLists
+ConstraintListContext::ConstraintListContext( ContextHandler& rParent,
+                                              const Reference< XFastAttributeList >&,
+                                              const LayoutAtomPtr &pNode )
+    : ContextHandler( rParent )
+    , mpNode( pNode )
+{
+    OSL_ENSURE( pNode, "Node must NOT be NULL" );
+}
+
+
+ConstraintListContext::~ConstraintListContext()
+{
+}
+
+void SAL_CALL ConstraintListContext::endFastElement( ::sal_Int32 )
+    throw (SAXException, RuntimeException)
+{
+}
+
+Reference< XFastContextHandler > SAL_CALL
+ConstraintListContext::createFastChildContext( ::sal_Int32 aElement,
+                                               const Reference< XFastAttributeList >& xAttribs )
+    throw (SAXException, RuntimeException)
+{
+    Reference< XFastContextHandler > xRet;
+
+    OUString aEmptyStr;
+
+    switch( aElement )
+    {
+    case DGM_TOKEN( constr ):
+    {
+        ConstraintAtomPtr pNode( new ConstraintAtom() );
+        mpNode->addChild( pNode );
+
+        AttributeList aAttribs( xAttribs );
+        pNode->setFor( aAttribs.getToken( XML_for, XML_none ) );
+        pNode->setForName( aAttribs.getString( XML_forName, aEmptyStr ) );
+        pNode->setPointType( aAttribs.getToken( XML_ptType, XML_none ) );
+        pNode->setType( aAttribs.getToken( XML_type, XML_none ) );
+        pNode->setRefFor( aAttribs.getToken( XML_refFor, XML_none ) );
+        pNode->setRefForName( aAttribs.getString( XML_refForName, aEmptyStr ) );
+        pNode->setRefType( aAttribs.getToken( XML_refType, XML_none ) );
+        pNode->setRefPointType( aAttribs.getToken( XML_refPtType, XML_none ) );
+        pNode->setFactor( aAttribs.getDouble( XML_fact, 1.0 ) );
+        pNode->setValue( aAttribs.getDouble( XML_val, 0.0 ) );
+        pNode->setOperator( aAttribs.getToken( XML_op, XML_none ) );
+        break;
+    }
+    default:
+        break;
+    }
+    if( !xRet.is() )
+        xRet.set(this);
+
+    return xRet;
+}
+
+
+} }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/drawingml/diagram/constraintlistcontext.hxx b/oox/source/drawingml/diagram/constraintlistcontext.hxx
new file mode 100644
index 0000000..46a0255
--- /dev/null
+++ b/oox/source/drawingml/diagram/constraintlistcontext.hxx
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_DRAWINGML_CONSTRAINTLISTCONTEXT_HXX
+#define OOX_DRAWINGML_CONSTRAINTLISTCONTEXT_HXX
+
+#include "oox/core/contexthandler.hxx"
+#include "diagramlayoutatoms.hxx"
+#include "diagram.hxx"
+
+namespace oox { namespace drawingml {
+
+class ConstraintListContext : public ::oox::core::ContextHandler
+{
+public:
+    ConstraintListContext( ContextHandler& rParent, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes, const LayoutAtomPtr &pNode );
+    virtual ~ConstraintListContext();
+
+    virtual void SAL_CALL endFastElement( ::sal_Int32 Element ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
+private:
+    LayoutAtomPtr mpNode;
+};
+
+} }
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/drawingml/diagram/datamodelcontext.cxx b/oox/source/drawingml/diagram/datamodelcontext.cxx
index 230edf5..63065a8 100644
--- a/oox/source/drawingml/diagram/datamodelcontext.cxx
+++ b/oox/source/drawingml/diagram/datamodelcontext.cxx
@@ -26,7 +26,7 @@
  *
  ************************************************************************/
 
-#include "oox/drawingml/diagram/datamodelcontext.hxx"
+#include "datamodelcontext.hxx"
 #include "oox/helper/attributelist.hxx"
 #include "oox/drawingml/fillpropertiesgroupcontext.hxx"
 #include "oox/drawingml/shapepropertiescontext.hxx"
@@ -39,78 +39,184 @@ using ::rtl::OUString;
 
 namespace oox { namespace drawingml {
 
-// CL_Cxn
-class CxnContext
+// CT_CxnList
+class CxnListContext
     : public ContextHandler
 {
 public:
-    CxnContext( ContextHandler& rParent,
-                const Reference< XFastAttributeList >& xAttribs,
-                const dgm::ConnectionPtr & pConnection )
+    CxnListContext( ContextHandler& rParent,
+                    dgm::Connections & aConnections )
         : ContextHandler( rParent )
-        , mpConnection( pConnection )
+        , mrConnection( aConnections )
         {
-            sal_Int32 nType = xAttribs->getOptionalValueToken( XML_type, XML_parOf );
-            pConnection->mnType = nType;
-            pConnection->msModelId = xAttribs->getOptionalValue( XML_modelId );
-            pConnection->msSourceId = xAttribs->getOptionalValue( XML_srcId );
-            pConnection->msDestId  = xAttribs->getOptionalValue( XML_destId );
-            pConnection->msPresId  = xAttribs->getOptionalValue( XML_presId );
-            pConnection->msSibTransId  = xAttribs->getOptionalValue( XML_sibTransId );
-            AttributeList attribs( xAttribs );
-            pConnection->mnSourceOrder = attribs.getInteger( XML_srcOrd, 0 );
-            pConnection->mnDestOrder = attribs.getInteger( XML_destOrd, 0 );
         }
 
     virtual Reference< XFastContextHandler > SAL_CALL
     createFastChildContext( sal_Int32 aElementToken,
-                            const Reference< XFastAttributeList >& /*xAttribs*/ )
+                            const Reference< XFastAttributeList >& xAttribs )
         throw (SAXException, RuntimeException)
         {
             Reference< XFastContextHandler > xRet;
 
             switch( aElementToken )
             {
-            case DGM_TOKEN( extLst ):
-                return xRet;
-            default:
-                break;
+                case DGM_TOKEN( cxn ):
+                {
+                    mrConnection.push_back( dgm::Connection() );
+                    dgm::Connection& rConnection=mrConnection.back();
+
+                    const sal_Int32 nType = xAttribs->getOptionalValueToken( XML_type, XML_parOf );
+                    rConnection.mnType = nType;
+                    rConnection.msModelId = xAttribs->getOptionalValue( XML_modelId );
+                    rConnection.msSourceId = xAttribs->getOptionalValue( XML_srcId );
+                    rConnection.msDestId  = xAttribs->getOptionalValue( XML_destId );
+                    rConnection.msPresId  = xAttribs->getOptionalValue( XML_presId );
+                    rConnection.msSibTransId  = xAttribs->getOptionalValue( XML_sibTransId );
+                    rConnection.msParTransId  = xAttribs->getOptionalValue( XML_parTransId );
+                    const AttributeList attribs( xAttribs );
+                    rConnection.mnSourceOrder = attribs.getInteger( XML_srcOrd, 0 );
+                    rConnection.mnDestOrder = attribs.getInteger( XML_destOrd, 0 );
+
+                    // skip CT_extLst
+                    return xRet;
+                }
+                default:
+                    break;
             }
             if( !xRet.is() )
                 xRet.set( this );
             return xRet;
         }
 private:
-    dgm::ConnectionPtr mpConnection;
+    dgm::Connections& mrConnection;
 };
 
 
-// CT_CxnList
-class CxnListContext
+// CT_presLayoutVars
+class PresLayoutVarsContext
     : public ContextHandler
 {
 public:
-    CxnListContext( ContextHandler& rParent,  dgm::Connections & aConnections )
-        : ContextHandler( rParent )
-        , maConnections( aConnections )
+    PresLayoutVarsContext( ContextHandler& rParent,
+                           dgm::Point & rPoint ) :
+        ContextHandler( rParent ),
+        mrPoint( rPoint )
+    {
+    }
+    virtual Reference< XFastContextHandler > SAL_CALL
+    createFastChildContext( sal_Int32 aElementToken,
+                            const Reference< XFastAttributeList >& xAttribs )
+        throw (SAXException, RuntimeException)
+    {
+        Reference< XFastContextHandler > xRet;
+        AttributeList aAttribs( xAttribs );
+
+        switch( aElementToken )
         {
+            // TODO
+            case DGM_TOKEN( animLvl ):
+            case DGM_TOKEN( animOne ):
+                break;
+            case DGM_TOKEN( bulletEnabled ):
+                mrPoint.mbBulletEnabled = aAttribs.getBool( XML_val, false );
+                break;
+            case DGM_TOKEN( chMax ):
+                mrPoint.mnMaxChildren = aAttribs.getInteger( XML_val, -1 );
+                break;
+            case DGM_TOKEN( chPref ):
+                mrPoint.mnPreferredChildren = aAttribs.getInteger( XML_val, -1 );
+                break;
+            case DGM_TOKEN( dir ):
+                mrPoint.mnDirection = aAttribs.getToken( XML_val, XML_norm );
+                break;
+            case DGM_TOKEN( hierBranch ):
+                mrPoint.mnHierarchyBranch = aAttribs.getToken( XML_val, XML_std );
+                break;
+            case DGM_TOKEN( orgChart ):
+                mrPoint.mbOrgChartEnabled = aAttribs.getBool( XML_val, false );
+                break;
+            case DGM_TOKEN( resizeHandles ):
+                mrPoint.mnResizeHandles = aAttribs.getToken( XML_val, XML_rel );
+                break;
+            default:
+                break;
         }
+        if( !xRet.is() )
+            xRet.set( this );
+        return xRet;
+    }
+
+private:
+    dgm::Point& mrPoint;
+};
+
+
+// CT_prSet
+class PropertiesContext
+    : public ContextHandler
+{
+public:
+    PropertiesContext( ContextHandler& rParent,
+                       dgm::Point & rPoint,
+                       const Reference< XFastAttributeList >& xAttribs ) :
+        ContextHandler( rParent ),
+        mrPoint( rPoint )
+    {
+        OUString aEmptyStr;
+        AttributeList aAttribs( xAttribs );
+
+        mrPoint.msColorTransformCategoryId = aAttribs.getString( XML_csCatId, aEmptyStr );
+        mrPoint.msColorTransformTypeId = aAttribs.getString( XML_csTypeId, aEmptyStr );
+        mrPoint.msLayoutCategoryId = aAttribs.getString( XML_loCatId, aEmptyStr );
+        mrPoint.msLayoutTypeId = aAttribs.getString( XML_loTypeId, aEmptyStr );
+        mrPoint.msPlaceholderText = aAttribs.getString( XML_phldrT, aEmptyStr );
+        mrPoint.msPresentationAssociationId = aAttribs.getString( XML_presAssocID, aEmptyStr );
+        mrPoint.msPresentationLayoutName = aAttribs.getString( XML_presName, aEmptyStr );
+        mrPoint.msPresentationLayoutStyleLabel = aAttribs.getString( XML_presStyleLbl, aEmptyStr );
+        mrPoint.msQuickStyleCategoryId = aAttribs.getString( XML_qsCatId, aEmptyStr );
+        mrPoint.msQuickStyleTypeId = aAttribs.getString( XML_qsTypeId, aEmptyStr );
+
+        mrPoint.mnCustomAngle = aAttribs.getInteger( XML_custAng, -1 );
+        mrPoint.mnPercentageNeighbourWidth = aAttribs.getInteger( XML_custLinFactNeighborX, -1 );
+        mrPoint.mnPercentageNeighbourHeight = aAttribs.getInteger( XML_custLinFactNeighborY, -1 );
+        mrPoint.mnPercentageOwnWidth = aAttribs.getInteger( XML_custLinFactX, -1 );
+        mrPoint.mnPercentageOwnHeight = aAttribs.getInteger( XML_custLinFactY, -1 );
+        mrPoint.mnIncludeAngleScale = aAttribs.getInteger( XML_custRadScaleInc, -1 );
+        mrPoint.mnRadiusScale = aAttribs.getInteger( XML_custRadScaleRad, -1 );
+        mrPoint.mnWidthScale = aAttribs.getInteger( XML_custScaleX, -1 );
+        mrPoint.mnHeightScale = aAttribs.getInteger( XML_custScaleY, -1 );
+        mrPoint.mnWidthOverride = aAttribs.getInteger( XML_custSzX, -1 );
+        mrPoint.mnHeightOverride = aAttribs.getInteger( XML_custSzY, -1 );
+        mrPoint.mnLayoutStyleCount = aAttribs.getInteger( XML_presStyleCnt, -1 );
+        mrPoint.mnLayoutStyleIndex = aAttribs.getInteger( XML_presStyleIdx, -1 );
+
+        mrPoint.mbCoherent3DOffset = aAttribs.getBool( XML_coherent3DOff, false );
+        mrPoint.mbCustomHorizontalFlip = aAttribs.getBool( XML_custFlipHor, false );
+        mrPoint.mbCustomVerticalFlip = aAttribs.getBool( XML_custFlipVert, false );
+        mrPoint.mbCustomText = aAttribs.getBool( XML_custT, false );
+        mrPoint.mbIsPlaceholder = aAttribs.getBool( XML_phldr, false );
+    }
+
     virtual Reference< XFastContextHandler > SAL_CALL
     createFastChildContext( sal_Int32 aElementToken,
-                            const Reference< XFastAttributeList >& xAttribs )
+                            const Reference< XFastAttributeList >& )
         throw (SAXException, RuntimeException)
         {
             Reference< XFastContextHandler > xRet;
 
             switch( aElementToken )
             {
-            case DGM_TOKEN( cxn ):
+            case DGM_TOKEN( presLayoutVars ):
             {
-                dgm::ConnectionPtr pConnection( new dgm::Connection() );
-                maConnections.push_back( pConnection );
-                xRet.set( new CxnContext( *this, xAttribs, pConnection ) );
+                xRet.set( new PresLayoutVarsContext( *this, mrPoint ) );
                 break;
             }
+            case DGM_TOKEN( style ):
+            {
+                // TODO
+                // skip CT_shapeStyle
+                return xRet;
+            }
             default:
                 break;
             }
@@ -120,11 +226,10 @@ public:
         }
 
 private:
-    dgm::Connections  & maConnections;
+    dgm::Point& mrPoint;
 };
 
 
-
 // CL_Pt
 class PtContext
     : public ContextHandler
@@ -132,27 +237,25 @@ class PtContext
 public:
     PtContext( ContextHandler& rParent,
                const Reference< XFastAttributeList >& xAttribs,
-               const dgm::PointPtr & pPoint)
-        : ContextHandler( rParent )
-        , mpPoint( pPoint )
-        {
-            mpPoint->setModelId( xAttribs->getOptionalValue( XML_modelId ) );
-            //
-            // the default type is XML_node
-            sal_Int32 nType  = xAttribs->getOptionalValueToken( XML_type, XML_node );
-            mpPoint->setType( nType );
-
-            // ignore the cxnId unless it is this type. See 5.15.3.1.3 in Primer
-            if( ( nType == XML_parTrans ) || ( nType == XML_sibTrans ) )
-            {
-                mpPoint->setCnxId( xAttribs->getOptionalValue( XML_cxnId ) );
-            }
-        }
+               dgm::Point & rPoint):
+        ContextHandler( rParent ),
+        mrPoint( rPoint )
+    {
+        mrPoint.msModelId = xAttribs->getOptionalValue( XML_modelId );
+
+        // the default type is XML_node
+        const sal_Int32 nType  = xAttribs->getOptionalValueToken( XML_type, XML_node );
+        mrPoint.mnType = nType;
+
+        // ignore the cxnId unless it is this type. See 5.15.3.1.3 in Primer
+        if( ( nType == XML_parTrans ) || ( nType == XML_sibTrans ) )
+            mrPoint.msCnxId = xAttribs->getOptionalValue( XML_cxnId );
+    }
 
 
     virtual Reference< XFastContextHandler > SAL_CALL
     createFastChildContext( sal_Int32 aElementToken,
-                            const Reference< XFastAttributeList >& /*xAttribs*/ )
+                            const Reference< XFastAttributeList >& xAttribs )
         throw (SAXException, RuntimeException)
         {
             Reference< XFastContextHandler > xRet;
@@ -162,18 +265,22 @@ public:
             case DGM_TOKEN( extLst ):
                 return xRet;
             case DGM_TOKEN( prSet ):
-                // TODO
-                // CT_ElemPropSet
+                OSL_TRACE( "diagram property set for point");
+                xRet = new PropertiesContext( *this, mrPoint, xAttribs );
                 break;
             case DGM_TOKEN( spPr ):
                 OSL_TRACE( "shape props for point");
-                xRet = new ShapePropertiesContext( *this, *mpPoint->getShape() );
+                if( !mrPoint.mpShape )
+                    mrPoint.mpShape.reset( new Shape() );
+                xRet = new ShapePropertiesContext( *this, *(mrPoint.mpShape) );
                 break;
             case DGM_TOKEN( t ):
             {
                 OSL_TRACE( "shape text body for point");
                 TextBodyPtr xTextBody( new TextBody );
-                mpPoint->getShape()->setTextBody( xTextBody );
+                if( !mrPoint.mpShape )
+                    mrPoint.mpShape.reset( new Shape() );
+                mrPoint.mpShape->setTextBody( xTextBody );
                 xRet = new TextBodyContext( *this, *xTextBody );
                 break;
             }
@@ -186,7 +293,7 @@ public:
         }
 
 private:
-    dgm::PointPtr mpPoint;
+    dgm::Point& mrPoint;
 };
 
 
@@ -196,11 +303,10 @@ class PtListContext
     : public ContextHandler
 {
 public:
-    PtListContext( ContextHandler& rParent,  dgm::Points & aPoints)
-        : ContextHandler( rParent )
-        , maPoints( aPoints )
-        {
-        }
+    PtListContext( ContextHandler& rParent,  dgm::Points& rPoints) :
+        ContextHandler( rParent ),
+        mrPoints( rPoints )
+    {}
     virtual Reference< XFastContextHandler > SAL_CALL
     createFastChildContext( sal_Int32 aElementToken,
                             const Reference< XFastAttributeList >& xAttribs )
@@ -213,9 +319,8 @@ public:
             case DGM_TOKEN( pt ):
             {
                 // CT_Pt
-                dgm::PointPtr pPoint( new dgm::Point() );
-                maPoints.push_back( pPoint );
-                xRet.set( new PtContext( *this, xAttribs, pPoint ) );
+                mrPoints.push_back( dgm::Point() );
+                xRet.set( new PtContext( *this, xAttribs, mrPoints.back() ) );
                 break;
             }
             default:
@@ -227,7 +332,7 @@ public:
         }
 
 private:
-    dgm::Points  & maPoints;
+    dgm::Points& mrPoints;
 };
 
 // CT_BackgroundFormatting
diff --git a/oox/source/drawingml/diagram/datamodelcontext.hxx b/oox/source/drawingml/diagram/datamodelcontext.hxx
new file mode 100644
index 0000000..96a654a
--- /dev/null
+++ b/oox/source/drawingml/diagram/datamodelcontext.hxx
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_DRAWINGML_SHAPECONTEXT_HXX
+#define OOX_DRAWINGML_SHAPECONTEXT_HXX
+
+#include <com/sun/star/drawing/XShapes.hpp>
+
+#include "oox/core/contexthandler.hxx"
+#include "diagram.hxx"
+
+namespace oox { namespace drawingml {
+
+// CT_DataModel
+class DataModelContext : public ::oox::core::ContextHandler
+{
+public:
+    DataModelContext( ::oox::core::ContextHandler& rParent, const DiagramDataPtr & pDataModelPtr );
+    virtual ~DataModelContext();
+
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
+
+protected:
+    DiagramDataPtr mpDataModel;
+};
+
+} }
+
+#endif  //  OOX_DRAWINGML_SHAPEGROUPCONTEXT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx
index 30c6e5b..5c0e079 100644
--- a/oox/source/drawingml/diagram/diagram.cxx
+++ b/oox/source/drawingml/diagram/diagram.cxx
@@ -32,9 +32,21 @@
 
 #include <com/sun/star/awt/Point.hpp>
 #include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/xml/dom/XDocument.hpp>
+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
+#include <rtl/ustrbuf.hxx>
+#include "oox/drawingml/textbody.hxx"
+#include "oox/drawingml/textparagraph.hxx"
+#include "oox/drawingml/textrun.hxx"
 #include "oox/drawingml/diagram/diagram.hxx"
 #include "oox/drawingml/fillproperties.hxx"
 
+#include "diagramlayoutatoms.hxx"
+#include "diagramfragmenthandler.hxx"
+
+#include <iostream>
+#include <fstream>
+
 using rtl::OUString;
 using namespace ::com::sun::star;
 
@@ -45,58 +57,26 @@ namespace dgm {
 
 void Connection::dump()
 {
-    OSL_TRACE("dgm: cnx modelId %s, srcId %s, dstId %s",
+    OSL_TRACE("dgm: cnx modelId %s, srcId %s, dstId %s, parTransId %s, presId %s, sibTransId %s, srcOrd %d, dstOrd %d",
               OUSTRING_TO_CSTR( msModelId ),
               OUSTRING_TO_CSTR( msSourceId ),
-              OUSTRING_TO_CSTR( msDestId ) );
-}
-
-Point::Point()
-    : mpShape( new Shape( "com.sun.star.drawing.GraphicObjectShape" ) )
-    , mnType( 0 )
-{
+              OUSTRING_TO_CSTR( msDestId ),
+              OUSTRING_TO_CSTR( msParTransId ),
+              OUSTRING_TO_CSTR( msPresId ),
+              OUSTRING_TO_CSTR( msSibTransId ),
+              mnSourceOrder,
+              mnDestOrder );
 }
 
 void Point::dump()
 {
-    OSL_TRACE( "dgm: pt cnxId %s, modelId %s",
+    OSL_TRACE( "dgm: pt text %x, cnxId %s, modelId %s, type %d",
+               mpShape.get(),
                OUSTRING_TO_CSTR( msCnxId ),
-               OUSTRING_TO_CSTR( msModelId ) );
-}
-
-void Point::setModelId( const ::rtl::OUString & sModelId )
-{
-    msModelId = sModelId;
-    mpShape->setName( msModelId );
-}
-
-
-bool PointsTree::addChild( const PointsTreePtr & pChild )
-{
-    bool added = false;
-
-    OSL_ENSURE( pChild->mpParent.expired(), "can't add, has already a parent" );
-    OSL_ENSURE( mpNode, "has no node" );
-    if( mpNode && pChild->mpParent.expired() )
-    {
-        pChild->mpParent = shared_from_this();
-        maChildrens.push_back( pChild );
-        added = true;
-    }
-
-    return added;
-}
-
-PointsTreePtr PointsTree::getParent() const
-{
-    if( !mpParent.expired() )
-    {
-        return mpParent.lock() ;
-    }
-    return PointsTreePtr();
+               OUSTRING_TO_CSTR( msModelId ),
+               mnType );
 }
 
-
 } // dgm namespace
 
 DiagramData::DiagramData()
@@ -114,27 +94,8 @@ void DiagramData::dump()
                   boost::bind( &dgm::Point::dump, _1 ) );
 }
 
-static void setPosition( const dgm::PointPtr & pPoint, const awt::Point & pt )
-{
-    ShapePtr pShape = pPoint->getShape();
-    awt::Size sz;
-    sz.Width = 50;
-    sz.Height = 50;
-    pShape->setPosition( pt );
-    pShape->setSize( sz );
-}
-
-void DiagramLayout::layout( const dgm::PointsTreePtr & pTree, const awt::Point & pt )
+void DiagramLayout::layout( const dgm::Points & /*pTree*/, const awt::Point & /*pt*/ )
 {
-    setPosition( pTree->getPoint(), pt );
-    awt::Point nextPt = pt;
-    nextPt.Y += 50;
-    dgm::PointsTree::Childrens::const_iterator iter;
-    for( iter = pTree->beginChild(); iter != pTree->endChild(); ++iter )
-    {
-        layout( *iter, nextPt );
-        nextPt.X += 50;
-    }
 }
 
 void Diagram::setData( const DiagramDataPtr & pData)
@@ -148,140 +109,237 @@ void Diagram::setLayout( const DiagramLayoutPtr & pLayout)
     mpLayout = pLayout;
 }
 
-void Diagram::setQStyles( const DiagramQStylesPtr & pStyles)
+#if OSL_DEBUG_LEVEL > 1
+rtl::OString normalizeDotName( const rtl::OUString& rStr )
 {
-    mpQStyles = pStyles;
-}
+    rtl::OUStringBuffer aBuf;
+    aBuf.append((sal_Unicode)'N');
 
+    const sal_Int32 nLen(rStr.getLength());
+    sal_Int32 nCurrIndex(0);
+    while( nCurrIndex < nLen )
+    {
+        const sal_Int32 aChar=rStr.iterateCodePoints(&nCurrIndex);
+        if( aChar != '-' && aChar != '{' && aChar != '}' )
+            aBuf.append((sal_Unicode)aChar);
+    }
 
-void Diagram::setColors( const DiagramColorsPtr & pColors)
-{
-    mpColors = pColors;
+    return rtl::OUStringToOString(aBuf.makeStringAndClear(),
+                                  RTL_TEXTENCODING_UTF8);
 }
+#endif
 
-void Diagram::build(  )
+static sal_Int32 calcDepth( const rtl::OUString& rNodeName,
+                            const dgm::Connections& rCnx )
 {
-    OSL_TRACE( "building diagram" );
-    typedef std::map< OUString, dgm::PointPtr > PointsMap;
-    PointsMap aPointsMap;
-    dgm::Points::iterator aPointsIter( mpData->getPoints( ).begin() );
-    for( ; aPointsIter != mpData->getPoints( ).end() ; aPointsIter++ )
+    // find length of longest path in 'isChild' graph, ending with rNodeName
+    dgm::Connections::const_iterator aCurrCxn( rCnx.begin() );
+    const dgm::Connections::const_iterator aEndCxn( rCnx.end() );
+    while( aCurrCxn != aEndCxn )
     {
-        const OUString & sName((*aPointsIter)->getModelId());
-        if( sName.getLength() > 0 )
+        if( aCurrCxn->msParTransId.getLength() &&
+            aCurrCxn->msSibTransId.getLength() &&
+            aCurrCxn->msSourceId.getLength() &&
+            aCurrCxn->msDestId.getLength() &&
+            aCurrCxn->mnType != XML_presOf &&
+            aCurrCxn->mnType != XML_presParOf &&
+            rNodeName == aCurrCxn->msDestId )
         {
-            aPointsMap[ sName ] = *aPointsIter;
+            return calcDepth(aCurrCxn->msSourceId,
+                             rCnx) + 1;
         }
+        ++aCurrCxn;
     }
 
-    typedef std::map< OUString, dgm::PointsTreePtr > PointsTreeMap;
-    PointsTreeMap aTreeMap;
-    PointsTreeMap aRoots;
+    return 0;
+}
+
+

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list