summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorsten Behrens <tbehrens@novell.com>2011-11-22 12:21:19 +0100
committerThorsten Behrens <tbehrens@novell.com>2011-11-22 12:21:19 +0100
commitb373963d0fc030f7d31a7c6788af24f299fdf3a2 (patch)
tree2b80fea819b11006b1d9c84afae65ae6fab9077e
parent5f88396b4c877ff8c1b0c109357dc26729d62663 (diff)
oox-smartart-import got committed to master, removing.
-rw-r--r--patches/dev300/apply1
-rw-r--r--patches/dev300/oox-smartart-import.diff6340
2 files changed, 0 insertions, 6341 deletions
diff --git a/patches/dev300/apply b/patches/dev300/apply
index 191468879..3a154e779 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -1064,7 +1064,6 @@ oox-xlsx-import-fix-connector-shape.diff, n#549331, Fong
# oox-import-zoom-setting-with-tab-color.diff, n#494603, janneke
oox-drawingml-fix-apply-shape-reference-crash.diff, n#593611, rodo
-oox-smartart-import.diff, thorsten
[ PostgreSQL ]
sdbc-postgresql.diff
diff --git a/patches/dev300/oox-smartart-import.diff b/patches/dev300/oox-smartart-import.diff
deleted file mode 100644
index a47144de2..000000000
--- a/patches/dev300/oox-smartart-import.diff
+++ /dev/null
@@ -1,6340 +0,0 @@
-OOXML smartart import (somewhat)
-
-From: Thorsten Behrens <thb@openoffice.org>
-
-
----
-
- 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 | 2
- oox/inc/oox/drawingml/diagram/datamodelcontext.hxx | 54 --
- oox/inc/oox/drawingml/diagram/diagram.hxx | 242 +------
- .../drawingml/diagram/diagramfragmenthandler.hxx | 100 ---
- .../oox/drawingml/diagram/diagramlayoutatoms.hxx | 209 ------
- 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 | 34 +
- 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/facreg.cxx | 6
- oox/source/core/filterbase.cxx | 9
- oox/source/core/xmlfilterbase.cxx | 164 ++++-
- 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
- .../drawingml/diagram/constraintlistcontext.cxx | 102 +++
- .../drawingml/diagram/constraintlistcontext.hxx | 54 ++
- oox/source/drawingml/diagram/datamodelcontext.cxx | 232 +++++--
- oox/source/drawingml/diagram/datamodelcontext.hxx | 57 ++
- oox/source/drawingml/diagram/diagram.cxx | 498 ++++++++++++--
- oox/source/drawingml/diagram/diagram.hxx | 320 +++++++++
- .../drawingml/diagram/diagramdefinitioncontext.cxx | 13
- .../drawingml/diagram/diagramdefinitioncontext.hxx | 2
- .../drawingml/diagram/diagramfragmenthandler.cxx | 183 +++--
- .../drawingml/diagram/diagramfragmenthandler.hxx | 117 +++
- .../drawingml/diagram/diagramlayoutatoms.cxx | 689 +++++++++++++++++++-
- .../drawingml/diagram/diagramlayoutatoms.hxx | 318 +++++++++
- oox/source/drawingml/diagram/layoutnodecontext.cxx | 146 +++-
- oox/source/drawingml/diagram/layoutnodecontext.hxx | 3
- oox/source/drawingml/diagram/makefile.mk | 1
- oox/source/drawingml/drawingmltypes.cxx | 4
- oox/source/drawingml/fillproperties.cxx | 3
- oox/source/drawingml/graphicshapecontext.cxx | 58 --
- oox/source/drawingml/lineproperties.cxx | 5
- oox/source/drawingml/makefile.mk | 1
- oox/source/drawingml/scene3dcontext.cxx | 189 +++++
- oox/source/drawingml/shape.cxx | 42 +
- oox/source/drawingml/shape3dproperties.cxx | 67 ++
- oox/source/drawingml/shapepropertiescontext.cxx | 6
- oox/source/drawingml/textparagraph.cxx | 9
- oox/source/drawingml/textparagraphproperties.cxx | 1
- oox/source/helper/storagebase.cxx | 20 -
- oox/source/ppt/dgmimport.cxx | 135 ++++
- oox/source/ppt/dgmlayout.cxx | 193 ++++++
- oox/source/ppt/makefile.mk | 2
- oox/source/ppt/pptimport.cxx | 4
- oox/source/ppt/presentationfragmenthandler.cxx | 13
- oox/source/ppt/slidepersist.cxx | 11
- 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 | 5
- sc/source/filter/inc/xestream.hxx | 2
- sw/source/filter/ww8/docxexportfilter.hxx | 2
- 77 files changed, 5401 insertions(+), 992 deletions(-)
- delete mode 100644 oox/inc/oox/drawingml/diagram/datamodelcontext.hxx
- delete mode 100644 oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx
- delete mode 100644 oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx
- create mode 100644 oox/inc/oox/drawingml/scene3dcontext.hxx
- create mode 100644 oox/inc/oox/drawingml/shape3dproperties.hxx
- create mode 100644 oox/inc/oox/ppt/dgmimport.hxx
- create mode 100644 oox/inc/oox/ppt/dgmlayout.hxx
- create mode 100644 oox/source/drawingml/diagram/constraintlistcontext.cxx
- create mode 100644 oox/source/drawingml/diagram/constraintlistcontext.hxx
- create mode 100644 oox/source/drawingml/diagram/datamodelcontext.hxx
- create mode 100644 oox/source/drawingml/diagram/diagram.hxx
- create mode 100644 oox/source/drawingml/diagram/diagramfragmenthandler.hxx
- create mode 100644 oox/source/drawingml/diagram/diagramlayoutatoms.hxx
- create mode 100644 oox/source/drawingml/scene3dcontext.cxx
- create mode 100644 oox/source/drawingml/shape3dproperties.cxx
- create mode 100644 oox/source/ppt/dgmimport.cxx
- create mode 100644 oox/source/ppt/dgmlayout.cxx
-
-
-diff --git oox/inc/oox/core/filterbase.hxx oox/inc/oox/core/filterbase.hxx
-index d54c534..3dc372a 100644
---- oox/inc/oox/core/filterbase.hxx
-+++ oox/inc/oox/core/filterbase.hxx
-@@ -50,6 +50,7 @@ namespace com { namespace sun { namespace star {
- namespace task { class XStatusIndicator; }
- namespace task { class XInteractionHandler; }
- namespace frame { class XFrame; }
-+ namespace drawing { class XShape; }
- namespace io { class XInputStream; }
- namespace io { class XOutputStream; }
- namespace io { class XStream; }
-@@ -133,6 +134,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 oox/inc/oox/core/xmlfilterbase.hxx oox/inc/oox/core/xmlfilterbase.hxx
-index 0d747ef..8659ec1 100644
---- oox/inc/oox/core/xmlfilterbase.hxx
-+++ oox/inc/oox/core/xmlfilterbase.hxx
-@@ -42,8 +42,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 { namespace drawingml { class Theme; } }
-@@ -89,7 +91,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;
-@@ -107,6 +109,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 oox/inc/oox/drawingml/chart/converterbase.hxx oox/inc/oox/drawingml/chart/converterbase.hxx
-index 5c26d73..c1c8986 100644
---- oox/inc/oox/drawingml/chart/converterbase.hxx
-+++ 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 oox/inc/oox/drawingml/customshapeproperties.hxx oox/inc/oox/drawingml/customshapeproperties.hxx
-index 66c4c38..6b63352 100644
---- oox/inc/oox/drawingml/customshapeproperties.hxx
-+++ oox/inc/oox/drawingml/customshapeproperties.hxx
-@@ -124,6 +124,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 oox/inc/oox/drawingml/diagram/datamodelcontext.hxx oox/inc/oox/drawingml/diagram/datamodelcontext.hxx
-deleted file mode 100644
-index 6437482..0000000
---- 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 oox/inc/oox/drawingml/diagram/diagram.hxx oox/inc/oox/drawingml/diagram/diagram.hxx
-index ef60545..e81a216 100644
---- oox/inc/oox/drawingml/diagram/diagram.hxx
-+++ oox/inc/oox/drawingml/diagram/diagram.hxx
-@@ -25,232 +25,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 oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx
-deleted file mode 100644
-index 5a42a46..0000000
---- 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 oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx
-deleted file mode 100644
-index ae25085..0000000
---- 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 oox/inc/oox/drawingml/drawingmltypes.hxx oox/inc/oox/drawingml/drawingmltypes.hxx
-index c513446..b18414f 100644
---- oox/inc/oox/drawingml/drawingmltypes.hxx
-+++ oox/inc/oox/drawingml/drawingmltypes.hxx
-@@ -58,6 +58,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 oox/inc/oox/drawingml/graphicshapecontext.hxx oox/inc/oox/drawingml/graphicshapecontext.hxx
-index c7239fc..ea49d47 100644
---- oox/inc/oox/drawingml/graphicshapecontext.hxx
-+++ oox/inc/oox/drawingml/graphicshapecontext.hxx
-@@ -30,7 +30,6 @@
-
- #include "oox/drawingml/shape.hxx"
- #include "oox/drawingml/shapecontext.hxx"
--#include "oox/drawingml/diagram/diagram.hxx"
-
- namespace oox { namespace vml { struct OleObjectInfo; } }
-
-@@ -73,6 +72,8 @@ private:
-
- // ====================================================================
-
-+class Diagram;
-+
- class DiagramGraphicDataContext
- : public ShapeContext
- {
-@@ -82,8 +83,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 oox/inc/oox/drawingml/scene3dcontext.hxx oox/inc/oox/drawingml/scene3dcontext.hxx
-new file mode 100644
-index 0000000..c64bbf3
---- /dev/null
-+++ 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 oox/inc/oox/drawingml/shape.hxx oox/inc/oox/drawingml/shape.hxx
-index 2780fcd..65380c2 100644
---- oox/inc/oox/drawingml/shape.hxx
-+++ oox/inc/oox/drawingml/shape.hxx
-@@ -32,6 +32,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>
-@@ -95,7 +96,8 @@ class Shape
- {
- public:
-
-- Shape( const sal_Char* pServiceType = NULL );
-+ explicit Shape( const sal_Char* pServiceType = NULL );
-+ explicit Shape( const ShapePtr& pSourceShape );
- virtual ~Shape();
-
- rtl::OUString& getServiceName(){ return msServiceName; }
-@@ -114,13 +116,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 ); }
-@@ -155,6 +164,13 @@ public:
- const ::com::sun::star::awt::Rectangle* pShapeRect = 0,
- ShapeIdMap* pShapeMap = 0 );
-
-+ void addChildren(
-+ const ::oox::core::XmlFilterBase& rFilterBase,
-+ const Theme* pTheme,
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes,
-+ 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 > &
-@@ -193,6 +204,7 @@ protected:
- GraphicPropertiesPtr mpGraphicPropertiesPtr;
- CustomShapePropertiesPtr mpCustomShapePropertiesPtr;
- table::TablePropertiesPtr mpTablePropertiesPtr;
-+ Shape3DPropertiesPtr mp3DPropertiesPtr;
- PropertyMap maShapeProperties;
- PropertyMap maDefaultShapeProperties;
- TextListStylePtr mpMasterTextListStyle;
-@@ -216,7 +228,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 oox/inc/oox/drawingml/shape3dproperties.hxx oox/inc/oox/drawingml/shape3dproperties.hxx
-new file mode 100644
-index 0000000..2fe82aa
---- /dev/null
-+++ 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 oox/inc/oox/drawingml/theme.hxx oox/inc/oox/drawingml/theme.hxx
-index 30a6aa1..903ff1d 100644
---- oox/inc/oox/drawingml/theme.hxx
-+++ 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 oox/inc/oox/ppt/dgmimport.hxx oox/inc/oox/ppt/dgmimport.hxx
-new file mode 100644
-index 0000000..955b1fa
---- /dev/null
-+++ 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 "tokens.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::lang::XMultiServiceFactory > & rSMgr );
-+
-+ // 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;
-+};
-+
-+} }
-+
-+#endif // OOX_POWERPOINT_QUICKDIAGRAMMINGIMPORT_HXX
-diff --git oox/inc/oox/ppt/dgmlayout.hxx oox/inc/oox/ppt/dgmlayout.hxx
-new file mode 100644
-index 0000000..8e3847b
---- /dev/null
-+++ 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 "tokens.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::lang::XMultiServiceFactory > & rSMgr );
-+
-+ // 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;
-+ drawingml::ThemePtr mpThemePtr;
-+};
-+
-+} }
-+
-+#endif // OOX_POWERPOINT_QUICKDIAGRAMMINGLAYOUT_HXX
-diff --git oox/inc/oox/ppt/pptimport.hxx oox/inc/oox/ppt/pptimport.hxx
-index 0ac93dd..dadfa1e 100644
---- oox/inc/oox/ppt/pptimport.hxx
-+++ oox/inc/oox/ppt/pptimport.hxx
-@@ -56,7 +56,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 oox/inc/oox/xls/excelfilter.hxx oox/inc/oox/xls/excelfilter.hxx
-index 49a0c85..3f72d7a 100644
---- oox/inc/oox/xls/excelfilter.hxx
-+++ oox/inc/oox/xls/excelfilter.hxx
-@@ -68,7 +68,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 oox/inc/oox/xls/workbookhelper.hxx oox/inc/oox/xls/workbookhelper.hxx
-index 99857ea..65d89a2 100644
---- oox/inc/oox/xls/workbookhelper.hxx
-+++ oox/inc/oox/xls/workbookhelper.hxx
-@@ -253,7 +253,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 oox/source/core/facreg.cxx oox/source/core/facreg.cxx
-index 50a2a54..f6c0427 100644
---- oox/source/core/facreg.cxx
-+++ oox/source/core/facreg.cxx
-@@ -57,6 +57,8 @@ extern uno::Reference< uno::XInterface > SAL_CALL className##_createInstance(
- namespace oox {
- namespace core { SERVICE( FilterDetect ); }
- namespace ppt { SERVICE( PowerPointImport ); }
-+ namespace ppt { SERVICE( QuickDiagrammingImport ); }
-+ namespace ppt { SERVICE( QuickDiagrammingLayout ); }
- namespace xls { SERVICE( BiffDetector ); }
- namespace xls { SERVICE( ExcelFilter ); }
- namespace xls { SERVICE( ExcelBiffFilter ); }
-@@ -100,6 +102,8 @@ OOX_DLLPUBLIC sal_Bool SAL_CALL component_writeInfo( void * , void * pRegistryKe
-
- WRITEINFO( ::oox::core::FilterDetect );
- WRITEINFO( ::oox::ppt::PowerPointImport );
-+ WRITEINFO( ::oox::ppt::QuickDiagrammingImport );
-+ WRITEINFO( ::oox::ppt::QuickDiagrammingLayout );
- WRITEINFO( ::oox::xls::BiffDetector );
- WRITEINFO( ::oox::xls::ExcelFilter );
- WRITEINFO( ::oox::xls::ExcelBiffFilter );
-@@ -148,6 +152,8 @@ OOX_DLLPUBLIC void * SAL_CALL component_getFactory( const sal_Char * pImplName,
-
- SINGLEFACTORY( ::oox::core::FilterDetect )
- else SINGLEFACTORY( oox::ppt::PowerPointImport )
-+ else SINGLEFACTORY( oox::ppt::QuickDiagrammingImport )
-+ else SINGLEFACTORY( oox::ppt::QuickDiagrammingLayout )
- else SINGLEFACTORY( ::oox::xls::BiffDetector )
- else SINGLEFACTORY( ::oox::xls::ExcelFilter )
- else SINGLEFACTORY( ::oox::xls::ExcelBiffFilter )
-diff --git oox/source/core/filterbase.cxx oox/source/core/filterbase.cxx
-index 46075bc..09d4764 100644
---- oox/source/core/filterbase.cxx
-+++ oox/source/core/filterbase.cxx
-@@ -31,6 +31,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 <osl/mutex.hxx>
- #include <rtl/instance.hxx>
- #include <rtl/uri.hxx>
-@@ -62,6 +63,7 @@ using ::com::sun::star::io::XInputStream;
- using ::com::sun::star::io::XOutputStream;
- using ::com::sun::star::io::XStream;
- using ::com::sun::star::task::XStatusIndicator;
-+using ::com::sun::star::drawing::XShape;
- using ::com::sun::star::task::XInteractionHandler;
- using ::com::sun::star::graphic::XGraphic;
- using ::com::sun::star::container::XNameAccess;
-@@ -155,6 +157,7 @@ struct FilterBaseImpl
- Reference< XStream > mxOutStream;
- Reference< XStatusIndicator > mxStatusIndicator;
- Reference< XInteractionHandler > mxInteractionHandler;
-+ Reference< XShape > mxParentShape;
-
- explicit FilterBaseImpl( const Reference< XMultiServiceFactory >& rxGlobalFactory );
-
-@@ -266,6 +269,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;
-@@ -560,6 +568,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 oox/source/core/xmlfilterbase.cxx oox/source/core/xmlfilterbase.cxx
-index 5ee4052..615cc8f 100644
---- oox/source/core/xmlfilterbase.cxx
-+++ oox/source/core/xmlfilterbase.cxx
-@@ -31,10 +31,14 @@
-
- #include <rtl/strbuf.hxx>
- #include <rtl/ustrbuf.hxx>
-+#include <rtl/instance.hxx>
- #include <com/sun/star/container/XNameContainer.hpp>
- #include <com/sun/star/embed/XRelationshipAccess.hpp>
-+#include <com/sun/star/xml/dom/XDocument.hpp>
-+#include <com/sun/star/xml/dom/XDocumentBuilder.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>
-@@ -54,6 +58,7 @@ using ::rtl::OStringBuffer;
- using ::rtl::OUString;
- using ::rtl::OUStringBuffer;
- using ::com::sun::star::beans::StringPair;
-+using ::com::sun::star::beans::Pair;
- using ::com::sun::star::uno::Reference;
- using ::com::sun::star::uno::Sequence;
- using ::com::sun::star::uno::Exception;
-@@ -74,11 +79,14 @@ using ::com::sun::star::xml::sax::XFastTokenHandler;
- using ::com::sun::star::xml::sax::XFastDocumentHandler;
- using ::com::sun::star::xml::sax::InputSource;
- using ::com::sun::star::xml::sax::SAXException;
-+using ::com::sun::star::xml::dom::XDocument;
-+using ::com::sun::star::xml::dom::XDocumentBuilder;
- using ::com::sun::star::document::XDocumentProperties;
- using ::com::sun::star::util::DateTime;
- using ::comphelper::MediaDescriptor;
- using ::sax_fastparser::FastSerializerHelper;
- using ::sax_fastparser::FSHelperPtr;
-+using namespace ::com::sun::star;
-
-
- #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
-@@ -118,6 +126,8 @@ struct XmlFilterBaseImpl
- typedef RefMap< OUString, Relations > RelationsMap;
-
- Reference< XFastParser > mxFastParser;
-+ Reference< XFastTokenHandler >
-+ mxTokenHandler;
- OUString maBinSuffix;
- OUString maVmlSuffix;
- RelationsMap maRelationsMap;
-@@ -151,6 +161,66 @@ static Reference< XComponentContext > lcl_getComponentContext(Reference< XMultiS
-
- // ============================================================================
-
-+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_PACKAGE_RELATIONSHIPS,
-+ NMSP_RELATIONSHIPS,
-+ NMSP_DRAWINGML,
-+ NMSP_DIAGRAM,
-+ NMSP_CHART,
-+ NMSP_CDR,
-+ NMSP_VML,
-+ NMSP_OFFICE,
-+ NMSP_VML_DOC,
-+ NMSP_VML_XLS,
-+ NMSP_VML_PPT,
-+ NMSP_AX,
-+ NMSP_XLS,
-+ NMSP_XDR,
-+ NMSP_XM,
-+ NMSP_PPT
-+ };
-+
-+ Sequence< Pair< OUString, sal_Int32 > > aRet(STATIC_ARRAY_SIZE(namespaceIds));
-+ for( sal_Int32 i=0; i<aRet.getLength(); ++i )
-+ aRet[i] = beans::make_Pair(
-+ ::rtl::OUString::createFromAscii(namespaceURIs[i]),
-+ namespaceIds[i]);
-+ return aRet;
-+ }
-+ };
-+}
-+
-+// ============================================================================
-+
- XmlFilterBase::XmlFilterBase( const Reference< XMultiServiceFactory >& rxGlobalFactory ) :
- FilterBase( rxGlobalFactory ),
- mxImpl( new XmlFilterBaseImpl ),
-@@ -159,32 +228,18 @@ XmlFilterBase::XmlFilterBase( const Reference< XMultiServiceFactory >& rxGlobalF
- {
- try
- {
-+ // create the fast tokenhandler
-+ mxImpl->mxTokenHandler.set( new FastTokenHandler );
-+
- // create the fast parser
- mxImpl->mxFastParser.set( rxGlobalFactory->createInstance( CREATE_OUSTRING( "com.sun.star.xml.sax.FastParser" ) ), UNO_QUERY_THROW );
-- mxImpl->mxFastParser->setTokenHandler( new FastTokenHandler );
-+ mxImpl->mxFastParser->setTokenHandler( mxImpl->mxTokenHandler );
-
- // register XML namespaces
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://www.w3.org/XML/1998/namespace" ), NMSP_XML );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/package/2006/relationships" ), NMSP_PACKAGE_RELATIONSHIPS );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/officeDocument/2006/relationships" ), NMSP_RELATIONSHIPS );
--
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/drawingml/2006/main" ), NMSP_DRAWINGML );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/drawingml/2006/diagram" ), NMSP_DIAGRAM );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/drawingml/2006/chart" ), NMSP_CHART );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" ), NMSP_CDR );
--
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "urn:schemas-microsoft-com:vml" ), NMSP_VML );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "urn:schemas-microsoft-com:office:office" ), NMSP_OFFICE );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "urn:schemas-microsoft-com:office:word" ), NMSP_VML_DOC );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "urn:schemas-microsoft-com:office:excel" ), NMSP_VML_XLS );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "urn:schemas-microsoft-com:office:powerpoint" ), NMSP_VML_PPT );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.microsoft.com/office/2006/activeX" ), NMSP_AX );
--
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/spreadsheetml/2006/main"), NMSP_XLS );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" ), NMSP_XDR );
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.microsoft.com/office/excel/2006/main" ), NMSP_XM );
--
-- mxImpl->mxFastParser->registerNamespace( CREATE_OUSTRING( "http://schemas.openxmlformats.org/presentationml/2006/main"), NMSP_PPT );
-+ const Sequence< Pair< OUString, sal_Int32 > > ids=
-+ NamespaceIds::get();
-+ for( sal_Int32 i=0; i<ids.getLength(); ++i )
-+ mxImpl->mxFastParser->registerNamespace( ids[i].First, ids[i].Second );
- }
- catch( Exception& )
- {
-@@ -297,6 +352,66 @@ bool XmlFilterBase::importFragment( const ::rtl::Reference< FragmentHandler >& r
- return false;
- }
-
-+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<XDocumentBuilder> xDomBuilder(
-+ getGlobalFactory()->createInstance(
-+ CREATE_OUSTRING( "com.sun.star.xml.dom.DocumentBuilder" ) ),
-+ 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< xml::sax::XFastSAXSerializable >& rxSerializer )
-+{
-+ Reference< XFastDocumentHandler > xDocHandler( rxHandler.get() );
-+ if( !xDocHandler.is() )
-+ return false;
-+
-+ // try to import XML stream
-+ try
-+ {
-+ rxSerializer->fastSerialize( xDocHandler,
-+ mxImpl->mxTokenHandler,
-+ uno::Sequence< beans::StringPair >(),
-+ NamespaceIds::get() );
-+ return true;
-+ }
-+ catch( Exception& )
-+ {}
-+
-+ return false;
-+}
-+
- RelationsRef XmlFilterBase::importRelations( const OUString& rFragmentPath )
- {
- // try to find cached relations
-@@ -564,6 +679,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 oox/source/drawingml/chart/chartspaceconverter.cxx oox/source/drawingml/chart/chartspaceconverter.cxx
-index 591c556..bfeb136 100644
---- oox/source/drawingml/chart/chartspaceconverter.cxx
-+++ oox/source/drawingml/chart/chartspaceconverter.cxx
-@@ -70,9 +70,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 oox/source/drawingml/chart/converterbase.cxx oox/source/drawingml/chart/converterbase.cxx
-index 0f6b3d5..97cdeb8 100644
---- oox/source/drawingml/chart/converterbase.cxx
-+++ oox/source/drawingml/chart/converterbase.cxx
-@@ -261,9 +261,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 oox/source/drawingml/chart/datasourceconverter.cxx oox/source/drawingml/chart/datasourceconverter.cxx
-index c874720..4c5edb6 100644
---- oox/source/drawingml/chart/datasourceconverter.cxx
-+++ oox/source/drawingml/chart/datasourceconverter.cxx
-@@ -53,12 +53,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 oox/source/drawingml/clrscheme.cxx oox/source/drawingml/clrscheme.cxx
-index b620cd0..b91ae63 100644
---- oox/source/drawingml/clrscheme.cxx
-+++ oox/source/drawingml/clrscheme.cxx
-@@ -25,6 +25,7 @@
- *
- ************************************************************************/
-
-+#include <osl/diagnose.h>
- #include "oox/drawingml/clrscheme.hxx"
- #include "tokens.hxx"
-
-@@ -61,6 +62,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 oox/source/drawingml/color.cxx oox/source/drawingml/color.cxx
-index 964d171..a2d454e 100644
---- oox/source/drawingml/color.cxx
-+++ oox/source/drawingml/color.cxx
-@@ -381,6 +381,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 oox/source/drawingml/customshapegeometry.cxx oox/source/drawingml/customshapegeometry.cxx
-index 9c1293d..baeb4ac 100644
---- oox/source/drawingml/customshapegeometry.cxx
-+++ oox/source/drawingml/customshapegeometry.cxx
-@@ -1171,8 +1171,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 )
- {
-@@ -1800,6 +1801,7 @@ OUString GetShapeType( sal_Int32 nType )
-
- static OUString GetTextShapeType( sal_Int32 nType )
- {
-+ OSL_ASSERT((nType & sal_Int32(0xFFFF0000))==0);
- OUString sType;
- switch( nType )
- {
-@@ -2030,7 +2032,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 oox/source/drawingml/diagram/constraintlistcontext.cxx oox/source/drawingml/diagram/constraintlistcontext.cxx
-new file mode 100644
-index 0000000..0ca24f7
---- /dev/null
-+++ oox/source/drawingml/diagram/constraintlistcontext.cxx
-@@ -0,0 +1,102 @@
-+/*************************************************************************
-+ *
-+ * 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$
-+ * $Revision$
-+ *
-+ * 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"
-+#include "oox/core/namespaces.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 NMSP_DIAGRAM|XML_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;
-+}
-+
-+
-+} }
-diff --git oox/source/drawingml/diagram/constraintlistcontext.hxx oox/source/drawingml/diagram/constraintlistcontext.hxx
-new file mode 100644
-index 0000000..5766253
---- /dev/null
-+++ oox/source/drawingml/diagram/constraintlistcontext.hxx
-@@ -0,0 +1,54 @@
-+/*************************************************************************
-+ *
-+ * 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$
-+ * $Revision$
-+ *
-+ * 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
-diff --git oox/source/drawingml/diagram/datamodelcontext.cxx oox/source/drawingml/diagram/datamodelcontext.cxx
-index 23e5e54..839b021 100644
---- oox/source/drawingml/diagram/datamodelcontext.cxx
-+++ oox/source/drawingml/diagram/datamodelcontext.cxx
-@@ -25,7 +25,7 @@
- *
- ************************************************************************/
-
--#include "oox/drawingml/diagram/datamodelcontext.hxx"
-+#include "datamodelcontext.hxx"
- #include "oox/helper/attributelist.hxx"
- #include "oox/core/namespaces.hxx"
- #include "oox/drawingml/fillpropertiesgroupcontext.hxx"
-@@ -41,40 +41,46 @@ 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 )
-+ , mrConnections( 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 NMSP_DIAGRAM|XML_extLst:
-+ case NMSP_DIAGRAM|XML_cxn:
-+ {
-+ mrConnections.push_back( dgm::Connection() );
-+ dgm::Connection& rConnection=mrConnections.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;
- }
-@@ -82,37 +88,136 @@ public:
- xRet.set( this );
- return xRet;
- }
-+
- private:
-- dgm::ConnectionPtr mpConnection;
-+ dgm::Connections& mrConnections;
- };
-
-
--// 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 NMSP_DIAGRAM|XML_animLvl:
-+ case NMSP_DIAGRAM|XML_animOne:
-+ break;
-+ case NMSP_DIAGRAM|XML_bulletEnabled:
-+ mrPoint.mbBulletEnabled = aAttribs.getBool( XML_val, false );
-+ break;
-+ case NMSP_DIAGRAM|XML_chMax:
-+ mrPoint.mnMaxChildren = aAttribs.getInteger( XML_val, -1 );
-+ break;
-+ case NMSP_DIAGRAM|XML_chPref:
-+ mrPoint.mnPreferredChildren = aAttribs.getInteger( XML_val, -1 );
-+ break;
-+ case NMSP_DIAGRAM|XML_dir:
-+ mrPoint.mnDirection = aAttribs.getToken( XML_val, XML_norm );
-+ break;
-+ case NMSP_DIAGRAM|XML_hierBranch:
-+ mrPoint.mnHierarchyBranch = aAttribs.getToken( XML_val, XML_std );
-+ break;
-+ case NMSP_DIAGRAM|XML_orgChart:
-+ mrPoint.mbOrgChartEnabled = aAttribs.getBool( XML_val, false );
-+ break;
-+ case NMSP_DIAGRAM|XML_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 NMSP_DIAGRAM|XML_cxn:
-+ case NMSP_DIAGRAM|XML_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 NMSP_DIAGRAM|XML_style:
-+ {
-+ // TODO
-+ // skip CT_shapeStyle
-+ return xRet;
-+ }
- default:
- break;
- }
-@@ -122,11 +227,10 @@ public:
- }
-
- private:
-- dgm::Connections & maConnections;
-+ dgm::Point& mrPoint;
- };
-
-
--
- // CL_Pt
- class PtContext
- : public ContextHandler
-@@ -134,27 +238,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;
-@@ -164,18 +266,22 @@ public:
- case NMSP_DIAGRAM|XML_extLst:
- return xRet;
- case NMSP_DIAGRAM|XML_prSet:
-- // TODO
-- // CT_ElemPropSet
-+ OSL_TRACE( "diagram property set for point");
-+ xRet = new PropertiesContext( *this, mrPoint, xAttribs );
- break;
- case NMSP_DIAGRAM|XML_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 NMSP_DIAGRAM|XML_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;
- }
-@@ -188,7 +294,7 @@ public:
- }
-
- private:
-- dgm::PointPtr mpPoint;
-+ dgm::Point& mrPoint;
- };
-
-
-@@ -198,11 +304,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 )
-@@ -215,9 +320,8 @@ public:
- case NMSP_DIAGRAM|XML_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:
-@@ -229,7 +333,7 @@ public:
- }
-
- private:
-- dgm::Points & maPoints;
-+ dgm::Points& mrPoints;
- };
-
- // CT_BackgroundFormatting
-diff --git oox/source/drawingml/diagram/datamodelcontext.hxx oox/source/drawingml/diagram/datamodelcontext.hxx
-new file mode 100644
-index 0000000..7ca50dd
---- /dev/null
-+++ oox/source/drawingml/diagram/datamodelcontext.hxx
-@@ -0,0 +1,57 @@
-+/*************************************************************************
-+ *
-+ * 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: datamodelcontext.hxx,v $
-+ * $Revision: 1.4 $
-+ *
-+ * 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
-diff --git oox/source/drawingml/diagram/diagram.cxx oox/source/drawingml/diagram/diagram.cxx
-index 8aa0fc0..113de80 100644
---- oox/source/drawingml/diagram/diagram.cxx
-+++ oox/source/drawingml/diagram/diagram.cxx
-@@ -31,10 +31,22 @@
-
- #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 "oox/core/namespaces.hxx"
- #include "tokens.hxx"
-+#include "diagram.hxx"
-+#include "diagramlayoutatoms.hxx"
-+#include "diagramfragmenthandler.hxx"
-+
-+#include <iostream>
-+#include <fstream>
-
- using rtl::OUString;
- using namespace ::com::sun::star;
-@@ -46,58 +58,26 @@ namespace dgm {
-
- void Connection::dump()
- {
-- OSL_TRACE("dgm: cnx modelId %s, srcId %s, dstId %s",
-- OUSTRING_TO_CSTR( msModelId ),
-+ 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 );
-+ OUSTRING_TO_CSTR( msModelId ),
-+ mnType );
- }
-
--
--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();
--}
--
--
- } // dgm namespace
-
- DiagramData::DiagramData()
-@@ -115,18 +95,10 @@ 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*/ )
- {
-+ // TODO
-+#if 0
- setPosition( pTree->getPoint(), pt );
- awt::Point nextPt = pt;
- nextPt.Y += 50;
-@@ -136,6 +108,7 @@ void DiagramLayout::layout( const dgm::PointsTreePtr & pTree, const awt::Point &
- layout( *iter, nextPt );
- nextPt.X += 50;
- }
-+#endif
- }
-
- void Diagram::setData( const DiagramDataPtr & pData)
-@@ -149,19 +122,244 @@ 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);
-+ }
-+
-+ return rtl::OUStringToOString(aBuf.makeStringAndClear(),
-+ RTL_TEXTENCODING_UTF8);
-+}
-+#endif
-
--void Diagram::setColors( const DiagramColorsPtr & pColors)
-+static sal_Int32 calcDepth( const rtl::OUString& rNodeName,
-+ const dgm::Connections& rCnx )
- {
-- mpColors = pColors;
-+ // 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 )
-+ {
-+ if( aCurrCxn->msParTransId.getLength() &&
-+ aCurrCxn->msSibTransId.getLength() &&
-+ aCurrCxn->msSourceId.getLength() &&
-+ aCurrCxn->msDestId.getLength() &&
-+ aCurrCxn->mnType != XML_presOf &&
-+ aCurrCxn->mnType != XML_presParOf &&
-+ rNodeName == aCurrCxn->msDestId )
-+ {
-+ return calcDepth(aCurrCxn->msSourceId,
-+ rCnx) + 1;
-+ }
-+ ++aCurrCxn;
-+ }
-+
-+ return 0;
- }
-
-+
- void Diagram::build( )
- {
-+ // build name-object maps
-+ // ======================
-+
-+#if OSL_DEBUG_LEVEL > 1
-+ std::ofstream output("/tmp/tree.dot");
-+
-+ output << "digraph datatree {" << std::endl;
-+#endif
-+
-+ dgm::Points::iterator aCurrPoint( getData()->getPoints( ).begin() );
-+ const dgm::Points::iterator aEndPoint( getData()->getPoints( ).end() );
-+ while( aCurrPoint != aEndPoint )
-+ {
-+#if OSL_DEBUG_LEVEL > 1
-+ output << "\t"
-+ << normalizeDotName(aCurrPoint->msModelId).getStr()
-+ << "[";
-+
-+ if( aCurrPoint->msPresentationLayoutName.getLength() )
-+ output << "label=\""
-+ << rtl::OUStringToOString(
-+ aCurrPoint->msPresentationLayoutName,
-+ RTL_TEXTENCODING_UTF8).getStr() << "\", ";
-+ else
-+ output << "label=\""
-+ << rtl::OUStringToOString(
-+ aCurrPoint->msModelId,
-+ RTL_TEXTENCODING_UTF8).getStr() << "\", ";
-+
-+ switch( aCurrPoint->mnType )
-+ {
-+ case XML_doc: output << "style=filled, color=red"; break;
-+ case XML_asst: output << "style=filled, color=green"; break;
-+ default:
-+ case XML_node: output << "style=filled, color=blue"; break;
-+ case XML_pres: output << "style=filled, color=yellow"; break;
-+ case XML_parTrans: output << "color=grey"; break;
-+ case XML_sibTrans: output << " "; break;
-+ }
-+
-+ output << "];" << std::endl;
-+
-+ // does currpoint have any text set?
-+ if( aCurrPoint->mpShape &&
-+ aCurrPoint->mpShape->getTextBody() &&
-+ !aCurrPoint->mpShape->getTextBody()->getParagraphs().empty() &&
-+ !aCurrPoint->mpShape->getTextBody()->getParagraphs().front()->getRuns().empty() )
-+ {
-+ static sal_Int32 nCount=0;
-+
-+ output << "\t"
-+ << "textNode" << nCount
-+ << " ["
-+ << "label=\""
-+ << rtl::OUStringToOString(
-+ aCurrPoint->mpShape->getTextBody()->getParagraphs().front()->getRuns().front()->getText(),
-+ RTL_TEXTENCODING_UTF8).getStr()
-+ << "\"" << "];" << std::endl;
-+ output << "\t"
-+ << normalizeDotName(aCurrPoint->msModelId).getStr()
-+ << " -> "
-+ << "textNode" << nCount++
-+ << ";" << std::endl;
-+ }
-+
-+
-+#if 0
-+ // msPresentationAssociationId does not appear to be
-+ // valid/used, the relation this imposed for several examples
-+ // was ~broken
-+ if( aCurrPoint->msPresentationAssociationId.getLength() )
-+ output << "\t"
-+ << normalizeDotName(aCurrPoint->msModelId).getStr()
-+ << " -> "
-+ << normalizeDotName(aCurrPoint->msPresentationAssociationId).getStr()
-+ << " [style=dotted, color=red, "
-+ << "label=\"presAssocID\"];" << std::endl;
-+#endif
-+
-+#endif
-+
-+ const bool bInserted1=getData()->getPointNameMap().insert(
-+ std::make_pair(aCurrPoint->msModelId,&(*aCurrPoint))).second;
-+ (void)bInserted1;
-+
-+ OSL_ENSURE(bInserted1,"Diagram::build(): non-unique point model id");
-+
-+ if( aCurrPoint->msPresentationLayoutName.getLength() )
-+ {
-+ DiagramData::PointsNameMap::value_type::second_type& rVec=
-+ getData()->getPointsPresNameMap()[aCurrPoint->msPresentationLayoutName];
-+ rVec.push_back(&(*aCurrPoint));
-+ }
-+ ++aCurrPoint;
-+ }
-+
-+ dgm::Connections::const_iterator aCurrCxn( getData()->getConnections( ).begin() );
-+ const dgm::Connections::const_iterator aEndCxn( getData()->getConnections( ).end() );
-+ while( aCurrCxn != aEndCxn )
-+ {
-+#if OSL_DEBUG_LEVEL > 1
-+ if( aCurrCxn->msParTransId.getLength() ||
-+ aCurrCxn->msSibTransId.getLength() )
-+ {
-+ if( aCurrCxn->msSourceId.getLength() ||
-+ aCurrCxn->msDestId.getLength() )
-+ {
-+ output << "\t"
-+ << normalizeDotName(aCurrCxn->msSourceId).getStr()
-+ << " -> "
-+ << normalizeDotName(aCurrCxn->msParTransId).getStr()
-+ << " -> "
-+ << normalizeDotName(aCurrCxn->msSibTransId).getStr()
-+ << " -> "
-+ << normalizeDotName(aCurrCxn->msDestId).getStr()
-+ << " [style=dotted,"
-+ << ((aCurrCxn->mnType == XML_presOf) ? " color=red, " : ((aCurrCxn->mnType == XML_presParOf) ? " color=green, " : " "))
-+ << "label=\""
-+ << rtl::OUStringToOString(aCurrCxn->msModelId,
-+ RTL_TEXTENCODING_UTF8 ).getStr()
-+ << "\"];" << std::endl;
-+ }
-+ else
-+ {
-+ output << "\t"
-+ << normalizeDotName(aCurrCxn->msParTransId).getStr()
-+ << " -> "
-+ << normalizeDotName(aCurrCxn->msSibTransId).getStr()
-+ << " ["
-+ << ((aCurrCxn->mnType == XML_presOf) ? " color=red, " : ((aCurrCxn->mnType == XML_presParOf) ? " color=green, " : " "))
-+ << "label=\""
-+ << rtl::OUStringToOString(aCurrCxn->msModelId,
-+ RTL_TEXTENCODING_UTF8 ).getStr()
-+ << "\"];" << std::endl;
-+ }
-+ }
-+ else if( aCurrCxn->msSourceId.getLength() ||
-+ aCurrCxn->msDestId.getLength() )
-+ output << "\t"
-+ << normalizeDotName(aCurrCxn->msSourceId).getStr()
-+ << " -> "
-+ << normalizeDotName(aCurrCxn->msDestId).getStr()
-+ << " [label=\""
-+ << rtl::OUStringToOString(aCurrCxn->msModelId,
-+ RTL_TEXTENCODING_UTF8 ).getStr()
-+ << ((aCurrCxn->mnType == XML_presOf) ? "\", color=red]" : ((aCurrCxn->mnType == XML_presParOf) ? "\", color=green]" : "\"]"))
-+ << ";" << std::endl;
-+#endif
-+
-+ const bool bInserted1=getData()->getConnectionNameMap().insert(
-+ std::make_pair(aCurrCxn->msModelId,&(*aCurrCxn))).second;
-+ (void)bInserted1;
-+
-+ OSL_ENSURE(bInserted1,"Diagram::build(): non-unique connection model id");
-+
-+ if( aCurrCxn->mnType == XML_presOf )
-+ {
-+ DiagramData::StringMap::value_type::second_type& rVec=getData()->getPresOfNameMap()[aCurrCxn->msDestId];
-+ rVec.push_back(
-+ std::make_pair(
-+ aCurrCxn->msSourceId,sal_Int32(0)));
-+ }
-+
-+ ++aCurrCxn;
-+ }
-+
-+ // assign outline levels
-+ DiagramData::StringMap::iterator aPresOfIter=getData()->getPresOfNameMap().begin();
-+ const DiagramData::StringMap::iterator aPresOfEnd=getData()->getPresOfNameMap().end();
-+ while( aPresOfIter != aPresOfEnd )
-+ {
-+ DiagramData::StringMap::value_type::second_type::iterator aPresOfNodeIterCalcLevel=aPresOfIter->second.begin();
-+ const DiagramData::StringMap::value_type::second_type::iterator aPresOfNodeEnd=aPresOfIter->second.end();
-+ while(aPresOfNodeIterCalcLevel != aPresOfNodeEnd)
-+ {
-+ const sal_Int32 nDepth=calcDepth(aPresOfNodeIterCalcLevel->first,
-+ getData()->getConnections());
-+ aPresOfNodeIterCalcLevel->second = nDepth != 0 ? nDepth : -1;
-+ ++aPresOfNodeIterCalcLevel;
-+ }
-+
-+ ++aPresOfIter;
-+ }
-+
-+#if OSL_DEBUG_LEVEL > 1
-+ output << "}" << std::endl;
-+#endif
-+
-+ // TODO
-+#if 0
- OSL_TRACE( "building diagram" );
- typedef std::map< OUString, dgm::PointPtr > PointsMap;
- PointsMap aPointsMap;
-@@ -237,30 +435,33 @@ void Diagram::build( )
- }
- // check bounds
- OSL_ENSURE( aRoots.size() == 1, "more than one root" );
-- // #i92239# roots may be empty
-- if( !aRoots.empty() )
-+ mpRoot = aRoots.begin()->second;
-+ OSL_TRACE( "root is %s", OUSTRING_TO_CSTR( mpRoot->getPoint()->getModelId() ) );
-+ for( PointsTreeMap::iterator iter = aTreeMap.begin();
-+ iter != aTreeMap.end(); iter++ )
- {
-- mpRoot = aRoots.begin()->second;
-- OSL_TRACE( "root is %s", OUSTRING_TO_CSTR( mpRoot->getPoint()->getModelId() ) );
-- for( PointsTreeMap::iterator iter = aTreeMap.begin();
-- iter != aTreeMap.end(); iter++ )
-+ if(! iter->second->getParent() )
- {
-- if(! iter->second->getParent() )
-- {
-- OSL_TRACE("node without parent %s", OUSTRING_TO_CSTR( iter->first ) );
-- }
-+ OSL_TRACE("node without parent %s", OUSTRING_TO_CSTR( iter->first ) );
- }
- }
-+#endif
- }
-
-
- void Diagram::addTo( const ShapePtr & pParentShape )
- {
-+ // collect data, init maps
-+ build( );
-+
-+ // create Shape hierarchy
-+ ShapeCreationVisitor aCreationVisitor(pParentShape, *this);
-+ mpLayout->getNode()->accept(aCreationVisitor);
-+
-+#if 0
- dgm::Points & aPoints( mpData->getPoints( ) );
- dgm::Points::iterator aPointsIter;
-- build( );
-- if( mpRoot.get() )
-- mpLayout->layout( mpRoot, awt::Point( 0, 0 ) );
-+ mpLayout->layout( mpRoot, awt::Point( 0, 0 ) );
-
- for( aPointsIter = aPoints.begin(); aPointsIter != aPoints.end(); ++aPointsIter )
- {
-@@ -283,6 +484,7 @@ void Diagram::addTo( const ShapePtr & pParentShape )
- {
- OSL_TRACE( "Dgm: shape name %s", OUSTRING_TO_CSTR( (*iter)->getName() ) );
- }
-+#endif
- }
-
- OUString Diagram::getLayoutId() const
-@@ -295,6 +497,156 @@ OUString Diagram::getLayoutId() const
- return sLayoutId;
- }
-
-+uno::Reference<xml::dom::XDocument> loadFragment(
-+ core::XmlFilterBase& rFilter,
-+ const rtl::Reference< core::FragmentHandler >& rxHandler )
-+{
-+ // load diagramming fragments into DOM representation, that later
-+ // gets serialized back to SAX events and parsed
-+ return rFilter.importFragment( rxHandler->getFragmentPath() );
-+}
-+
-+void importFragment( core::XmlFilterBase& rFilter,
-+ const uno::Reference<xml::dom::XDocument>& rXDom,
-+ const char* /*pPropName*/,
-+ const ShapePtr& /*pShape*/,
-+ const rtl::Reference< core::FragmentHandler >& rxHandler )
-+{
-+ uno::Reference<xml::sax::XFastSAXSerializable> xSerializer(
-+ rXDom, uno::UNO_QUERY_THROW);
-+
-+ // now serialize DOM tree into internal data structures
-+ rFilter.importFragment( rxHandler, xSerializer );
-+
-+ // not yet
-+#if 0
-+ // tack XDocument onto shape
-+ pShape->getShapeProperties().setProperty(
-+ OUString::createFromAscii(pPropName),
-+ rXDom);
-+#endif
-+}
-+
-+void loadDiagram( const ShapePtr& pShape,
-+ core::XmlFilterBase& rFilter,
-+ const ::rtl::OUString& rDataModelPath,
-+ const ::rtl::OUString& rLayoutPath,
-+ const ::rtl::OUString& rQStylePath,
-+ const ::rtl::OUString& rColorStylePath )
-+{
-+ DiagramPtr pDiagram( new Diagram() );
-+
-+ DiagramDataPtr pData( new DiagramData() );
-+ pDiagram->setData( pData );
-+
-+ DiagramLayoutPtr pLayout( new DiagramLayout() );
-+ pDiagram->setLayout( pLayout );
-+
-+ // data
-+ if( rDataModelPath.getLength() > 0 )
-+ {
-+ rtl::Reference< core::FragmentHandler > xRef(
-+ new DiagramDataFragmentHandler( rFilter, rDataModelPath, pData ));
-+
-+ importFragment(rFilter,
-+ loadFragment(rFilter,xRef),
-+ "DiagramData",
-+ pShape,
-+ xRef);
-+ }
-+
-+ // layout
-+ if( rLayoutPath.getLength() > 0 )
-+ {
-+ rtl::Reference< core::FragmentHandler > xRef(
-+ new DiagramLayoutFragmentHandler( rFilter, rLayoutPath, pLayout ));
-+ importFragment(rFilter,
-+ loadFragment(rFilter,xRef),
-+ "DiagramLayout",
-+ pShape,
-+ xRef);
-+ }
-+
-+ // style
-+ if( rQStylePath.getLength() > 0 )
-+ {
-+ rtl::Reference< core::FragmentHandler > xRef(
-+ new DiagramQStylesFragmentHandler( rFilter, rQStylePath, pDiagram->getStyles() ));
-+ importFragment(rFilter,
-+ loadFragment(rFilter,xRef),
-+ "DiagramQStyle",
-+ pShape,
-+ xRef);
-+ }
-+
-+ // colors
-+ if( rColorStylePath.getLength() > 0 )
-+ {
-+ rtl::Reference< core::FragmentHandler > xRef(
-+ new ColorFragmentHandler( rFilter, rColorStylePath, pDiagram->getColors() ));
-+ importFragment(rFilter,
-+ loadFragment(rFilter,xRef),
-+ "DiagramColorStyle",
-+ pShape,
-+ xRef);
-+ }
-+
-+ // diagram loaded. now lump together & attach to shape
-+ pDiagram->addTo(pShape);
-+}
-+
-+void loadDiagram( const ShapePtr& pShape,
-+ core::XmlFilterBase& rFilter,
-+ const uno::Reference<xml::dom::XDocument>& rXDataModelDom,
-+ const uno::Reference<xml::dom::XDocument>& rXLayoutDom,
-+ const uno::Reference<xml::dom::XDocument>& rXQStyleDom,
-+ const uno::Reference<xml::dom::XDocument>& rXColorStyleDom )
-+{
-+ DiagramPtr pDiagram( new Diagram() );
-+
-+ DiagramDataPtr pData( new DiagramData() );
-+ pDiagram->setData( pData );
-+
-+ DiagramLayoutPtr pLayout( new DiagramLayout() );
-+ pDiagram->setLayout( pLayout );
-+
-+ OUString aEmpty;
-+
-+ // data
-+ if( rXDataModelDom.is() )
-+ importFragment(rFilter,
-+ rXDataModelDom,
-+ "DiagramData",
-+ pShape,
-+ new DiagramDataFragmentHandler( rFilter, aEmpty, pData ));
-+
-+ // layout
-+ if( rXLayoutDom.is() )
-+ importFragment(rFilter,
-+ rXLayoutDom,
-+ "DiagramLayout",
-+ pShape,
-+ new DiagramLayoutFragmentHandler( rFilter, aEmpty, pLayout ));
-+
-+ // style
-+ if( rXQStyleDom.is() )
-+ importFragment(rFilter,
-+ rXQStyleDom,
-+ "DiagramQStyle",
-+ pShape,
-+ new DiagramQStylesFragmentHandler( rFilter, aEmpty, pDiagram->getStyles() ));
-+
-+ // colors
-+ if( rXColorStyleDom.is() )
-+ importFragment(rFilter,
-+ rXColorStyleDom,
-+ "DiagramColorStyle",
-+ pShape,
-+ new ColorFragmentHandler( rFilter, aEmpty, pDiagram->getColors() ));
-+
-+ // diagram loaded. now lump together & attach to shape
-+ pDiagram->addTo(pShape);
-+}
-
- } }
-
-diff --git oox/source/drawingml/diagram/diagram.hxx oox/source/drawingml/diagram/diagram.hxx
-new file mode 100644
-index 0000000..7e5276c
---- /dev/null
-+++ oox/source/drawingml/diagram/diagram.hxx
-@@ -0,0 +1,323 @@
-+/* -*- 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 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ * $Revision$
-+ *
-+ * 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_DIAGRAM_DIAGRAM_HXX
-+#define OOX_DRAWINGML_DIAGRAM_DIAGRAM_HXX
-+
-+#include <map>
-+#include <vector>
-+
-+#include <boost/shared_ptr.hpp>
-+#include <boost/enable_shared_from_this.hpp>
-+
-+#include <rtl/ustring.hxx>
-+
-+#include "tokens.hxx"
-+#include "oox/drawingml/shape.hxx"
-+#include "oox/drawingml/fillproperties.hxx"
-+
-+namespace com { namespace sun { namespace star {
-+ namespace xml { namespace dom { class XDocument; } }
-+} } }
-+
-+namespace oox { namespace drawingml {
-+
-+namespace dgm {
-+
-+/** A Connection
-+ */
-+struct Connection
-+{
-+ Connection() :
-+ mnType( 0 ),
-+ mnSourceOrder( 0 ),
-+ mnDestOrder( 0 )
-+ {}
-+
-+ 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 std::vector< Connection > Connections;
-+
-+
-+/** A point
-+ */
-+struct Point
-+{
-+ Point() :
-+ mnType(0),
-+ mnMaxChildren(-1),
-+ mnPreferredChildren(-1),
-+ mnDirection(XML_norm),
-+ mnHierarchyBranch(XML_std),
-+ mnResizeHandles(XML_rel),
-+ mnCustomAngle(-1),
-+ mnPercentageNeighbourWidth(-1),
-+ mnPercentageNeighbourHeight(-1),
-+ mnPercentageOwnWidth(-1),
-+ mnPercentageOwnHeight(-1),
-+ mnIncludeAngleScale(-1),
-+ mnRadiusScale(-1),
-+ mnWidthScale(-1),
-+ mnHeightScale(-1),
-+ mnWidthOverride(-1),
-+ mnHeightOverride(-1),
-+ mnLayoutStyleCount(-1),
-+ mnLayoutStyleIndex(-1),
-+
-+ mbOrgChartEnabled(false),
-+ mbBulletEnabled(false),
-+ mbCoherent3DOffset(false),
-+ mbCustomHorizontalFlip(false),
-+ mbCustomVerticalFlip(false),
-+ mbCustomText(false),
-+ mbIsPlaceholder(false)
-+ {}
-+ void dump();
-+
-+ ShapePtr mpShape;
-+
-+ rtl::OUString msCnxId;
-+ rtl::OUString msModelId;
-+ rtl::OUString msColorTransformCategoryId;
-+ rtl::OUString msColorTransformTypeId;
-+ rtl::OUString msLayoutCategoryId;
-+ rtl::OUString msLayoutTypeId;
-+ rtl::OUString msPlaceholderText;
-+ rtl::OUString msPresentationAssociationId;
-+ rtl::OUString msPresentationLayoutName;
-+ rtl::OUString msPresentationLayoutStyleLabel;
-+ rtl::OUString msQuickStyleCategoryId;
-+ rtl::OUString msQuickStyleTypeId;
-+
-+ sal_Int32 mnType;
-+ sal_Int32 mnMaxChildren;
-+ sal_Int32 mnPreferredChildren;
-+ sal_Int32 mnDirection;
-+ sal_Int32 mnHierarchyBranch;
-+ sal_Int32 mnResizeHandles;
-+ sal_Int32 mnCustomAngle;
-+ sal_Int32 mnPercentageNeighbourWidth;
-+ sal_Int32 mnPercentageNeighbourHeight;
-+ sal_Int32 mnPercentageOwnWidth;
-+ sal_Int32 mnPercentageOwnHeight;
-+ sal_Int32 mnIncludeAngleScale;
-+ sal_Int32 mnRadiusScale;
-+ sal_Int32 mnWidthScale;
-+ sal_Int32 mnHeightScale;
-+ sal_Int32 mnWidthOverride;
-+ sal_Int32 mnHeightOverride;
-+ sal_Int32 mnLayoutStyleCount;
-+ sal_Int32 mnLayoutStyleIndex;
-+
-+ bool mbOrgChartEnabled;
-+ bool mbBulletEnabled;
-+ bool mbCoherent3DOffset;
-+ bool mbCustomHorizontalFlip;
-+ bool mbCustomVerticalFlip;
-+ bool mbCustomText;
-+ bool mbIsPlaceholder;
-+};
-+
-+typedef std::vector< Point > Points;
-+
-+}
-+
-+class LayoutNode;
-+typedef boost::shared_ptr< LayoutNode > LayoutNodePtr;
-+
-+////////////////////
-+
-+class DiagramData
-+{
-+public:
-+ typedef std::map< rtl::OUString, dgm::Point* > PointNameMap;
-+ typedef std::map< rtl::OUString,
-+ std::vector<dgm::Point*> > PointsNameMap;
-+ typedef std::map< rtl::OUString, const dgm::Connection* > ConnectionNameMap;
-+ typedef std::map< rtl::OUString,
-+ std::vector<std::pair<rtl::OUString,sal_Int32> > > StringMap;
-+
-+ DiagramData();
-+ FillPropertiesPtr & getFillProperties()
-+ { return mpFillProperties; }
-+ dgm::Connections & getConnections()
-+ { return maConnections; }
-+ dgm::Points & getPoints()
-+ { return maPoints; }
-+ ConnectionNameMap & getConnectionNameMap()
-+ { return maConnectionNameMap; }
-+ StringMap & getPresOfNameMap()
-+ { return maPresOfNameMap; }
-+ PointNameMap & getPointNameMap()
-+ { return maPointNameMap; }
-+ PointsNameMap & getPointsPresNameMap()
-+ { return maPointsPresNameMap; }
-+ void dump();
-+private:
-+ FillPropertiesPtr mpFillProperties;
-+ dgm::Connections maConnections;
-+ dgm::Points maPoints;
-+ PointNameMap maPointNameMap;
-+ PointsNameMap maPointsPresNameMap;
-+ ConnectionNameMap maConnectionNameMap;
-+ StringMap maPresOfNameMap;
-+};
-+
-+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::Points & 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;
-+
-+///////////////////////
-+
-+struct DiagramStyle
-+{
-+ ShapeStyleRef maFillStyle;
-+ ShapeStyleRef maLineStyle;
-+ ShapeStyleRef maEffectStyle;
-+ ShapeStyleRef maTextStyle;
-+};
-+
-+typedef std::map<rtl::OUString,DiagramStyle> DiagramQStyleMap;
-+
-+struct DiagramColor
-+{
-+ oox::drawingml::Color maFillColor;
-+ oox::drawingml::Color maLineColor;
-+ oox::drawingml::Color maEffectColor;
-+ oox::drawingml::Color maTextFillColor;
-+ oox::drawingml::Color maTextLineColor;
-+ oox::drawingml::Color maTextEffectColor;
-+};
-+
-+typedef std::map<rtl::OUString,DiagramColor> DiagramColorMap;
-+
-+///////////////////////
-+
-+class Diagram
-+{
-+public:
-+ void setData( const DiagramDataPtr & );
-+ DiagramDataPtr getData() const
-+ {
-+ return mpData;
-+ }
-+ void setLayout( const DiagramLayoutPtr & );
-+ DiagramLayoutPtr getLayout() const
-+ {
-+ return mpLayout;
-+ }
-+
-+ DiagramQStyleMap& getStyles() { return maStyles; }
-+ const DiagramQStyleMap& getStyles() const { return maStyles; }
-+ DiagramColorMap& getColors() { return maColors; }
-+ const DiagramColorMap& getColors() const { return maColors; }
-+
-+ void addTo( const ShapePtr & pShape );
-+ ::rtl::OUString getLayoutId() const;
-+private:
-+ void build( );
-+ DiagramDataPtr mpData;
-+ DiagramLayoutPtr mpLayout;
-+ DiagramQStyleMap maStyles;
-+ DiagramColorMap maColors;
-+ std::map< ::rtl::OUString, ShapePtr > maShapeMap;
-+};
-+
-+
-+typedef boost::shared_ptr< Diagram > DiagramPtr;
-+
-+} }
-+
-+#endif
-+
-+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
-diff --git oox/source/drawingml/diagram/diagramdefinitioncontext.cxx oox/source/drawingml/diagram/diagramdefinitioncontext.cxx
-index b7f8889..447416e 100644
---- oox/source/drawingml/diagram/diagramdefinitioncontext.cxx
-+++ oox/source/drawingml/diagram/diagramdefinitioncontext.cxx
-@@ -27,9 +27,8 @@
-
- #include "diagramdefinitioncontext.hxx"
- #include "oox/core/namespaces.hxx"
--#include "oox/helper/helper.hxx"
- #include "layoutnodecontext.hxx"
--#include "oox/drawingml/diagram/datamodelcontext.hxx"
-+#include "datamodelcontext.hxx"
- #include "tokens.hxx"
-
- using namespace ::oox::core;
-@@ -87,9 +86,15 @@ DiagramDefinitionContext::createFastChildContext( ::sal_Int32 aElement,
- mpLayout->setDesc( xAttribs->getOptionalValue( XML_val ) );
- break;
- case NMSP_DIAGRAM|XML_layoutNode:
-- mpLayout->getNode().reset( new LayoutNode() );
-- xRet.set( new LayoutNodeContext( *this, xAttribs, mpLayout->getNode() ) );
-+ {
-+ LayoutNodePtr pNode( new LayoutNode() );
-+ mpLayout->getNode() = pNode;
-+ pNode->setChildOrder( xAttribs->getOptionalValueToken( XML_chOrder, XML_b ) );
-+ pNode->setMoveWith( xAttribs->getOptionalValue( XML_moveWith ) );
-+ pNode->setStyleLabel( xAttribs->getOptionalValue( XML_styleLbl ) );
-+ xRet.set( new LayoutNodeContext( *this, xAttribs, pNode ) );
- break;
-+ }
- case NMSP_DIAGRAM|XML_clrData:
- // TODO, does not matter for the UI. skip.
- return xRet;
-diff --git oox/source/drawingml/diagram/diagramdefinitioncontext.hxx oox/source/drawingml/diagram/diagramdefinitioncontext.hxx
-index 147c2d8..8f32f64 100644
---- oox/source/drawingml/diagram/diagramdefinitioncontext.hxx
-+++ oox/source/drawingml/diagram/diagramdefinitioncontext.hxx
-@@ -29,7 +29,7 @@
- #define OOX_DRAWINGML_DIAGRAMDEFINITIONCONTEXT_HXX
-
- #include "oox/core/contexthandler.hxx"
--#include "oox/drawingml/diagram/diagram.hxx"
-+#include "diagram.hxx"
-
- namespace oox { namespace drawingml {
-
-diff --git oox/source/drawingml/diagram/diagramfragmenthandler.cxx oox/source/drawingml/diagram/diagramfragmenthandler.cxx
-index 17f7b0b..aab46ca 100644
---- oox/source/drawingml/diagram/diagramfragmenthandler.cxx
-+++ oox/source/drawingml/diagram/diagramfragmenthandler.cxx
-@@ -27,11 +27,11 @@
-
- #include <osl/diagnose.h>
-
--#include "oox/drawingml/diagram/diagramfragmenthandler.hxx"
--#include "oox/drawingml/diagram/datamodelcontext.hxx"
- #include "oox/core/namespaces.hxx"
-+#include "oox/drawingml/colorchoicecontext.hxx"
- #include "diagramdefinitioncontext.hxx"
--#include "tokens.hxx"
-+#include "diagramfragmenthandler.hxx"
-+#include "datamodelcontext.hxx"
-
- using namespace ::oox::core;
- using namespace ::com::sun::star::xml::sax;
-@@ -131,95 +131,144 @@ DiagramLayoutFragmentHandler::createFastChildContext( ::sal_Int32 aElement,
- ///////////////////////
-
- DiagramQStylesFragmentHandler::DiagramQStylesFragmentHandler( XmlFilterBase& rFilter,
-- const OUString& rFragmentPath,
-- const DiagramQStylesPtr pDataPtr )
-- throw( )
-- : FragmentHandler( rFilter, rFragmentPath )
-- , mpDataPtr( pDataPtr )
-+ const OUString& rFragmentPath,
-+ DiagramQStyleMap& rStylesMap ) :
-+ FragmentHandler2( rFilter, rFragmentPath ),
-+ maStyleName(),
-+ maStyleEntry(),
-+ mrStylesMap( rStylesMap )
-+{}
-+
-+::oox::core::ContextHandlerRef DiagramQStylesFragmentHandler::createStyleMatrixContext(
-+ sal_Int32 nElement,
-+ const AttributeList& rAttribs,
-+ ShapeStyleRef& o_rStyle )
- {
-+ o_rStyle.mnThemedIdx = (nElement == (NMSP_DRAWINGML|XML_fontRef)) ?
-+ rAttribs.getToken( XML_idx, XML_none ) : rAttribs.getInteger( XML_idx, 0 );
-+ return new ColorContext( *this, o_rStyle.maPhClr );
- }
-
--DiagramQStylesFragmentHandler::~DiagramQStylesFragmentHandler( ) throw ()
--{
--
--}
--
--void SAL_CALL DiagramQStylesFragmentHandler::endDocument()
-- throw (SAXException, RuntimeException)
-+::oox::core::ContextHandlerRef DiagramQStylesFragmentHandler::onCreateContext( sal_Int32 nElement,
-+ const AttributeList& rAttribs )
- {
-+ // state-table like way of navigating the color fragment. we
-+ // currently ignore everything except styleLbl in the colorsDef
-+ // element
-+ switch( getCurrentElement() )
-+ {
-+ case XML_ROOT_CONTEXT:
-+ return nElement == (NMSP_DIAGRAM|XML_styleDef) ? this : NULL;
-+ case NMSP_DIAGRAM|XML_styleDef:
-+ return nElement == (NMSP_DIAGRAM|XML_styleLbl) ? this : NULL;
-+ case NMSP_DIAGRAM|XML_styleLbl:
-+ return nElement == (NMSP_DIAGRAM|XML_style) ? this : NULL;
-+ case NMSP_DIAGRAM|XML_style:
-+ {
-+ switch( nElement )
-+ {
-+ case NMSP_DRAWINGML|XML_lnRef : // CT_StyleMatrixReference
-+ return createStyleMatrixContext(nElement,rAttribs,
-+ maStyleEntry.maLineStyle);
-+ case NMSP_DRAWINGML|XML_fillRef : // CT_StyleMatrixReference
-+ return createStyleMatrixContext(nElement,rAttribs,
-+ maStyleEntry.maFillStyle);
-+ case NMSP_DRAWINGML|XML_effectRef : // CT_StyleMatrixReference
-+ return createStyleMatrixContext(nElement,rAttribs,
-+ maStyleEntry.maEffectStyle);
-+ case NMSP_DRAWINGML|XML_fontRef : // CT_FontRe ference
-+ return createStyleMatrixContext(nElement,rAttribs,
-+ maStyleEntry.maTextStyle);
-+ }
-+ return 0;
-+ }
-+ }
-
-+ return 0;
- }
-
--
--Reference< XFastContextHandler > SAL_CALL
--DiagramQStylesFragmentHandler::createFastChildContext( ::sal_Int32 aElement,
-- const Reference< XFastAttributeList >& )
-- throw ( SAXException, RuntimeException)
-+void DiagramQStylesFragmentHandler::onStartElement( const AttributeList& rAttribs )
- {
-- Reference< XFastContextHandler > xRet;
--
-- switch( aElement )
-+ if( getCurrentElement() == (NMSP_DIAGRAM|XML_styleLbl) )
- {
-- case NMSP_DIAGRAM|XML_styleDef:
-- // TODO
-- break;
-- default:
-- break;
-+ maStyleName = rAttribs.getString( XML_name, OUString() );
-+ maStyleEntry = mrStylesMap[maStyleName];
- }
--
-- if( !xRet.is() )
-- xRet = getFastContextHandler();
--
-- return xRet;
- }
-
--/////////////////////
--
--DiagramColorsFragmentHandler::DiagramColorsFragmentHandler( XmlFilterBase& rFilter,
-- const OUString& rFragmentPath,
-- const DiagramColorsPtr pDataPtr )
-- throw( )
-- : FragmentHandler( rFilter, rFragmentPath )
-- , mpDataPtr( pDataPtr )
-+void DiagramQStylesFragmentHandler::onEndElement( const ::rtl::OUString& )
- {
-+ if( getCurrentElement() == (NMSP_DIAGRAM|XML_styleLbl) )
-+ mrStylesMap[maStyleName] = maStyleEntry;
- }
-
--DiagramColorsFragmentHandler::~DiagramColorsFragmentHandler( ) throw ()
--{
--
--}
-+///////////////////////
-
--void SAL_CALL DiagramColorsFragmentHandler::endDocument()
-- throw (SAXException, RuntimeException)
-+ColorFragmentHandler::ColorFragmentHandler( ::oox::core::XmlFilterBase& rFilter,
-+ const ::rtl::OUString& rFragmentPath,
-+ DiagramColorMap& rColorsMap ) :
-+ FragmentHandler2(rFilter,rFragmentPath),
-+ maColorName(),
-+ maColorEntry(),
-+ mrColorsMap(rColorsMap)
-+{}
-+
-+::oox::core::ContextHandlerRef ColorFragmentHandler::onCreateContext( sal_Int32 nElement,
-+ const AttributeList& /*rAttribs*/ )
- {
-+ // state-table like way of navigating the color fragment. we
-+ // currently ignore everything except styleLbl in the colorsDef
-+ // element
-+ switch( getCurrentElement() )
-+ {
-+ case XML_ROOT_CONTEXT:
-+ return nElement == (NMSP_DIAGRAM|XML_colorsDef) ? this : NULL;;
-+ case NMSP_DIAGRAM|XML_colorsDef:
-+ return nElement == (NMSP_DIAGRAM|XML_styleLbl) ? this : NULL;;
-+ case NMSP_DIAGRAM|XML_styleLbl:
-+ return ((nElement == (NMSP_DIAGRAM|XML_fillClrLst)) ||
-+ (nElement == (NMSP_DIAGRAM|XML_linClrLst)) ||
-+ (nElement == (NMSP_DIAGRAM|XML_effectClrLst)) ||
-+ (nElement == (NMSP_DIAGRAM|XML_txLinClrLst)) ||
-+ (nElement == (NMSP_DIAGRAM|XML_txFillClrLst)) ||
-+ (nElement == (NMSP_DIAGRAM|XML_txEffectClrLst))) ? this : NULL;;
-+
-+ // the actual colors - defer to color fragment handlers.
-+
-+ // TODO(F1): well, actually, there might be *several* color
-+ // definitions in it, after all it's called list. but
-+ // apparently colorChoiceContext doesn't handle that anyway...
-+ case NMSP_DIAGRAM|XML_fillClrLst:
-+ return new ColorContext( *this, maColorEntry.maFillColor );
-+ case NMSP_DIAGRAM|XML_linClrLst:
-+ return new ColorContext( *this, maColorEntry.maLineColor );
-+ case NMSP_DIAGRAM|XML_effectClrLst:
-+ return new ColorContext( *this, maColorEntry.maEffectColor );
-+ case NMSP_DIAGRAM|XML_txFillClrLst:
-+ return new ColorContext( *this, maColorEntry.maTextFillColor );
-+ case NMSP_DIAGRAM|XML_txLinClrLst:
-+ return new ColorContext( *this, maColorEntry.maTextLineColor );
-+ case NMSP_DIAGRAM|XML_txEffectClrLst:
-+ return new ColorContext( *this, maColorEntry.maTextEffectColor );
-+ }
-
-+ return 0;
- }
-
--
--Reference< XFastContextHandler > SAL_CALL
--DiagramColorsFragmentHandler::createFastChildContext( ::sal_Int32 aElement,
-- const Reference< XFastAttributeList >& )
-- throw ( SAXException, RuntimeException)
-+void ColorFragmentHandler::onStartElement( const AttributeList& rAttribs )
- {
-- Reference< XFastContextHandler > xRet;
--
-- switch( aElement )
-+ if( getCurrentElement() == (NMSP_DIAGRAM|XML_styleLbl) )
- {
-- case NMSP_DIAGRAM|XML_colorsDef:
-- // TODO
-- break;
-- default:
-- break;
-+ maColorName = rAttribs.getString( XML_name, OUString() );
-+ maColorEntry = mrColorsMap[maColorName];
- }
--
-- if( !xRet.is() )
-- xRet = getFastContextHandler();
--
-- return xRet;
- }
-
--
--
-+void ColorFragmentHandler::onEndElement( const ::rtl::OUString& )
-+{
-+ if( getCurrentElement() == (NMSP_DIAGRAM|XML_styleLbl) )
-+ mrColorsMap[maColorName] = maColorEntry;
-+}
-
- } }
-
-diff --git oox/source/drawingml/diagram/diagramfragmenthandler.hxx oox/source/drawingml/diagram/diagramfragmenthandler.hxx
-new file mode 100644
-index 0000000..86e9bd2
---- /dev/null
-+++ oox/source/drawingml/diagram/diagramfragmenthandler.hxx
-@@ -0,0 +1,117 @@
-+/*************************************************************************
-+ *
-+ * 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: diagramfragmenthandler.hxx,v $
-+ * $Revision: 1.4 $
-+ *
-+ * 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/core/fragmenthandler2.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::FragmentHandler2
-+{
-+public:
-+ DiagramQStylesFragmentHandler(
-+ oox::core::XmlFilterBase& rFilter,
-+ const ::rtl::OUString& rFragmentPath,
-+ DiagramQStyleMap& rStylesMap );
-+
-+ virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs );
-+
-+ virtual void onStartElement( const AttributeList& rAttribs );
-+ virtual void onEndElement( const ::rtl::OUString& rChars );
-+
-+private:
-+ ::oox::core::ContextHandlerRef createStyleMatrixContext(sal_Int32 nElement,
-+ const AttributeList& rAttribs,
-+ ShapeStyleRef& o_rStyle);
-+
-+ ::rtl::OUString maStyleName;
-+ DiagramStyle maStyleEntry;
-+ DiagramQStyleMap& mrStylesMap;
-+};
-+
-+class ColorFragmentHandler : public ::oox::core::FragmentHandler2
-+{
-+public:
-+ ColorFragmentHandler(
-+ ::oox::core::XmlFilterBase& rFilter,
-+ const ::rtl::OUString& rFragmentPath,
-+ DiagramColorMap& rColorMap );
-+
-+ virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs );
-+
-+ virtual void onStartElement( const AttributeList& rAttribs );
-+ virtual void onEndElement( const ::rtl::OUString& rChars );
-+
-+private:
-+ ::rtl::OUString maColorName;
-+ DiagramColor maColorEntry;
-+ DiagramColorMap& mrColorsMap;
-+};
-+
-+} }
-+
-+
-+#endif
-diff --git oox/source/drawingml/diagram/diagramlayoutatoms.cxx oox/source/drawingml/diagram/diagramlayoutatoms.cxx
-index 9ac3289..43a6281 100644
---- oox/source/drawingml/diagram/diagramlayoutatoms.cxx
-+++ oox/source/drawingml/diagram/diagramlayoutatoms.cxx
-@@ -25,14 +25,24 @@
- *
- ************************************************************************/
-
--#include "oox/drawingml/diagram/diagramlayoutatoms.hxx"
-+#include "diagramlayoutatoms.hxx"
-
- #include <functional>
- #include <boost/bind.hpp>
-
-+#include <basegfx/numeric/ftools.hxx>
-+
- #include "oox/helper/attributelist.hxx"
-+#include "oox/drawingml/fillproperties.hxx"
-+#include "oox/drawingml/lineproperties.hxx"
-+#include "oox/drawingml/textbody.hxx"
-+#include "oox/drawingml/textparagraph.hxx"
-+#include "oox/drawingml/textrun.hxx"
-+#include "oox/drawingml/customshapeproperties.hxx"
-+#include "diagramlayoutatoms.hxx"
- #include "layoutnodecontext.hxx"
-
-+using namespace ::com::sun::star;
- using namespace ::com::sun::star::uno;
- using namespace ::com::sun::star::xml::sax;
- using namespace ::oox::core;
-@@ -42,7 +52,7 @@ namespace oox { namespace drawingml {
-
- IteratorAttr::IteratorAttr( )
- : mnAxis( 0 )
-- , mnCnt( 0 )
-+ , mnCnt( -1 )
- , mbHideLastTrans( false )
- , mnPtType( 0 )
- , mnSt( 0 )
-@@ -54,7 +64,7 @@ void IteratorAttr::loadFromXAttr( const Reference< XFastAttributeList >& xAttr )
- {
- AttributeList attr( xAttr );
- mnAxis = xAttr->getOptionalValueToken( XML_axis, 0 );
-- mnCnt = attr.getInteger( XML_cnt, 0 );
-+ mnCnt = attr.getInteger( XML_cnt, -1 );
- mbHideLastTrans = attr.getBool( XML_hideLastTrans, false );
- mnPtType = xAttr->getOptionalValueToken( XML_ptType, 0 );
- mnSt = attr.getInteger( XML_st, 0 );
-@@ -87,56 +97,675 @@ void LayoutAtom::dump(int level)
- OSL_TRACE( "level = %d - %s of type %s", level,
- OUSTRING_TO_CSTR( msName ),
- typeid(*this).name() );
-- std::for_each( mpChildNodes.begin(), mpChildNodes.end(),
-- boost::bind( &LayoutAtom::dump, _1, level + 1 ) );
-+ const std::vector<LayoutAtomPtr>& pChildren=getChildren();
-+ std::for_each( pChildren.begin(), pChildren.end(),
-+ boost::bind( &LayoutAtom::dump, _1, level + 1 ) );
-+}
-+
-+
-+ForEachAtom::ForEachAtom(const Reference< XFastAttributeList >& xAttributes)
-+{
-+ maIter.loadFromXAttr(xAttributes);
-+}
-+
-+void ForEachAtom::accept( LayoutAtomVisitor& rVisitor )
-+{
-+ rVisitor.visit(*this);
-+}
-+
-+void ChooseAtom::accept( LayoutAtomVisitor& rVisitor )
-+{
-+ rVisitor.visit(*this);
-+}
-+
-+ConditionAtom::ConditionAtom(const Reference< XFastAttributeList >& xAttributes) :
-+ mbElse( false )
-+{
-+ maIter.loadFromXAttr( xAttributes );
-+ maCond.loadFromXAttr( xAttributes );
-+}
-+
-+const std::vector<LayoutAtomPtr>& ConditionAtom::getChildren() const
-+{
-+ bool bDecisionVar=true;
-+ // HACK
-+ if( maCond.mnFunc==XML_var && maCond.mnArg==XML_dir &&
-+ maCond.mnOp==XML_equ && !maCond.msVal.equalsAscii("norm") )
-+ bDecisionVar=false;
-+
-+ if( bDecisionVar )
-+ return mpChildNodes;
-+ else
-+ return mpElseChildNodes;
-+}
-+
-+void ConditionAtom::accept( LayoutAtomVisitor& rVisitor )
-+{
-+ rVisitor.visit(*this);
-+}
-+
-+void ConditionAtom::addChild( const LayoutAtomPtr & pNode )
-+{
-+ if( mbElse )
-+ mpElseChildNodes.push_back( pNode );
-+ else
-+ mpChildNodes.push_back( pNode );
- }
-
-+void ConstraintAtom::accept( LayoutAtomVisitor& rVisitor )
-+{
-+ rVisitor.visit(*this);
-+}
-
--void ForEachAtom::processAtom()
-+void AlgAtom::accept( LayoutAtomVisitor& rVisitor )
- {
-- // TODO there is likely some conditions
-- std::for_each( mpChildNodes.begin(), mpChildNodes.end(),
-- boost::bind( &LayoutAtom::processAtom, _1 ) );
-+ rVisitor.visit(*this);
- }
-
--/** call ConditionAtom::test() if pAtom is one
-- * if it is not a ConditionAtom, then return false.
-- */
--static bool _test_atom( const LayoutAtomPtr & pAtom)
-+void AlgAtom::layoutShape( const ShapePtr& rShape,
-+ const Diagram& /*rDgm*/,
-+ const rtl::OUString& rName ) const
- {
-- try {
-- bool bResult = false;
-- const ConditionAtomPtr pCond = boost::dynamic_pointer_cast< ConditionAtom >(pAtom);
-- if( pCond )
-+ switch(mnType)
-+ {
-+ case XML_composite:
-+ {
-+ if( rShape->getChildren().empty() )
-+ {
-+ rShape->setSize(awt::Size(50,50));
-+ break;
-+ }
-+
-+ // just put stuff below each other
-+ const sal_Int32 nIncX=0;
-+ const sal_Int32 nIncY=1;
-+
-+ std::vector<ShapePtr>::const_iterator aCurrShape=rShape->getChildren().begin();
-+ const std::vector<ShapePtr>::const_iterator aLastShape=rShape->getChildren().end();
-+
-+ // find biggest shape
-+ awt::Size aMaxSize;
-+ while( aCurrShape != aLastShape )
-+ {
-+ const awt::Size& sz=(*aCurrShape)->getSize();
-+
-+ aMaxSize.Width = std::max(
-+ aMaxSize.Width,
-+ sz.Width);
-+ aMaxSize.Height = std::max(
-+ aMaxSize.Height,
-+ sz.Height);
-+
-+ ++aCurrShape;
-+ }
-+
-+ aCurrShape=rShape->getChildren().begin();
-+ const awt::Point aStartPos=(*aCurrShape)->getPosition();
-+ awt::Point aCurrPos=aStartPos;
-+ awt::Size aTotalSize;
-+ aTotalSize.Width = aMaxSize.Width;
-+ while( aCurrShape != aLastShape )
-+ {
-+ const awt::Size& sz=(*aCurrShape)->getSize();
-+ (*aCurrShape)->setPosition(aCurrPos);
-+ (*aCurrShape)->setSize(
-+ awt::Size(aMaxSize.Width,
-+ sz.Height));
-+
-+ aTotalSize.Height = std::max(
-+ aTotalSize.Height,
-+ aCurrPos.Y + sz.Height);
-+
-+ aCurrPos.X += nIncX*sz.Width;
-+ aCurrPos.Y += nIncY*sz.Height;
-+
-+ ++aCurrShape;
-+ }
-+
-+ rShape->setSize(aTotalSize);
-+ break;
-+ }
-+
-+ case XML_conn:
-+ break;
-+
-+ case XML_cycle:
-+ {
-+ if( rShape->getChildren().empty() )
-+ {
-+ rShape->setSize(awt::Size(50,50));
-+ break;
-+ }
-+
-+ const sal_Int32 nStartAngle=maMap.count(XML_stAng) ? maMap.find(XML_stAng)->second : 0;
-+ const sal_Int32 nSpanAngle=maMap.count(XML_spanAng) ? maMap.find(XML_spanAng)->second : 360;
-+
-+ std::vector<ShapePtr>::const_iterator aCurrShape=rShape->getChildren().begin();
-+ const std::vector<ShapePtr>::const_iterator aLastShape=rShape->getChildren().end();
-+ const sal_Int32 nShapes=aLastShape-aCurrShape;
-+
-+ // find biggest shape
-+ awt::Size aMaxSize;
-+ while( aCurrShape != aLastShape )
-+ {
-+ const awt::Size& sz=(*aCurrShape)->getSize();
-+
-+ aMaxSize.Width = std::max(
-+ aMaxSize.Width,
-+ sz.Width);
-+ aMaxSize.Height = std::max(
-+ aMaxSize.Height,
-+ sz.Height);
-+
-+ ++aCurrShape;
-+ }
-+
-+ // layout shapes
-+ const sal_Int32 nMaxDim=std::max(aMaxSize.Width,aMaxSize.Height);
-+ awt::Size aTotalSize;
-+ aCurrShape=rShape->getChildren().begin();
-+ for( sal_Int32 i=0; i<nShapes; ++i, ++aCurrShape )
-+ {
-+ const awt::Size& sz=(*aCurrShape)->getSize();
-+
-+ const double r=nShapes*nMaxDim/F_2PI * 360.0/nSpanAngle;
-+ const awt::Point aCurrPos(
-+ r + r*sin( (double(i)*nSpanAngle/nShapes + nStartAngle)*F_PI180 ),
-+ r - r*cos( (double(i)*nSpanAngle/nShapes + nStartAngle)*F_PI180 ) );
-+ (*aCurrShape)->setPosition(aCurrPos);
-+
-+ aTotalSize.Width = std::max(
-+ aTotalSize.Width,
-+ aCurrPos.X + sz.Width);
-+ aTotalSize.Height = std::max(
-+ aTotalSize.Height,
-+ aCurrPos.Y + sz.Height);
-+ }
-+
-+ rShape->setSize(aTotalSize);
-+ break;
-+ }
-+
-+ case XML_hierChild:
-+ case XML_hierRoot:
-+ break;
-+
-+ case XML_lin:
-+ {
-+ if( rShape->getChildren().empty() )
-+ {
-+ rShape->setSize(awt::Size(50,50));
-+ break;
-+ }
-+
-+ const sal_Int32 nDir=maMap.count(XML_linDir) ? maMap.find(XML_linDir)->second : XML_fromL;
-+ const sal_Int32 nIncX=nDir==XML_fromL ? 1 : (nDir==XML_fromR ? -1 : 0);
-+ const sal_Int32 nIncY=nDir==XML_fromT ? 1 : (nDir==XML_fromB ? -1 : 0);
-+
-+ std::vector<ShapePtr>::const_iterator aCurrShape=rShape->getChildren().begin();
-+ const std::vector<ShapePtr>::const_iterator aLastShape=rShape->getChildren().end();
-+ const awt::Point aStartPos=(*aCurrShape)->getPosition();
-+ awt::Point aCurrPos=aStartPos;
-+ awt::Size aTotalSize;
-+ while( aCurrShape != aLastShape )
-+ {
-+ const awt::Size& sz=(*aCurrShape)->getSize();
-+ (*aCurrShape)->setPosition(aCurrPos);
-+
-+ aTotalSize.Width = std::max(
-+ aTotalSize.Width,
-+ aCurrPos.X + sz.Width);
-+ aTotalSize.Height = std::max(
-+ aTotalSize.Height,
-+ aCurrPos.Y + sz.Height);
-+
-+ // HACK: the spacing is arbitrary
-+ aCurrPos.X += nIncX*(sz.Width+5);
-+ aCurrPos.Y += nIncY*(sz.Height+5);
-+
-+ ++aCurrShape;
-+ }
-+
-+ rShape->setSize(aTotalSize);
-+ break;
-+ }
-+
-+ case XML_pyra:
-+ case XML_snake:
-+ break;
-+
-+ case XML_sp:
-+ // HACK. Handled one level higher. Or rather, planned to
-+ break;
-+
-+ case XML_tx:
-+ {
-+ TextBodyPtr pTextBody=rShape->getTextBody();
-+ if( !pTextBody ||
-+ pTextBody->getParagraphs().empty() ||
-+ pTextBody->getParagraphs().front()->getRuns().empty() )
-+ {
-+ rShape->setSize(awt::Size(5,5));
-+ break;
-+ }
-+
-+ // HACK - count chars & paragraphs to come up with *some*
-+ // notion of necessary size
-+ const sal_Int32 nHackyFontHeight=50;
-+ const sal_Int32 nHackyFontWidth=20;
-+ awt::Size aTotalSize;
-+ for( sal_uInt32 nPara=0; nPara<pTextBody->getParagraphs().size(); ++nPara )
-+ {
-+ aTotalSize.Height += nHackyFontHeight;
-+
-+ sal_Int32 nLocalWidth=0;
-+ for( sal_uInt32 nRun=0; nRun<pTextBody->getParagraphs().at(nPara)->getRuns().size(); ++nRun )
-+ nLocalWidth +=
-+ pTextBody->getParagraphs().at(nPara)->getRuns().at(nRun)->getText().getLength()
-+ * nHackyFontWidth;
-+
-+ aTotalSize.Width = std::max(
-+ aTotalSize.Width,
-+ nLocalWidth);
-+ }
-+
-+ rShape->setSize(aTotalSize);
-+ }
-+
-+ default:
-+ break;
-+ }
-+
-+ OSL_TRACE("Layouting shape %s: (%d,%d,%d,%d)",
-+ OUSTRING_TO_CSTR( rName ),
-+ rShape->getPosition().X,
-+ rShape->getPosition().Y,
-+ rShape->getSize().Width,
-+ rShape->getSize().Height);
-+}
-+
-+void LayoutNode::accept( LayoutAtomVisitor& rVisitor )
-+{
-+ rVisitor.visit(*this);
-+}
-+
-+bool LayoutNode::setupShape( const ShapePtr& rShape, const Diagram& rDgm, sal_uInt32 nIdx ) const
-+{
-+ // find the data node to grab text from
-+ DiagramData::PointsNameMap::const_iterator aDataNode=rDgm.getData()->getPointsPresNameMap().find(msName);
-+ if( aDataNode->second.size() > nIdx &&
-+ aDataNode != rDgm.getData()->getPointsPresNameMap().end() )
-+ {
-+ OSL_TRACE( "Filling content from %d th layout node named \"%s\", modelId \"%s\"",
-+ nIdx,
-+ OUSTRING_TO_CSTR( msName ),
-+ OUSTRING_TO_CSTR( aDataNode->second.at(nIdx)->msModelId ) );
-+
-+ // got the presentation node - now, need the actual data node:
-+ const DiagramData::StringMap::const_iterator aNodeName=rDgm.getData()->getPresOfNameMap().find(
-+ aDataNode->second.at(nIdx)->msModelId);
-+ if( aNodeName != rDgm.getData()->getPresOfNameMap().end() )
-+ {
-+ DiagramData::StringMap::value_type::second_type::const_iterator aVecIter=aNodeName->second.begin();
-+ const DiagramData::StringMap::value_type::second_type::const_iterator aVecEnd=aNodeName->second.end();
-+ while( aVecIter != aVecEnd )
-+ {
-+ DiagramData::PointNameMap::const_iterator aDataNode2=rDgm.getData()->getPointNameMap().find(aVecIter->first);
-+ if( aVecIter->second == 0 )
-+ {
-+ // grab shape attr from topmost element(s)
-+ rShape->getShapeProperties() = aDataNode2->second->mpShape->getShapeProperties();
-+ rShape->getLineProperties() = aDataNode2->second->mpShape->getLineProperties();
-+ rShape->getFillProperties() = aDataNode2->second->mpShape->getFillProperties();
-+ rShape->getCustomShapeProperties() = aDataNode2->second->mpShape->getCustomShapeProperties();
-+ rShape->setMasterTextListStyle( aDataNode2->second->mpShape->getMasterTextListStyle() );
-+
-+ OSL_TRACE( "Custom shape with preset type %s added for layout node named \"%s\"",
-+ OUSTRING_TO_CSTR(
-+ rShape->getCustomShapeProperties()->getShapePresetType()),
-+ OUSTRING_TO_CSTR( msName ) );
-+ }
-+
-+ // append text with right outline level
-+ if( aDataNode2->second->mpShape->getTextBody() &&
-+ !aDataNode2->second->mpShape->getTextBody()->getParagraphs().empty() &&
-+ !aDataNode2->second->mpShape->getTextBody()->getParagraphs().front()->getRuns().empty() )
-+ {
-+ TextBodyPtr pTextBody=rShape->getTextBody();
-+ if( !pTextBody )
-+ {
-+ pTextBody.reset( new TextBody() );
-+
-+ // also copy text attrs
-+ pTextBody->getTextListStyle() =
-+ aDataNode2->second->mpShape->getTextBody()->getTextListStyle();
-+ pTextBody->getTextProperties() =
-+ aDataNode2->second->mpShape->getTextBody()->getTextProperties();
-+
-+ rShape->setTextBody(pTextBody);
-+ }
-+
-+ TextParagraph& rPara=pTextBody->addParagraph();
-+ if( aVecIter->second != -1 )
-+ rPara.getProperties().setLevel(aVecIter->second);
-+
-+ rPara.addRun(
-+ aDataNode2->second->mpShape->getTextBody()->getParagraphs().front()->getRuns().front());
-+ rPara.getProperties().apply(
-+ aDataNode2->second->mpShape->getTextBody()->getParagraphs().front()->getProperties());
-+ }
-+
-+ ++aVecIter;
-+ }
-+ }
-+ else
-+ {
-+ OSL_TRACE("ShapeCreationVisitor::visit: no data node name found while processing shape type %s for layout node named \"%s\"",
-+ OUSTRING_TO_CSTR(
-+ rShape->getCustomShapeProperties()->getShapePresetType()),
-+ OUSTRING_TO_CSTR( msName ) );
-+ }
-+
-+ // TODO(Q1): apply styling & coloring - taking
-+ // layout node's styleLbl for both style & color
-+ // now, but docs are a bit unclear on this
-+ if( msStyleLabel.getLength() )
- {
-- bResult = pCond->test();
-+ OSL_TRACE("setting style with label %s",
-+ OUSTRING_TO_CSTR( msStyleLabel ) );
-+
-+ const DiagramQStyleMap::const_iterator aStyle=rDgm.getStyles().find(msStyleLabel);
-+ if( aStyle != rDgm.getStyles().end() )
-+ {
-+ rShape->getShapeStyleRefs()[XML_fillRef] = aStyle->second.maFillStyle;
-+ OSL_TRACE("added fill style with id %d", aStyle->second.maFillStyle.mnThemedIdx);
-+ rShape->getShapeStyleRefs()[XML_lnRef] = aStyle->second.maLineStyle;
-+ OSL_TRACE("added line style with id %d", aStyle->second.maLineStyle.mnThemedIdx);
-+ rShape->getShapeStyleRefs()[XML_effectRef] = aStyle->second.maEffectStyle;
-+ OSL_TRACE("added effect style with id %d", aStyle->second.maEffectStyle.mnThemedIdx);
-+ rShape->getShapeStyleRefs()[XML_fontRef] = aStyle->second.maTextStyle;
-+ OSL_TRACE("added fontref style with id %d", aStyle->second.maTextStyle.mnThemedIdx);
-+ Color aColor=aStyle->second.maTextStyle.maPhClr;
-+ OSL_TRACE("added fontref color with alpha %d", aColor.getTransparence() );
-+ }
-+
-+ const DiagramColorMap::const_iterator aColor=rDgm.getColors().find(msStyleLabel);
-+ if( aColor != rDgm.getColors().end() )
-+ {
-+ const DiagramColor& rColor=aColor->second;
-+ if( rColor.maFillColor.isUsed() )
-+ rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = rColor.maFillColor;
-+ if( rColor.maLineColor.isUsed() )
-+ rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = rColor.maLineColor;
-+ if( rColor.maEffectColor.isUsed() )
-+ rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = rColor.maEffectColor;
-+ if( rColor.maTextFillColor.isUsed() )
-+ rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = rColor.maTextFillColor;
-+ }
- }
-- return bResult;
-+
-+ // even if no data node found, successful anyway. it's
-+ // contained at the layoutnode
-+ return true;
- }
-- catch(...)
-+ else
- {
-+ OSL_TRACE("ShapeCreationVisitor::visit: no text found while processing shape type %s for layout node named \"%s\"",
-+ OUSTRING_TO_CSTR(
-+ rShape->getCustomShapeProperties()->getShapePresetType()),
-+ OUSTRING_TO_CSTR( msName ) );
- }
-+
- return false;
- }
-
--void ChooseAtom::processAtom()
-+///////////////////////////////////////////////////////////////////////
-+//
-+// Visitation
-+//
-+
-+class ShapeLayoutingVisitor : public LayoutAtomVisitor
-+{
-+ ShapePtr mpParentShape;
-+ const Diagram& mrDgm;
-+ rtl::OUString maName;
-+
-+ virtual void visit(ConstraintAtom& rAtom);
-+ virtual void visit(AlgAtom& rAtom);
-+ virtual void visit(ForEachAtom& rAtom);
-+ virtual void visit(ConditionAtom& rAtom);
-+ virtual void visit(ChooseAtom& rAtom);
-+ virtual void visit(LayoutNode& rAtom);
-+
-+public:
-+ ShapeLayoutingVisitor(const ShapePtr& rParentShape,
-+ const Diagram& rDgm,
-+ const rtl::OUString& rName) :
-+ mpParentShape(rParentShape),
-+ mrDgm(rDgm),
-+ maName(rName)
-+ {}
-+
-+ void defaultVisit(LayoutAtom& rAtom);
-+};
-+
-+class ShallowPresNameVisitor : public LayoutAtomVisitor
-+{
-+ const Diagram& mrDgm;
-+ size_t mnCnt;
-+
-+ void defaultVisit(LayoutAtom& rAtom);
-+ virtual void visit(ConstraintAtom& rAtom);
-+ virtual void visit(AlgAtom& rAtom);
-+ virtual void visit(ForEachAtom& rAtom);
-+ virtual void visit(ConditionAtom& rAtom);
-+ virtual void visit(ChooseAtom& rAtom);
-+ virtual void visit(LayoutNode& rAtom);
-+
-+public:
-+ ShallowPresNameVisitor(const Diagram& rDgm) :
-+ mrDgm(rDgm),
-+ mnCnt(0)
-+ {}
-+
-+ size_t getCount() const
-+ { return mnCnt; }
-+};
-+
-+void ShapeCreationVisitor::defaultVisit(LayoutAtom& rAtom)
-+{
-+ const std::vector<LayoutAtomPtr>& pChildren=rAtom.getChildren();
-+ std::for_each( pChildren.begin(), pChildren.end(),
-+ boost::bind( &LayoutAtom::accept,
-+ _1,
-+ boost::ref(*this)) );
-+}
-+
-+void ShapeCreationVisitor::visit(ConstraintAtom& /*rAtom*/)
-+{
-+ // TODO: eval the constraints
-+}
-+
-+void ShapeCreationVisitor::visit(AlgAtom& rAtom)
- {
-- std::vector< LayoutAtomPtr >::iterator
-- iter = std::find_if( mpChildNodes.begin(), mpChildNodes.end(),
-- boost::bind( &_test_atom, _1 ) );
-- if( iter != mpChildNodes.end() )
-+ defaultVisit(rAtom);
-+}
-+
-+void ShapeCreationVisitor::visit(ForEachAtom& rAtom)
-+{
-+ const std::vector<LayoutAtomPtr>& pChildren=rAtom.getChildren();
-+
-+ sal_Int32 nChildren=1;
-+ if( rAtom.iterator().mnPtType == XML_node )
-+ {
-+ // cound child data nodes - check all child Atoms for "name"
-+ // attribute that is contained in diagram's
-+ // getPointsPresNameMap()
-+ ShallowPresNameVisitor aVisitor(mrDgm);
-+ std::for_each( pChildren.begin(), pChildren.end(),
-+ boost::bind( &LayoutAtom::accept,
-+ _1,
-+ boost::ref(aVisitor)) );
-+ nChildren = aVisitor.getCount();
-+ }
-+
-+ const sal_Int32 nCnt = std::min(
-+ nChildren,
-+ rAtom.iterator().mnCnt==-1 ? nChildren : rAtom.iterator().mnCnt);
-+
-+ const sal_Int32 nOldIdx=mnCurrIdx;
-+ const sal_Int32 nStep=rAtom.iterator().mnStep;
-+ for( mnCurrIdx=0; mnCurrIdx<nCnt && nStep>0; mnCurrIdx+=nStep )
- {
-- // TODO do something
-- (*iter)->processAtom();
-+ // TODO there is likely some conditions
-+ std::for_each( pChildren.begin(), pChildren.end(),
-+ boost::bind( &LayoutAtom::accept,
-+ _1,
-+ boost::ref(*this)) );
- }
-+
-+ // and restore idx
-+ mnCurrIdx = nOldIdx;
- }
-
--bool ConditionAtom::test()
-+void ShapeCreationVisitor::visit(ConditionAtom& rAtom)
- {
-- // TODO
-- return false;
-+ defaultVisit(rAtom);
-+}
-+
-+void ShapeCreationVisitor::visit(ChooseAtom& rAtom)
-+{
-+ defaultVisit(rAtom);
- }
-
-+void ShapeCreationVisitor::visit(LayoutNode& rAtom)
-+{
-+ ShapePtr pCurrParent(mpParentShape);
-+ ShapePtr pCurrShape(rAtom.getShape());
-+ if( pCurrShape )
-+ {
-+ OSL_TRACE("ShapeCreationVisitor::visit: processing shape type %s",
-+ OUSTRING_TO_CSTR(
-+ pCurrShape->getCustomShapeProperties()->getShapePresetType()) );
-+
-+ // TODO(F3): cloned shape shares all properties by reference,
-+ // don't change them!
-+ ShapePtr pClonedShape(
-+ new Shape( pCurrShape ));
-+
-+ if( rAtom.setupShape(pClonedShape, mrDgm, mnCurrIdx) )
-+ {
-+ pCurrParent->addChild(pClonedShape);
-+ pCurrParent = pClonedShape;
-+ }
-+ }
-+ else
-+ {
-+ OSL_TRACE("ShapeCreationVisitor::visit: no shape set while processing layoutnode named %s",
-+ OUSTRING_TO_CSTR( rAtom.getName() ) );
-+ }
-+
-+ // set new parent for children
-+ ShapePtr pPreviousParent(mpParentShape);
-+ mpParentShape=pCurrParent;
-+
-+ // process children
-+ defaultVisit(rAtom);
-+
-+ // restore parent
-+ mpParentShape=pPreviousParent;
-+
-+ // layout shapes - now all child shapes are created
-+ ShapeLayoutingVisitor aLayoutingVisitor(pCurrParent,
-+ mrDgm,
-+ rAtom.getName());
-+ aLayoutingVisitor.defaultVisit(rAtom);
-+}
-+
-+void ShapeLayoutingVisitor::defaultVisit(LayoutAtom& rAtom)
-+{
-+ // visit all children, one of them need to be the layout algoritm
-+ const std::vector<LayoutAtomPtr>& pChildren=rAtom.getChildren();
-+ std::for_each( pChildren.begin(), pChildren.end(),
-+ boost::bind( &LayoutAtom::accept,
-+ _1,
-+ boost::ref(*this)) );
-+}
-+
-+void ShapeLayoutingVisitor::visit(ConstraintAtom& /*rAtom*/)
-+{
-+ // stop processing
-+}
-+
-+void ShapeLayoutingVisitor::visit(AlgAtom& rAtom)
-+{
-+ rAtom.layoutShape(mpParentShape,mrDgm,maName);
-+}
-+
-+void ShapeLayoutingVisitor::visit(ForEachAtom& /*rAtom*/)
-+{
-+ // stop processing
-+}
-+
-+void ShapeLayoutingVisitor::visit(ConditionAtom& rAtom)
-+{
-+ defaultVisit(rAtom);
-+}
-+
-+void ShapeLayoutingVisitor::visit(ChooseAtom& rAtom)
-+{
-+ defaultVisit(rAtom);
-+}
-+
-+void ShapeLayoutingVisitor::visit(LayoutNode& /*rAtom*/)
-+{
-+ // stop processing - only traverse Condition/Choose atoms
-+}
-+
-+void ShallowPresNameVisitor::defaultVisit(LayoutAtom& rAtom)
-+{
-+ // visit all children, at least one of them needs to have proper
-+ // name set
-+ const std::vector<LayoutAtomPtr>& pChildren=rAtom.getChildren();
-+ std::for_each( pChildren.begin(), pChildren.end(),
-+ boost::bind( &LayoutAtom::accept,
-+ _1,
-+ boost::ref(*this)) );
-+}
-+
-+void ShallowPresNameVisitor::visit(ConstraintAtom& /*rAtom*/)
-+{
-+ // stop processing
-+}
-+
-+void ShallowPresNameVisitor::visit(AlgAtom& /*rAtom*/)
-+{
-+ // stop processing
-+}
-+
-+void ShallowPresNameVisitor::visit(ForEachAtom& rAtom)
-+{
-+ defaultVisit(rAtom);
-+}
-+
-+void ShallowPresNameVisitor::visit(ConditionAtom& rAtom)
-+{
-+ defaultVisit(rAtom);
-+}
-+
-+void ShallowPresNameVisitor::visit(ChooseAtom& rAtom)
-+{
-+ defaultVisit(rAtom);
-+}
-+
-+void ShallowPresNameVisitor::visit(LayoutNode& rAtom)
-+{
-+ DiagramData::PointsNameMap::const_iterator aDataNode=
-+ mrDgm.getData()->getPointsPresNameMap().find(rAtom.getName());
-+ if( aDataNode != mrDgm.getData()->getPointsPresNameMap().end() )
-+ mnCnt = std::max(mnCnt,
-+ aDataNode->second.size());
-+}
-
- } }
-
-diff --git oox/source/drawingml/diagram/diagramlayoutatoms.hxx oox/source/drawingml/diagram/diagramlayoutatoms.hxx
-new file mode 100644
-index 0000000..907f527
---- /dev/null
-+++ oox/source/drawingml/diagram/diagramlayoutatoms.hxx
-@@ -0,0 +1,318 @@
-+/*************************************************************************
-+ *
-+ * 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: diagramlayoutatoms.hxx,v $
-+ * $Revision: 1.3 $
-+ *
-+ * 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"
-+#include "diagram.hxx"
-+
-+
-+namespace oox { namespace drawingml {
-+
-+class DiagramLayout;
-+typedef boost::shared_ptr< DiagramLayout > DiagramLayoutPtr;
-+
-+// AG_IteratorAttributes
-+struct IteratorAttr
-+{
-+ IteratorAttr();
-+
-+ // not sure this belong here, but wth
-+ void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
-+
-+ sal_Int32 mnAxis;
-+ sal_Int32 mnCnt;
-+ sal_Bool mbHideLastTrans;
-+ sal_Int32 mnPtType;
-+ sal_Int32 mnSt;
-+ sal_Int32 mnStep;
-+};
-+
-+struct ConditionAttr
-+{
-+ ConditionAttr();
-+
-+ // not sure this belong here, but wth
-+ void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
-+
-+ sal_Int32 mnFunc;
-+ sal_Int32 mnArg;
-+ sal_Int32 mnOp;
-+ ::rtl::OUString msVal;
-+};
-+
-+struct LayoutAtomVisitor;
-+class LayoutAtom;
-+
-+typedef boost::shared_ptr< LayoutAtom > LayoutAtomPtr;
-+
-+/** abstract Atom for the layout */
-+class LayoutAtom
-+{
-+public:
-+ /** visitor acceptance
-+ */
-+ virtual void accept( LayoutAtomVisitor& ) = 0;
-+
-+ void setName( const ::rtl::OUString& sName )
-+ { msName = sName; }
-+ const ::rtl::OUString& getName() const
-+ { return msName; }
-+
-+ virtual void addChild( const LayoutAtomPtr & pNode )
-+ { mpChildNodes.push_back( pNode ); }
-+ virtual const std::vector<LayoutAtomPtr>& getChildren() const
-+ { return mpChildNodes; }
-+
-+ // dump for debug
-+ void dump(int level = 0);
-+protected:
-+ std::vector< LayoutAtomPtr > mpChildNodes;
-+ ::rtl::OUString msName;
-+};
-+
-+class ConstraintAtom
-+ : public LayoutAtom
-+{
-+public:
-+ ConstraintAtom() :
-+ mnFor(-1), msForName(), mnPointType(-1), mnType(-1), mnRefFor(-1), msRefForName(),
-+ mnRefType(-1), mnRefPointType(-1), mfFactor(1.0), mfValue(0.0), mnOperator(0)
-+ {}
-+
-+ virtual void accept( LayoutAtomVisitor& );
-+
-+ void setFor( sal_Int32 nToken )
-+ { mnFor = nToken; }
-+ void setForName( const ::rtl::OUString & sName )
-+ { msForName = sName; }
-+ void setPointType( sal_Int32 nToken )
-+ { mnPointType = nToken; }
-+ void setType( sal_Int32 nToken )
-+ { mnType = nToken; }
-+ void setRefFor( sal_Int32 nToken )
-+ { mnRefFor = nToken; }
-+ void setRefForName( const ::rtl::OUString & sName )
-+ { msRefForName = sName; }
-+ void setRefType( sal_Int32 nToken )
-+ { mnRefType = nToken; }
-+ void setRefPointType( sal_Int32 nToken )
-+ { mnRefPointType = nToken; }
-+ void setFactor( const double& fVal )
-+ { mfFactor = fVal; }
-+ void setValue( const double& fVal )
-+ { mfValue = fVal; }
-+ void setOperator( sal_Int32 nToken )
-+ { mnOperator = nToken; }
-+private:
-+ sal_Int32 mnFor;
-+ ::rtl::OUString msForName;
-+ sal_Int32 mnPointType;
-+ sal_Int32 mnType;
-+ sal_Int32 mnRefFor;
-+ ::rtl::OUString msRefForName;
-+ sal_Int32 mnRefType;
-+ sal_Int32 mnRefPointType;
-+ double mfFactor;
-+ double mfValue;
-+ sal_Int32 mnOperator;
-+};
-+
-+typedef boost::shared_ptr< ConstraintAtom > ConstraintAtomPtr;
-+
-+class AlgAtom
-+ : public LayoutAtom
-+{
-+public:
-+ AlgAtom() : mnType(0), maMap() {}
-+
-+ typedef std::map<sal_Int32,sal_Int32> ParamMap;
-+
-+ virtual void accept( LayoutAtomVisitor& );
-+
-+ void setType( sal_Int32 nToken )
-+ { mnType = nToken; }
-+ void addParam( sal_Int32 nType, sal_Int32 nVal )
-+ { maMap[nType]=nVal; }
-+ void layoutShape( const ShapePtr& rShape,
-+ const Diagram& rDgm,
-+ const rtl::OUString& rName ) const;
-+private:
-+ sal_Int32 mnType;
-+ ParamMap maMap;
-+};
-+
-+typedef boost::shared_ptr< AlgAtom > AlgAtomPtr;
-+
-+class ForEachAtom
-+ : public LayoutAtom
-+{
-+public:
-+ explicit ForEachAtom(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes);
-+
-+ IteratorAttr & iterator()
-+ { return maIter; }
-+ virtual void accept( LayoutAtomVisitor& );
-+
-+private:
-+ IteratorAttr maIter;
-+};
-+
-+typedef boost::shared_ptr< ForEachAtom > ForEachAtomPtr;
-+
-+
-+class ConditionAtom
-+ : public LayoutAtom
-+{
-+public:
-+ explicit ConditionAtom(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes);
-+ bool test();
-+ virtual void accept( LayoutAtomVisitor& );
-+ IteratorAttr & iterator()
-+ { return maIter; }
-+ ConditionAttr & cond()
-+ { return maCond; }
-+ void readElseBranch()
-+ { mbElse=true; }
-+ virtual void addChild( const LayoutAtomPtr & pNode );
-+ virtual const std::vector<LayoutAtomPtr>& getChildren() const;
-+private:
-+ bool mbElse;
-+ IteratorAttr maIter;
-+ ConditionAttr maCond;
-+ std::vector< LayoutAtomPtr > mpElseChildNodes;
-+};
-+
-+typedef boost::shared_ptr< ConditionAtom > ConditionAtomPtr;
-+
-+
-+/** "choose" statements. Atoms will be tested in order. */
-+class ChooseAtom
-+ : public LayoutAtom
-+{
-+public:
-+ virtual void accept( LayoutAtomVisitor& );
-+};
-+
-+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;
-+
-+ LayoutNode() : mnChildOrder(0) {}
-+ virtual void accept( LayoutAtomVisitor& );
-+ VarMap & variables()
-+ { return mVariables; }
-+ void setMoveWith( const ::rtl::OUString & sName )
-+ { msMoveWith = sName; }
-+ void setStyleLabel( const ::rtl::OUString & sLabel )
-+ { msStyleLabel = sLabel; }
-+ void setChildOrder( sal_Int32 nOrder )
-+ { mnChildOrder = nOrder; }
-+ void setShape( const ShapePtr& pShape )
-+ { mpShape = pShape; }
-+ const ShapePtr& getShape() const
-+ { return mpShape; }
-+
-+ bool setupShape( const ShapePtr& rShape,
-+ const Diagram& rDgm,
-+ sal_uInt32 nIdx ) const;
-+
-+private:
-+ VarMap mVariables;
-+ ::rtl::OUString msMoveWith;
-+ ::rtl::OUString msStyleLabel;
-+ ShapePtr mpShape;
-+ sal_Int32 mnChildOrder;
-+};
-+
-+typedef boost::shared_ptr< LayoutNode > LayoutNodePtr;
-+
-+struct LayoutAtomVisitor
-+{
-+ virtual ~LayoutAtomVisitor() {}
-+ virtual void visit(ConstraintAtom& rAtom) = 0;
-+ virtual void visit(AlgAtom& rAtom) = 0;
-+ virtual void visit(ForEachAtom& rAtom) = 0;
-+ virtual void visit(ConditionAtom& rAtom) = 0;
-+ virtual void visit(ChooseAtom& rAtom) = 0;
-+ virtual void visit(LayoutNode& rAtom) = 0;
-+};
-+
-+class ShapeCreationVisitor : public LayoutAtomVisitor
-+{
-+ ShapePtr mpParentShape;
-+ const Diagram& mrDgm;
-+ sal_Int32 mnCurrIdx;
-+
-+ void defaultVisit(LayoutAtom& rAtom);
-+ virtual void visit(ConstraintAtom& rAtom);
-+ virtual void visit(AlgAtom& rAtom);
-+ virtual void visit(ForEachAtom& rAtom);
-+ virtual void visit(ConditionAtom& rAtom);
-+ virtual void visit(ChooseAtom& rAtom);
-+ virtual void visit(LayoutNode& rAtom);
-+
-+public:
-+ ShapeCreationVisitor(const ShapePtr& rParentShape,
-+ const Diagram& rDgm) :
-+ mpParentShape(rParentShape),
-+ mrDgm(rDgm),
-+ mnCurrIdx(0)
-+ {}
-+};
-+
-+} }
-+
-+#endif
-diff --git oox/source/drawingml/diagram/layoutnodecontext.cxx oox/source/drawingml/diagram/layoutnodecontext.cxx
-index 897afeb..8a8785d 100644
---- oox/source/drawingml/diagram/layoutnodecontext.cxx
-+++ oox/source/drawingml/diagram/layoutnodecontext.cxx
-@@ -31,7 +31,9 @@
- #include "oox/core/namespaces.hxx"
- #include "oox/drawingml/diagram/diagram.hxx"
- #include "oox/drawingml/shapecontext.hxx"
-+#include "oox/drawingml/customshapeproperties.hxx"
- #include "diagramdefinitioncontext.hxx"
-+#include "constraintlistcontext.hxx"
-
- using namespace ::oox::core;
- using namespace ::com::sun::star::uno;
-@@ -46,15 +48,9 @@ class IfContext
- public:
- IfContext( ContextHandler& rParent,
- const Reference< XFastAttributeList >& xAttribs,
-- const LayoutAtomPtr & pNode )
-- : LayoutNodeContext( rParent, xAttribs, pNode )
-- {
-- ConditionAtomPtr pAtom( boost::dynamic_pointer_cast< ConditionAtom >(pNode) );
-- OSL_ENSURE( pAtom, "Must pass a ConditionAtom" );
--
-- pAtom->iterator().loadFromXAttr( xAttribs );
-- pAtom->cond().loadFromXAttr( xAttribs );
-- }
-+ const ConditionAtomPtr& pAtom )
-+ : LayoutNodeContext( rParent, xAttribs, pAtom )
-+ {}
- };
-
-
-@@ -63,21 +59,47 @@ class AlgorithmContext
- : public ContextHandler
- {
- public:
-- AlgorithmContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const LayoutAtomPtr & pNode )
-+ AlgorithmContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const AlgAtomPtr & pNode )
- : ContextHandler( rParent )
- , mnRevision( 0 )
-- , mnType( 0 )
- , mpNode( pNode )
- {
- AttributeList aAttribs( xAttribs );
- mnRevision = aAttribs.getInteger( XML_rev, 0 );
-- mnType = xAttribs->getOptionalValueToken( XML_type, 0 );
-+ pNode->setType(xAttribs->getOptionalValueToken(XML_type, 0));
-+ }
-+
-+ virtual Reference< XFastContextHandler > SAL_CALL
-+ createFastChildContext( ::sal_Int32 aElement,
-+ const Reference< XFastAttributeList >& xAttribs )
-+ throw (SAXException, RuntimeException)
-+ {
-+ Reference< XFastContextHandler > xRet;
-+
-+ switch( getToken(aElement) )
-+ {
-+ case XML_param:
-+ {
-+ AttributeList aAttribs( xAttribs );
-+ const sal_Int32 nValTok=aAttribs.getToken( XML_val, 0 );
-+ mpNode->addParam(
-+ aAttribs.getToken( XML_type, 0 ),
-+ nValTok>0 ? nValTok : aAttribs.getInteger( XML_val, 0 ) );
-+ break;
-+ }
-+ default:
-+ break;
-+ }
-+
-+ if( !xRet.is() )
-+ xRet.set(this);
-+
-+ return xRet;
- }
-
- private:
-- sal_Int32 mnRevision;
-- sal_Int32 mnType;
-- LayoutAtomPtr mpNode;
-+ sal_Int32 mnRevision;
-+ AlgAtomPtr mpNode;
- };
-
-
-@@ -87,7 +109,6 @@ class ChooseContext
- public:
- ChooseContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const LayoutAtomPtr & pNode )
- : ContextHandler( rParent )
-- , mbHasElse( false )
- , mpNode( pNode )
- {
- msName = xAttribs->getOptionalValue( XML_name );
-@@ -100,24 +121,23 @@ public:
- {
- Reference< XFastContextHandler > xRet;
-
-- switch( aElement )
-+ switch( getToken(aElement) )
- {
- case XML_if:
- {
- // CT_When
-- LayoutAtomPtr pAtom( new ConditionAtom( false ) );
-- mpNode->addChild( pAtom );
-- xRet.set( new IfContext( *this, xAttribs, pAtom ) );
-+ mpConditionNode.reset( new ConditionAtom(xAttribs) );
-+ mpNode->addChild( mpConditionNode );
-+ xRet.set( new IfContext( *this, xAttribs, mpConditionNode ) );
- break;
- }
- case XML_else:
- // CT_Otherwise
-- if( !mbHasElse )
-+ if( mpConditionNode )
- {
-- LayoutAtomPtr pAtom( new ConditionAtom( true ) );
-- mpNode->addChild( pAtom );
-- xRet.set( new IfContext( *this, xAttribs, pAtom ) );
-- mbHasElse = true;
-+ mpConditionNode->readElseBranch();
-+ xRet.set( new IfContext( *this, xAttribs, mpConditionNode ) );
-+ mpConditionNode.reset();
- }
- else
- {
-@@ -134,9 +154,9 @@ public:
- return xRet;
- }
- private:
-- bool mbHasElse;
- OUString msName;
- LayoutAtomPtr mpNode;
-+ ConditionAtomPtr mpConditionNode;
- };
-
-
-@@ -146,13 +166,10 @@ class ForEachContext
- : public LayoutNodeContext
- {
- public:
-- ForEachContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const LayoutAtomPtr & pNode )
-- : LayoutNodeContext( rParent, xAttribs, pNode )
-+ ForEachContext( ContextHandler& rParent, const Reference< XFastAttributeList >& xAttribs, const ForEachAtomPtr& pAtom )
-+ : LayoutNodeContext( rParent, xAttribs, pAtom )
- {
-- ForEachAtomPtr pAtom( boost::dynamic_pointer_cast< ForEachAtom >(pNode) );
-- OSL_ENSURE( pAtom, "Must pass a ForEachAtom" );
- xAttribs->getOptionalValue( XML_ref );
--
- pAtom->iterator().loadFromXAttr( xAttribs );
- }
- };
-@@ -196,17 +213,12 @@ private:
- // CT_LayoutNode
- LayoutNodeContext::LayoutNodeContext( ContextHandler& rParent,
- const Reference< XFastAttributeList >& xAttribs,
-- const LayoutAtomPtr &pNode )
-+ const LayoutAtomPtr& pAtom )
- : ContextHandler( rParent )
-- , mpNode( pNode )
-+ , mpNode( pAtom )
- {
-- OSL_ENSURE( pNode, "Node must NOT be NULL" );
-+ OSL_ENSURE( pAtom, "Node must NOT be NULL" );
- mpNode->setName( xAttribs->getOptionalValue( XML_name ) );
-- // TODO shall we even bother?
-- // b or t
--// sal_Int32 nChOrder = xAttributes->getOptionalValueToken( XML_chOrder, XML_b );
--// OUString sMoveWith = xAttributes->getOptionalValue( XML_moveWith );
--// OUString sStyleLbl = xAttributes->getOptionalValue( XML_styleLbl );
- }
-
-
-@@ -227,33 +239,33 @@ void SAL_CALL LayoutNodeContext::endFastElement( ::sal_Int32 )
- sal_Int32 LayoutNodeContext::tagToVarIdx( sal_Int32 aTag )
- {
- sal_Int32 nIdx = -1;
-- switch( aTag )
-+ switch( aTag & ~NMSP_DIAGRAM )
- {
-- case NMSP_DIAGRAM|XML_animLvl:
-+ case XML_animLvl:
- nIdx = LayoutNode::VAR_animLvl;
- break;
-- case NMSP_DIAGRAM|XML_animOne:
-+ case XML_animOne:
- nIdx = LayoutNode::VAR_animOne;
- break;
-- case NMSP_DIAGRAM|XML_bulletEnabled:
-+ case XML_bulletEnabled:
- nIdx = LayoutNode::VAR_bulletEnabled;
- break;
-- case NMSP_DIAGRAM|XML_chMax:
-+ case XML_chMax:
- nIdx = LayoutNode::VAR_chMax;
- break;
-- case NMSP_DIAGRAM|XML_chPref:
-+ case XML_chPref:
- nIdx = LayoutNode::VAR_chPref;
- break;
-- case NMSP_DIAGRAM|XML_dir:
-+ case XML_dir:
- nIdx = LayoutNode::VAR_dir;
- break;
-- case NMSP_DIAGRAM|XML_hierBranch:
-+ case XML_hierBranch:
- nIdx = LayoutNode::VAR_hierBranch;
- break;
-- case NMSP_DIAGRAM|XML_orgChart:
-+ case XML_orgChart:
- nIdx = LayoutNode::VAR_orgChart;
- break;
-- case NMSP_DIAGRAM|XML_resizeHandles:
-+ case XML_resizeHandles:
- nIdx = LayoutNode::VAR_resizeHandles;
- break;
- default:
-@@ -276,13 +288,39 @@ LayoutNodeContext::createFastChildContext( ::sal_Int32 aElement,
- {
- LayoutNodePtr pNode( new LayoutNode() );
- mpNode->addChild( pNode );
-+ pNode->setChildOrder( xAttribs->getOptionalValueToken( XML_chOrder, XML_b ) );
-+ pNode->setMoveWith( xAttribs->getOptionalValue( XML_moveWith ) );
-+ pNode->setStyleLabel( xAttribs->getOptionalValue( XML_styleLbl ) );
- xRet.set( new LayoutNodeContext( *this, xAttribs, pNode ) );
- break;
- }
- case NMSP_DIAGRAM|XML_shape:
- {
-- ShapePtr pShape( new Shape() );
-- xRet.set( new ShapeContext( *this, ShapePtr(), pShape ) );
-+ LayoutNodePtr pNode( boost::dynamic_pointer_cast< LayoutNode >( mpNode ) );
-+ if( pNode )
-+ {
-+ ShapePtr pShape;
-+
-+ if( xAttribs->hasAttribute( XML_type ) )
-+ {
-+ pShape.reset( new Shape("com.sun.star.drawing.CustomShape") );
-+ const sal_Int32 nType(xAttribs->getOptionalValueToken( XML_type, XML_obj ));
-+ pShape->setSubType( nType );
-+ pShape->getCustomShapeProperties()->setShapePresetType(
-+ GetShapePresetType( nType ) );
-+ }
-+ else
-+ {
-+ pShape.reset( new Shape("com.sun.star.drawing.GroupShape") );
-+ }
-+
-+ pNode->setShape( pShape );
-+ xRet.set( new ShapeContext( *this, ShapePtr(), pShape ) );
-+ }
-+ else
-+ {
-+ OSL_TRACE( "OOX: encountered a shape in a non layoutNode context" );
-+ }
- break;
- }
- case NMSP_DIAGRAM|XML_extLst:
-@@ -290,7 +328,7 @@ LayoutNodeContext::createFastChildContext( ::sal_Int32 aElement,
- case NMSP_DIAGRAM|XML_alg:
- {
- // CT_Algorithm
-- LayoutAtomPtr pAtom( new AlgAtom );
-+ AlgAtomPtr pAtom( new AlgAtom );
- mpNode->addChild( pAtom );
- xRet.set( new AlgorithmContext( *this, xAttribs, pAtom ) );
- break;
-@@ -306,14 +344,14 @@ LayoutNodeContext::createFastChildContext( ::sal_Int32 aElement,
- case NMSP_DIAGRAM|XML_forEach:
- {
- // CT_ForEach
-- LayoutAtomPtr pAtom( new ForEachAtom );
-+ ForEachAtomPtr pAtom( new ForEachAtom(xAttribs) );
- mpNode->addChild( pAtom );
- xRet.set( new ForEachContext( *this, xAttribs, pAtom ) );
- break;
- }
- case NMSP_DIAGRAM|XML_constrLst:
- // CT_Constraints
-- // TODO
-+ xRet.set( new ConstraintListContext( *this, xAttribs, mpNode ) );
- break;
- case NMSP_DIAGRAM|XML_presOf:
- {
-diff --git oox/source/drawingml/diagram/layoutnodecontext.hxx oox/source/drawingml/diagram/layoutnodecontext.hxx
-index 6ded8e9..697f0f5 100644
---- oox/source/drawingml/diagram/layoutnodecontext.hxx
-+++ oox/source/drawingml/diagram/layoutnodecontext.hxx
-@@ -29,7 +29,8 @@
- #define OOX_DRAWINGML_LAYOUTNODECONTEXT_HXX
-
- #include "oox/core/contexthandler.hxx"
--#include "oox/drawingml/diagram/diagram.hxx"
-+#include "diagramlayoutatoms.hxx"
-+#include "diagram.hxx"
-
- namespace oox { namespace drawingml {
-
-diff --git oox/source/drawingml/diagram/makefile.mk oox/source/drawingml/diagram/makefile.mk
-index 9d526ed..1d438c2 100644
---- oox/source/drawingml/diagram/makefile.mk
-+++ oox/source/drawingml/diagram/makefile.mk
-@@ -41,6 +41,7 @@ ENABLE_EXCEPTIONS=TRUE
- # --- Files --------------------------------------------------------
-
- SLOFILES = \
-+ $(SLO)$/constraintlistcontext.obj \
- $(SLO)$/diagram.obj \
- $(SLO)$/diagramfragmenthandler.obj \
- $(SLO)$/diagramdefinitioncontext.obj \
-diff --git oox/source/drawingml/drawingmltypes.cxx oox/source/drawingml/drawingmltypes.cxx
-index dc76800..4882ebb 100644
---- oox/source/drawingml/drawingmltypes.cxx
-+++ oox/source/drawingml/drawingmltypes.cxx
-@@ -159,6 +159,7 @@ float GetFontHeight( sal_Int32 nHeight )
-
- sal_Int16 GetFontUnderline( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_none: return FontUnderline::NONE;
-@@ -185,6 +186,7 @@ sal_Int16 GetFontUnderline( sal_Int32 nToken )
-
- sal_Int16 GetFontStrikeout( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_dblStrike: return FontStrikeout::DOUBLE;
-@@ -207,6 +209,7 @@ sal_Int16 GetCaseMap( sal_Int32 nToken )
- /** converts a paragraph align to a ParaAdjust */
- sal_Int16 GetParaAdjust( sal_Int32 nAlign )
- {
-+ OSL_ASSERT((nAlign & sal_Int32(0xFFFF0000))==0);
- sal_Int16 nEnum;
- switch( nAlign )
- {
-@@ -235,6 +238,7 @@ sal_Int16 GetParaAdjust( sal_Int32 nAlign )
-
- TabAlign GetTabAlign( sal_Int32 aToken )
- {
-+ OSL_ASSERT((aToken & sal_Int32(0xFFFF0000))==0);
- TabAlign nEnum;
- switch( aToken )
- {
-diff --git oox/source/drawingml/fillproperties.cxx oox/source/drawingml/fillproperties.cxx
-index a5d7ef8..635c757 100644
---- oox/source/drawingml/fillproperties.cxx
-+++ oox/source/drawingml/fillproperties.cxx
-@@ -78,6 +78,7 @@ static const sal_Int32 spnDefaultFillIds[ FillId_END ] =
-
- BitmapMode lclGetBitmapMode( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_tile: return BitmapMode_REPEAT;
-@@ -88,6 +89,7 @@ BitmapMode lclGetBitmapMode( sal_Int32 nToken )
-
- RectanglePoint lclGetRectanglePoint( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_tl: return RectanglePoint_LEFT_TOP;
-@@ -222,6 +224,7 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, ModelObjectHelper& rM
- if( moFillType.has() )
- {
- FillStyle eFillStyle = FillStyle_NONE;
-+ OSL_ASSERT((moFillType.get() & sal_Int32(0xFFFF0000))==0);
- switch( moFillType.get() )
- {
- case XML_noFill:
-diff --git oox/source/drawingml/graphicshapecontext.cxx oox/source/drawingml/graphicshapecontext.cxx
-index c0b21af..3c1ca92 100644
---- oox/source/drawingml/graphicshapecontext.cxx
-+++ oox/source/drawingml/graphicshapecontext.cxx
-@@ -31,7 +31,7 @@
-
- #include "oox/drawingml/fillpropertiesgroupcontext.hxx"
- #include "oox/drawingml/customshapeproperties.hxx"
--#include "oox/drawingml/diagram/diagramfragmenthandler.hxx"
-+#include "oox/drawingml/diagram/diagram.hxx"
- #include "oox/drawingml/table/tablecontext.hxx"
- #include "oox/core/namespaces.hxx"
- #include "oox/core/xmlfilterbase.hxx"
-@@ -93,7 +93,7 @@ Reference< XFastContextHandler > GraphicShapeContext::createFastChildContext( sa
- (mpShapePtr->getCustomShapeProperties());
-
- sal_uInt32 nType = aElementToken & (~ NMSP_MASK);
-- OUString sType(GetShapeType(nType));
-+ OUString sType(GetShapePresetType(nType));
-
- if (sType.getLength() > 0)
- pCstmShpProps->setShapePresetType(sType);
-@@ -118,6 +118,7 @@ Reference< XFastContextHandler > GraphicalObjectFrameContext::createFastChildCon
- {
- Reference< XFastContextHandler > xRet;
-
-+ OSL_ASSERT(((aElementToken &(~NMSP_MASK)) & sal_Int32(0xFFFF0000))==0);
- switch( aElementToken &(~NMSP_MASK) )
- {
- // CT_ShapeProperties
-@@ -276,48 +277,6 @@ DiagramGraphicDataContext::~DiagramGraphicDataContext()
- {
- }
-
--DiagramPtr DiagramGraphicDataContext::loadDiagram()
--{
-- DiagramPtr pDiagram( new Diagram() );
-- XmlFilterBase& rFilter = getFilter();
--
-- // data
-- OUString sDmPath = getFragmentPathFromRelId( msDm );
-- if( sDmPath.getLength() > 0 )
-- {
-- DiagramDataPtr pData( new DiagramData() );
-- pDiagram->setData( pData );
-- rFilter.importFragment( new DiagramDataFragmentHandler( rFilter, sDmPath, pData ) );
-- }
-- // layout
-- OUString sLoPath = getFragmentPathFromRelId( msLo );
-- if( sLoPath.getLength() > 0 )
-- {
-- DiagramLayoutPtr pLayout( new DiagramLayout() );
-- pDiagram->setLayout( pLayout );
-- rFilter.importFragment( new DiagramLayoutFragmentHandler( rFilter, sLoPath, pLayout ) );
-- }
-- // style
-- OUString sQsPath = getFragmentPathFromRelId( msQs );
-- if( sQsPath.getLength() > 0 )
-- {
-- DiagramQStylesPtr pStyles( new DiagramQStyles() );
-- pDiagram->setQStyles( pStyles );
-- rFilter.importFragment( new DiagramQStylesFragmentHandler( rFilter, sQsPath, pStyles ) );
-- }
-- // colors
-- OUString sCsPath = getFragmentPathFromRelId( msCs );
-- if( sCsPath.getLength() > 0 )
-- {
-- DiagramColorsPtr pColors( new DiagramColors() );
-- pDiagram->setColors( pColors );
-- rFilter.importFragment( new DiagramColorsFragmentHandler( rFilter, sCsPath, pColors ) ) ;
-- }
--
-- return pDiagram;
--}
--
--
- Reference< XFastContextHandler > DiagramGraphicDataContext::createFastChildContext( ::sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs )
- throw (SAXException, RuntimeException)
- {
-@@ -331,8 +290,12 @@ Reference< XFastContextHandler > DiagramGraphicDataContext::createFastChildConte
- msLo = xAttribs->getOptionalValue( NMSP_RELATIONSHIPS|XML_lo );
- msQs = xAttribs->getOptionalValue( NMSP_RELATIONSHIPS|XML_qs );
- msCs = xAttribs->getOptionalValue( NMSP_RELATIONSHIPS|XML_cs );
-- DiagramPtr pDiagram = loadDiagram();
-- pDiagram->addTo( mpShapePtr );
-+ loadDiagram(mpShapePtr,
-+ getFilter(),
-+ getFragmentPathFromRelId( msDm ),
-+ getFragmentPathFromRelId( msLo ),
-+ getFragmentPathFromRelId( msQs ),
-+ getFragmentPathFromRelId( msCs ));
- OSL_TRACE("diagram added shape %s of type %s", OUSTRING_TO_CSTR( mpShapePtr->getName() ),
- OUSTRING_TO_CSTR( mpShapePtr->getServiceName() ) );
- break;
-@@ -391,7 +354,8 @@ void CreateChartCallback::onXShapeCreated( const Reference< drawing::XShape >& r
- Reference< drawing::XShapes > xExternalPage;
- if( !mbEmbedShapes )
- xExternalPage = rxShapes;
-- mrFilter.getChartConverter().convertFromModel( mrFilter, aModel, xChartDoc, xExternalPage, rxShape->getPosition(), rxShape->getSize() );
-+ if( mrFilter.getChartConverter() )
-+ mrFilter.getChartConverter()->convertFromModel( mrFilter, aModel, xChartDoc, xExternalPage, rxShape->getPosition(), rxShape->getSize() );
- }
- catch( Exception& )
- {
-diff --git oox/source/drawingml/lineproperties.cxx oox/source/drawingml/lineproperties.cxx
-index 02826cf..9b737eb 100644
---- oox/source/drawingml/lineproperties.cxx
-+++ oox/source/drawingml/lineproperties.cxx
-@@ -159,6 +159,7 @@ void lclConvertCustomDash( LineDash& orLineDash, const LineProperties::DashStopV
-
- DashStyle lclGetDashStyle( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_rnd: return DashStyle_ROUNDRELATIVE;
-@@ -170,6 +171,7 @@ DashStyle lclGetDashStyle( sal_Int32 nToken )
-
- LineJoint lclGetLineJoint( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_round: return LineJoint_ROUND;
-@@ -185,6 +187,7 @@ const sal_Int32 OOX_ARROWSIZE_LARGE = 2;
-
- sal_Int32 lclGetArrowSize( sal_Int32 nToken )
- {
-+ OSL_ASSERT((nToken & sal_Int32(0xFFFF0000))==0);
- switch( nToken )
- {
- case XML_sm: return OOX_ARROWSIZE_SMALL;
-@@ -206,6 +209,7 @@ void lclPushMarkerProperties( PropertyMap& rPropMap, const LineArrowProperties&
-
- OUStringBuffer aBuffer;
- sal_Int32 nArrowType = rArrowProps.moArrowType.get( XML_none );
-+ OSL_ASSERT((nArrowType & sal_Int32(0xFFFF0000))==0);
- switch( nArrowType )
- {
- case XML_triangle:
-@@ -262,6 +266,7 @@ void lclPushMarkerProperties( PropertyMap& rPropMap, const LineArrowProperties&
- #define OOX_ARROW_POINT( x, y ) Point( static_cast< sal_Int32 >( fArrowWidth * x ), static_cast< sal_Int32 >( fArrowLength * y ) )
-
- ::std::vector< Point > aPoints;
-+ OSL_ASSERT((rArrowProps.moArrowType.get() & sal_Int32(0xFFFF0000))==0);
- switch( rArrowProps.moArrowType.get() )
- {
- case XML_triangle:
-diff --git oox/source/drawingml/makefile.mk oox/source/drawingml/makefile.mk
-index e2d4ea6..5079b02 100644
---- oox/source/drawingml/makefile.mk
-+++ oox/source/drawingml/makefile.mk
-@@ -59,6 +59,7 @@ SLOFILES = \
- $(SLO)$/linepropertiescontext.obj\
- $(SLO)$/objectdefaultcontext.obj\
- $(SLO)$/shape.obj\
-+ $(SLO)$/shape3dproperties.obj\
- $(SLO)$/shapecontext.obj\
- $(SLO)$/shapegroupcontext.obj\
- $(SLO)$/shapepropertiescontext.obj\
-diff --git oox/source/drawingml/scene3dcontext.cxx oox/source/drawingml/scene3dcontext.cxx
-new file mode 100644
-index 0000000..4f629d8
---- /dev/null
-+++ oox/source/drawingml/scene3dcontext.cxx
-@@ -0,0 +1,189 @@
-+/*************************************************************************
-+ *
-+ * 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.cxx,v $
-+ * $Revision: 1.8.6.1 $
-+ *
-+ * 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 "oox/drawingml/scene3dcontext.hxx"
-+#include <com/sun/star/io/XInputStream.hpp>
-+#include <com/sun/star/graphic/XGraphicProvider.hpp>
-+#include <cppuhelper/exc_hlp.hxx>
-+#include <comphelper/anytostring.hxx>
-+#include "oox/drawingml/colorchoicecontext.hxx"
-+#include "oox/drawingml/drawingmltypes.hxx"
-+#include "oox/drawingml/fillproperties.hxx"
-+#include "oox/core/namespaces.hxx"
-+#include "oox/core/xmlfilterbase.hxx"
-+#include "oox/helper/attributelist.hxx"
-+
-+using ::rtl::OUString;
-+using ::oox::core::ContextHandler;
-+using ::oox::core::XmlFilterBase;
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::uno;
-+using namespace ::com::sun::star::xml::sax;
-+
-+namespace oox { namespace drawingml {
-+
-+Scene3DContext::Scene3DContext( ContextHandler& rParent, Shape3DProperties& r3DProperties ) throw()
-+: ContextHandler( rParent )
-+, mr3DProperties( r3DProperties )
-+{
-+}
-+
-+Reference< XFastContextHandler > Scene3DContext::createFastChildContext( sal_Int32 aElementToken, const Reference< XFastAttributeList >& xAttribs )
-+ throw ( SAXException, RuntimeException )
-+{
-+ AttributeList aAttribs( xAttribs );
-+ Reference< XFastContextHandler > xRet;
-+
-+ switch( aElementToken )
-+ {
-+ case NMSP_DRAWINGML|XML_camera:
-+ mr3DProperties.mfFieldOfVision = aAttribs.getInteger( XML_fov, 0 ) / 36000000.0;
-+ mr3DProperties.mfZoom = aAttribs.getInteger( XML_zoom, 100000 ) / 100000.0;
-+ mr3DProperties.mnPreset = aAttribs.getToken( XML_prst, XML_none );
-+
-+legacyObliqueTopLeft
-+legacyObliqueTop
-+legacyObliqueTopRight
-+legacyObliqueLeft
-+legacyObliqueFront
-+legacyObliqueRight
-+legacyObliqueBottomLeft
-+legacyObliqueBottom
-+legacyObliqueBottomRight
-+legacyPerspectiveTopLeft
-+legacyPerspectiveTop
-+legacyPerspectiveTopRight
-+legacyPerspectiveLeft
-+legacyPerspectiveFront
-+legacyPerspectiveRight
-+legacyPerspectiveBottomLeft
-+legacyPerspectiveBottom
-+legacyPerspectiveBottomRight
-+orthographicFront
-+isometricTopUp
-+isometricTopDown
-+isometricBottomUp
-+isometricBottomDown
-+isometricLeftUp
-+isometricLeftDown
-+isometricRightUp
-+isometricRightDown
-+isometricOffAxis1Left
-+isometricOffAxis1Right
-+isometricOffAxis1Top
-+isometricOffAxis2Left
-+isometricOffAxis2Right
-+isometricOffAxis2Top
-+isometricOffAxis3Left
-+isometricOffAxis3Right
-+isometricOffAxis3Bottom
-+isometricOffAxis4Left
-+isometricOffAxis4Right
-+isometricOffAxis4Bottom
-+obliqueTopLeft
-+obliqueTop
-+obliqueTopRight
-+obliqueLeft
-+obliqueRight
-+obliqueBottomLeft
-+obliqueBottom
-+obliqueBottomRight
-+perspectiveFront
-+perspectiveLeft
-+perspectiveRight
-+perspectiveAbove
-+perspectiveBelow
-+perspectiveAboveLeftFacing
-+perspectiveAboveRightFacing
-+perspectiveContrastingLeftFacing
-+perspectiveContrastingRightFacing
-+perspectiveHeroicLeftFacing
-+perspectiveHeroicRightFacing
-+perspectiveHeroicExtremeLeftFacing
-+perspectiveHeroicExtremeRightFacing
-+perspectiveRelaxed
-+perspectiveRelaxedModerately
-+
-+
-+ // TODO: nested element XML_rot
-+ break;
-+ case NMSP_DRAWINGML|XML_lightRig:
-+ mr3DProperties.mnLightRigDirection = aAttribs.getToken( XML_dir, XML_none );
-+
-+XML_tl
-+XML_t
-+XML_tr
-+XML_l
-+XML_r
-+XML_bl
-+XML_b
-+XML_br
-+
-+
-+ mr3DProperties.mnLightRigType = aAttribs.getToken( XML_rig, XML_none );
-+
-+XML_legacyFlat1
-+XML_legacyFlat2
-+XML_legacyFlat3
-+XML_legacyFlat4
-+XML_legacyNormal1
-+XML_legacyNormal2
-+XML_legacyNormal3
-+XML_legacyNormal4
-+XML_legacyHarsh1
-+XML_legacyHarsh2
-+XML_legacyHarsh3
-+XML_legacyHarsh4
-+XML_threePt
-+XML_balanced
-+XML_soft
-+XML_harsh
-+XML_flood
-+XML_contrasting
-+XML_morning
-+XML_sunrise
-+XML_sunset
-+XML_chilly
-+XML_freezing
-+XML_flat
-+XML_twoPt
-+XML_glow
-+XML_brightRoom
-+
-+ // TODO: nested element XML_rot
-+ break;
-+ case NMSP_DRAWINGML|XML_backdrop:
-+ case NMSP_DRAWINGML|XML_extLst:
-+ return xRet; // TODO: later (backdrop is not supported by core anyway)
-+ }
-+ return xRet;
-+}
-+
-+} }
-diff --git oox/source/drawingml/shape.cxx oox/source/drawingml/shape.cxx
-index 60aae15..72d5406 100644
---- oox/source/drawingml/shape.cxx
-+++ oox/source/drawingml/shape.cxx
-@@ -41,8 +41,10 @@
- #include <tools/solar.h> // for the F_PI180 define
- #include <com/sun/star/graphic/XGraphic.hpp>
- #include <com/sun/star/container/XNamed.hpp>
-+#include <com/sun/star/container/XNameContainer.hpp>
- #include <com/sun/star/beans/XMultiPropertySet.hpp>
- #include <com/sun/star/lang/XMultiServiceFactory.hpp>
-+#include <com/sun/star/xml/AttributeData.hpp>
- #include <com/sun/star/drawing/HomogenMatrix3.hpp>
- #include <com/sun/star/drawing/ConnectorType.hpp>
- #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
-@@ -102,6 +104,34 @@ Shape::Shape( const sal_Char* pServiceName )
- msServiceName = OUString::createFromAscii( pServiceName );
- setDefaults();
- }
-+
-+Shape::Shape( const ShapePtr& pSourceShape )
-+: maChildren()
-+, mbIsChild( pSourceShape->mbIsChild )
-+, mpTextBody(pSourceShape->mpTextBody)
-+, mpLinePropertiesPtr( pSourceShape->mpLinePropertiesPtr )
-+, mpFillPropertiesPtr( pSourceShape->mpFillPropertiesPtr )
-+, mpGraphicPropertiesPtr( pSourceShape->mpGraphicPropertiesPtr )
-+, mpCustomShapePropertiesPtr( pSourceShape->mpCustomShapePropertiesPtr )
-+, mpTablePropertiesPtr( pSourceShape->mpTablePropertiesPtr )
-+, mp3DPropertiesPtr( pSourceShape->mp3DPropertiesPtr )
-+, maShapeProperties( pSourceShape->maShapeProperties )
-+, mpMasterTextListStyle( pSourceShape->mpMasterTextListStyle )
-+, mxShape()
-+, msServiceName( pSourceShape->msServiceName )
-+, msName( pSourceShape->msName )
-+, msId( pSourceShape->msId )
-+, mnSubType( pSourceShape->mnSubType )
-+, mnSubTypeIndex( pSourceShape->mnSubTypeIndex )
-+, maShapeStyleRefs( pSourceShape->maShapeStyleRefs )
-+, maSize( pSourceShape->maSize )
-+, maPosition( pSourceShape->maPosition )
-+, mxCreateCallback( pSourceShape->mxCreateCallback )
-+, mnRotation( pSourceShape->mnRotation )
-+, mbFlipH( pSourceShape->mbFlipH )
-+, mbFlipV( pSourceShape->mbFlipV )
-+{}
-+
- Shape::~Shape()
- {
- }
-@@ -189,6 +218,19 @@ void Shape::applyShapeReference( const Shape& rReferencedShape )
- mbHidden = rReferencedShape.mbHidden;
- }
-
-+void Shape::addChildren( const ::oox::core::XmlFilterBase& rFilterBase,
-+ const Theme* pTheme,
-+ const Reference< XShapes >& rxShapes,
-+ const awt::Rectangle* pShapeRect,
-+ ShapeIdMap* pShapeMap )
-+{
-+ addChildren(rFilterBase, *this, pTheme, rxShapes,
-+ pShapeRect ?
-+ *pShapeRect :
-+ awt::Rectangle( maPosition.X, maPosition.Y, maSize.Width, maSize.Height ),
-+ pShapeMap);
-+}
-+
- // for group shapes, the following method is also adding each child
- void Shape::addChildren(
- const ::oox::core::XmlFilterBase& rFilterBase,
-diff --git oox/source/drawingml/shape3dproperties.cxx oox/source/drawingml/shape3dproperties.cxx
-new file mode 100644
-index 0000000..f7d2e36
---- /dev/null
-+++ oox/source/drawingml/shape3dproperties.cxx
-@@ -0,0 +1,67 @@
-+/*************************************************************************
-+ *
-+ * 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.cxx,v $
-+ * $Revision: 1.7.6.1 $
-+ *
-+ * 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 "oox/drawingml/shape3dproperties.hxx"
-+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-+#include <com/sun/star/frame/XFramesSupplier.hpp>
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/awt/Gradient.hpp>
-+#include <com/sun/star/awt/Size.hpp>
-+#include <com/sun/star/awt/XBitmap.hpp>
-+#include <com/sun/star/awt/XDevice.hpp>
-+#include <com/sun/star/drawing/BitmapMode.hpp>
-+#include <com/sun/star/drawing/FillStyle.hpp>
-+#include <com/sun/star/drawing/RectanglePoint.hpp>
-+#include <com/sun/star/graphic/XGraphicTransformer.hpp>
-+#include "oox/helper/propertymap.hxx"
-+#include "oox/helper/propertyset.hxx"
-+#include "tokens.hxx"
-+
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::drawing;
-+using namespace ::com::sun::star::graphic;
-+
-+using ::rtl::OUString;
-+using ::com::sun::star::uno::Reference;
-+using ::com::sun::star::uno::Exception;
-+using ::com::sun::star::uno::UNO_QUERY;
-+using ::com::sun::star::uno::UNO_QUERY_THROW;
-+using ::oox::core::XmlFilterBase;
-+
-+namespace oox {
-+namespace drawingml {
-+
-+// ============================================================================
-+
-+// ============================================================================
-+
-+} // namespace drawingml
-+} // namespace oox
-+
-diff --git oox/source/drawingml/shapepropertiescontext.cxx oox/source/drawingml/shapepropertiescontext.cxx
-index b4d57ba..6451f59 100644
---- oox/source/drawingml/shapepropertiescontext.cxx
-+++ oox/source/drawingml/shapepropertiescontext.cxx
-@@ -34,6 +34,7 @@
- #include <com/sun/star/container/XNamed.hpp>
-
- #include "oox/core/namespaces.hxx"
-+#include "oox/drawingml/scene3dcontext.hxx"
- #include "oox/drawingml/linepropertiescontext.hxx"
- #include "oox/drawingml/fillpropertiesgroupcontext.hxx"
- #include "oox/drawingml/transform2dcontext.hxx"
-@@ -105,8 +106,11 @@ Reference< XFastContextHandler > ShapePropertiesContext::createFastChildContext(
- case NMSP_DRAWINGML|XML_effectDag: // CT_EffectContainer
- break;
-
-- // todo
- case NMSP_DRAWINGML|XML_scene3d: // CT_Scene3D
-+// xRet.set( new Scene3DContext( *this, xAttribs, *(mrShape.get3DShapeProperties()) ) );
-+ break;
-+
-+ // todo
- case NMSP_DRAWINGML|XML_sp3d: // CT_Shape3D
- break;
- }
-diff --git oox/source/drawingml/textparagraph.cxx oox/source/drawingml/textparagraph.cxx
-index 6381f56..022478d 100644
---- oox/source/drawingml/textparagraph.cxx
-+++ oox/source/drawingml/textparagraph.cxx
-@@ -62,6 +62,9 @@ void TextParagraph::insertAt(
- Reference< XTextRange > xStart( xAt, UNO_QUERY );
-
- sal_Int16 nLevel = maProperties.getLevel();
-+
-+ OSL_TRACE("TextParagraph::insertAt() - level %d", nLevel);
-+
- const TextParagraphPropertiesVector& rListStyle = rTextListStyle.getListStyle();
- if ( nLevel >= static_cast< sal_Int16 >( rListStyle.size() ) )
- nLevel = 0;
-@@ -113,6 +116,12 @@ void TextParagraph::insertAt(
- const OUString sNumberingLevel( CREATE_OUSTRING( "NumberingLevel" ) );
- xProps->setPropertyValue( sNumberingLevel, Any( static_cast< sal_Int16 >( -1 ) ) );
- }
-+ else if ( nLevel > 1 )
-+ {
-+ // Even more UGLY HACK
-+ const OUString sNumberingLevel( CREATE_OUSTRING( "NumberingLevel" ) );
-+ xProps->setPropertyValue( sNumberingLevel, Any( static_cast< sal_Int16 >( nLevel-1 ) ) );
-+ }
-
- // FIXME this is causing a lot of dispruption (ie does not work). I wonder what to do -- Hub
- // Reference< XTextRange > xEnd( xAt, UNO_QUERY );
-diff --git oox/source/drawingml/textparagraphproperties.cxx oox/source/drawingml/textparagraphproperties.cxx
-index a7ec1a5..25aed4c 100644
---- oox/source/drawingml/textparagraphproperties.cxx
-+++ oox/source/drawingml/textparagraphproperties.cxx
-@@ -113,6 +113,7 @@ void BulletList::setSuffixMinusRight()
-
- void BulletList::setType( sal_Int32 nType )
- {
-+ OSL_ASSERT((nType & sal_Int32(0xFFFF0000))==0);
- // OSL_TRACE( "OOX: set list numbering type %d", nType);
- switch( nType )
- {
-diff --git oox/source/helper/storagebase.cxx oox/source/helper/storagebase.cxx
-index 9ec7781..93eeb9c 100644
---- oox/source/helper/storagebase.cxx
-+++ oox/source/helper/storagebase.cxx
-@@ -49,17 +49,25 @@ namespace oox {
-
- namespace {
-
--void lclSplitFirstElement( OUString& orElement, OUString& orRemainder, const OUString& rFullName )
-+void lclSplitFirstElement( OUString& orElement, OUString& orRemainder, OUString aFullName )
- {
-- sal_Int32 nSlashPos = rFullName.indexOf( '/' );
-- if( (0 <= nSlashPos) && (nSlashPos < rFullName.getLength()) )
-+ sal_Int32 nSlashPos = aFullName.indexOf( '/' );
-+
-+ // strip leading slashes
-+ while( nSlashPos == 0 )
-+ {
-+ aFullName = aFullName.copy(1);
-+ nSlashPos = aFullName.indexOf( '/' );
-+ }
-+
-+ if( (0 <= nSlashPos) && (nSlashPos < aFullName.getLength()) )
- {
-- orElement = rFullName.copy( 0, nSlashPos );
-- orRemainder = rFullName.copy( nSlashPos + 1 );
-+ orElement = aFullName.copy( 0, nSlashPos );
-+ orRemainder = aFullName.copy( nSlashPos + 1 );
- }
- else
- {
-- orElement = rFullName;
-+ orElement = aFullName;
- }
- }
-
-diff --git oox/source/ppt/dgmimport.cxx oox/source/ppt/dgmimport.cxx
-new file mode 100644
-index 0000000..405d06a
---- /dev/null
-+++ oox/source/ppt/dgmimport.cxx
-@@ -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: pptimport.cxx,v $
-+ * $Revision: 1.8.6.1 $
-+ *
-+ * 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 "oox/ppt/dgmimport.hxx"
-+#include "oox/drawingml/theme.hxx"
-+#include "oox/drawingml/diagram/diagram.hxx"
-+#include "oox/dump/pptxdumper.hxx"
-+
-+#include <com/sun/star/drawing/XShape.hpp>
-+
-+using ::rtl::OUString;
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::uno;
-+using namespace ::com::sun::star::xml::sax;
-+using namespace oox::core;
-+
-+namespace oox { namespace ppt {
-+
-+OUString SAL_CALL QuickDiagrammingImport_getImplementationName() throw()
-+{
-+ return CREATE_OUSTRING( "com.sun.star.comp.Impress.oox.QuickDiagrammingImport" );
-+}
-+
-+uno::Sequence< OUString > SAL_CALL QuickDiagrammingImport_getSupportedServiceNames() throw()
-+{
-+ const OUString aServiceName = CREATE_OUSTRING( "com.sun.star.comp.ooxpptx.dgm.import" );
-+ const Sequence< OUString > aSeq( &aServiceName, 1 );
-+ return aSeq;
-+}
-+
-+uno::Reference< uno::XInterface > SAL_CALL QuickDiagrammingImport_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
-+{
-+ return (cppu::OWeakObject*)new QuickDiagrammingImport( rSMgr );
-+}
-+
-+QuickDiagrammingImport::QuickDiagrammingImport( const uno::Reference< lang::XMultiServiceFactory > & rSMgr )
-+ : XmlFilterBase( rSMgr )
-+{}
-+
-+bool QuickDiagrammingImport::importDocument() throw()
-+{
-+ /* to activate the PPTX dumper, define the environment variable
-+ OOO_PPTXDUMPER and insert the full path to the file
-+ file:///<path-to-oox-module>/source/dump/pptxdumper.ini. */
-+ OOX_DUMP_FILE( ::oox::dump::pptx::Dumper );
-+
-+ OUString aEmpty;
-+ OUString aFragmentPath = getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATIONSTYPE( "diagramLayout" ) );
-+
-+ Reference<drawing::XShapes> xParentShape(getParentShape(),
-+ UNO_QUERY_THROW);
-+ oox::drawingml::ShapePtr pShape(
-+ new oox::drawingml::Shape( "com.sun.star.drawing.DiagramShape" ) );
-+ drawingml::loadDiagram(pShape,
-+ *this,
-+ aEmpty,
-+ aFragmentPath,
-+ aEmpty,
-+ aEmpty);
-+ oox::drawingml::ThemePtr pTheme(
-+ new oox::drawingml::Theme());
-+ pShape->addShape( *this,
-+ pTheme.get(),
-+ xParentShape,
-+ NULL,
-+ NULL );
-+
-+ return true;
-+}
-+
-+bool QuickDiagrammingImport::exportDocument() throw()
-+{
-+ return false;
-+}
-+
-+const ::oox::drawingml::Theme* QuickDiagrammingImport::getCurrentTheme() const
-+{
-+ // TODO
-+ return 0;
-+}
-+
-+sal_Int32 QuickDiagrammingImport::getSchemeClr( sal_Int32 /*nColorSchemeToken*/ ) const
-+{
-+ // TODO
-+ return 0;
-+}
-+
-+const oox::drawingml::table::TableStyleListPtr QuickDiagrammingImport::getTableStyles()
-+{
-+ return oox::drawingml::table::TableStyleListPtr();
-+}
-+
-+oox::vml::Drawing* QuickDiagrammingImport::getVmlDrawing()
-+{
-+ return 0;
-+}
-+
-+oox::drawingml::chart::ChartConverter* QuickDiagrammingImport::getChartConverter()
-+{
-+ return 0;
-+}
-+
-+OUString QuickDiagrammingImport::implGetImplementationName() const
-+{
-+ return QuickDiagrammingImport_getImplementationName();
-+}
-+
-+}}
-diff --git oox/source/ppt/dgmlayout.cxx oox/source/ppt/dgmlayout.cxx
-new file mode 100644
-index 0000000..80c9889
---- /dev/null
-+++ oox/source/ppt/dgmlayout.cxx
-@@ -0,0 +1,193 @@
-+/*************************************************************************
-+ *
-+ * 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.cxx,v $
-+ * $Revision: 1.8.6.1 $
-+ *
-+ * 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 "oox/ppt/dgmlayout.hxx"
-+#include "oox/drawingml/theme.hxx"
-+#include "oox/drawingml/themefragmenthandler.hxx"
-+#include "oox/drawingml/diagram/diagram.hxx"
-+#include "oox/dump/pptxdumper.hxx"
-+
-+#include <com/sun/star/drawing/XShape.hpp>
-+#include <com/sun/star/drawing/XMasterPageTarget.hpp>
-+#include <com/sun/star/xml/dom/XDocument.hpp>
-+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
-+#include <com/sun/star/container/XChild.hpp>
-+
-+using ::rtl::OUString;
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::uno;
-+using namespace ::com::sun::star::xml::sax;
-+using namespace oox::core;
-+using namespace ::oox::drawingml;
-+
-+namespace oox { namespace ppt {
-+
-+OUString SAL_CALL QuickDiagrammingLayout_getImplementationName() throw()
-+{
-+ return CREATE_OUSTRING( "com.sun.star.comp.Impress.oox.QuickDiagrammingLayout" );
-+}
-+
-+uno::Sequence< OUString > SAL_CALL QuickDiagrammingLayout_getSupportedServiceNames() throw()
-+{
-+ const OUString aServiceName = CREATE_OUSTRING( "com.sun.star.comp.ooxpptx.dgm.layout" );
-+ const Sequence< OUString > aSeq( &aServiceName, 1 );
-+ return aSeq;
-+}
-+
-+uno::Reference< uno::XInterface > SAL_CALL QuickDiagrammingLayout_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
-+{
-+ return (cppu::OWeakObject*)new QuickDiagrammingLayout( rSMgr );
-+}
-+
-+QuickDiagrammingLayout::QuickDiagrammingLayout( const uno::Reference< lang::XMultiServiceFactory > & rSMgr )
-+ : XmlFilterBase( rSMgr ),
-+ mpThemePtr(new drawingml::Theme())
-+{}
-+
-+bool QuickDiagrammingLayout::importDocument() throw()
-+{
-+ Reference<drawing::XShape> xParentShape(getParentShape(),
-+ UNO_QUERY_THROW);
-+ Reference<drawing::XShapes> xParentShapes(xParentShape,
-+ UNO_QUERY_THROW);
-+ Reference<beans::XPropertySet> xPropSet(xParentShape,
-+ UNO_QUERY_THROW);
-+
-+ // can we grab the theme from the master page?
-+ Reference<container::XChild> xChild(xParentShape,
-+ UNO_QUERY);
-+ if( xChild.is() )
-+ {
-+ // TODO: cater for diagram shapes inside groups
-+ Reference<drawing::XMasterPageTarget> xMasterPageTarget(xChild->getParent(),
-+ UNO_QUERY);
-+ if( xMasterPageTarget.is() )
-+ {
-+ uno::Reference<drawing::XDrawPage> xMasterPage(
-+ xMasterPageTarget->getMasterPage());
-+
-+ Reference<beans::XPropertySet> xPropSet2(xMasterPage,
-+ UNO_QUERY_THROW);
-+ Reference<xml::dom::XDocument> xThemeFragment;
-+ xPropSet2->getPropertyValue(
-+ CREATE_OUSTRING("PPTTheme")) >>= xThemeFragment;
-+
-+ importFragment(
-+ new ThemeFragmentHandler(
-+ *this, OUString(), *mpThemePtr ),
-+ Reference<xml::sax::XFastSAXSerializable>(
-+ xThemeFragment,
-+ UNO_QUERY_THROW));
-+ }
-+ }
-+
-+ Reference<xml::dom::XDocument> xDataModelDom;
-+ Reference<xml::dom::XDocument> xLayoutDom;
-+ Reference<xml::dom::XDocument> xQStyleDom;
-+ Reference<xml::dom::XDocument> xColorStyleDom;
-+
-+ xPropSet->getPropertyValue(
-+ CREATE_OUSTRING("DiagramData")) >>= xDataModelDom;
-+ xPropSet->getPropertyValue(
-+ CREATE_OUSTRING("DiagramLayout")) >>= xLayoutDom;
-+ xPropSet->getPropertyValue(
-+ CREATE_OUSTRING("DiagramQStyle")) >>= xQStyleDom;
-+ xPropSet->getPropertyValue(
-+ CREATE_OUSTRING("DiagramColorStyle")) >>= xColorStyleDom;
-+
-+ oox::drawingml::ShapePtr pShape(
-+ new oox::drawingml::Shape( "com.sun.star.drawing.DiagramShape" ) );
-+ drawingml::loadDiagram(pShape,
-+ *this,
-+ xDataModelDom,
-+ xLayoutDom,
-+ xQStyleDom,
-+ xColorStyleDom);
-+
-+ // don't add pShape itself, but only its children
-+ pShape->setXShape(getParentShape());
-+
-+ const awt::Size& rSize=xParentShape->getSize();
-+ const awt::Point& rPoint=xParentShape->getPosition();
-+ const long nScaleFactor=360;
-+ const awt::Rectangle aRect(nScaleFactor*rPoint.X,
-+ nScaleFactor*rPoint.Y,
-+ nScaleFactor*rSize.Width,
-+ nScaleFactor*rSize.Height);
-+
-+ pShape->addChildren( *this,
-+ mpThemePtr.get(),
-+ xParentShapes,
-+ &aRect,
-+ NULL );
-+
-+ return true;
-+}
-+
-+bool QuickDiagrammingLayout::exportDocument() throw()
-+{
-+ return false;
-+}
-+
-+const ::oox::drawingml::Theme* QuickDiagrammingLayout::getCurrentTheme() const
-+{
-+ return mpThemePtr.get();
-+}
-+
-+sal_Int32 QuickDiagrammingLayout::getSchemeClr( sal_Int32 nColorSchemeToken ) const
-+{
-+ sal_Int32 nColor = 0;
-+ if( mpThemePtr )
-+ mpThemePtr->getClrScheme().getColor( nColorSchemeToken,
-+ nColor );
-+ return nColor;
-+}
-+
-+const oox::drawingml::table::TableStyleListPtr QuickDiagrammingLayout::getTableStyles()
-+{
-+ return oox::drawingml::table::TableStyleListPtr();
-+}
-+
-+::oox::vml::Drawing* QuickDiagrammingLayout::getVmlDrawing()
-+{
-+ return 0;
-+}
-+
-+::oox::drawingml::chart::ChartConverter* QuickDiagrammingLayout::getChartConverter()
-+{
-+ return 0;
-+}
-+
-+OUString QuickDiagrammingLayout::implGetImplementationName() const
-+{
-+ return QuickDiagrammingLayout_getImplementationName();
-+}
-+
-+}}
-diff --git oox/source/ppt/makefile.mk oox/source/ppt/makefile.mk
-index 7ee7e0c..46cfd4f 100644
---- oox/source/ppt/makefile.mk
-+++ oox/source/ppt/makefile.mk
-@@ -50,6 +50,8 @@ SLOFILES = \
- $(SLO)$/commontimenodecontext.obj \
- $(SLO)$/conditioncontext.obj \
- $(SLO)$/customshowlistcontext.obj \
-+ $(SLO)$/dgmimport.obj\
-+ $(SLO)$/dgmlayout.obj\
- $(SLO)$/headerfootercontext.obj \
- $(SLO)$/layoutfragmenthandler.obj\
- $(SLO)$/pptfilterhelpers.obj\
-diff --git oox/source/ppt/pptimport.cxx oox/source/ppt/pptimport.cxx
-index b17e2e7..bf5acd1 100644
---- oox/source/ppt/pptimport.cxx
-+++ oox/source/ppt/pptimport.cxx
-@@ -172,9 +172,9 @@ const oox::drawingml::table::TableStyleListPtr PowerPointImport::getTableStyles(
- return mpTableStyleList;;
- }
-
--::oox::drawingml::chart::ChartConverter& PowerPointImport::getChartConverter()
-+::oox::drawingml::chart::ChartConverter* PowerPointImport::getChartConverter()
- {
-- return *mxChartConv;
-+ return mxChartConv.get();
- }
-
- namespace {
-diff --git oox/source/ppt/presentationfragmenthandler.cxx oox/source/ppt/presentationfragmenthandler.cxx
-index ff1a32d..a72d2f1 100644
---- oox/source/ppt/presentationfragmenthandler.cxx
-+++ oox/source/ppt/presentationfragmenthandler.cxx
-@@ -32,6 +32,8 @@
- #include <com/sun/star/drawing/XDrawPages.hpp>
- #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
- #include <com/sun/star/drawing/XMasterPageTarget.hpp>
-+#include <com/sun/star/xml/dom/XDocument.hpp>
-+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
- #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
- #include <com/sun/star/style/XStyle.hpp>
- #include <com/sun/star/presentation/XPresentationPage.hpp>
-@@ -230,8 +232,17 @@ void PresentationFragmentHandler::endDocument() throw (SAXException, RuntimeExce
- {
- oox::drawingml::ThemePtr pThemePtr( new oox::drawingml::Theme() );
- pMasterPersistPtr->setTheme( pThemePtr );
-- rFilter.importFragment( new ThemeFragmentHandler( rFilter, aThemeFragmentPath, *pThemePtr ) );
-+ Reference<xml::dom::XDocument> xDoc=
-+ rFilter.importFragment(aThemeFragmentPath);
-+
-+ rFilter.importFragment(
-+ new ThemeFragmentHandler(
-+ rFilter, aThemeFragmentPath, *pThemePtr ),
-+ Reference<xml::sax::XFastSAXSerializable>(
-+ xDoc,
-+ UNO_QUERY_THROW));
- rThemes[ aThemeFragmentPath ] = pThemePtr;
-+ pThemePtr->setFragment(xDoc);
- }
- else
- {
-diff --git oox/source/ppt/slidepersist.cxx oox/source/ppt/slidepersist.cxx
-index a2395ad..53b0f7e 100644
---- oox/source/ppt/slidepersist.cxx
-+++ oox/source/ppt/slidepersist.cxx
-@@ -165,6 +165,17 @@ void SlidePersist::createXShapes( const XmlFilterBase& rFilterBase )
- pNode->setNode( rFilterBase, xNode, pSlidePtr );
- }
- }
-+
-+ // not yet
-+#if 0
-+ if( getTheme() )
-+ {
-+ uno::Reference< beans::XPropertySet > xPagePropSet( mxPage, uno::UNO_QUERY_THROW );
-+ xPagePropSet->setPropertyValue(
-+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PPTTheme" )),
-+ uno::makeAny(getTheme()->getFragment()));
-+ }
-+#endif
- }
-
- void SlidePersist::createBackground( const XmlFilterBase& rFilterBase )
-diff --git oox/source/shape/ShapeFilterBase.cxx oox/source/shape/ShapeFilterBase.cxx
-index 5ed1e8b..877e464 100644
---- oox/source/shape/ShapeFilterBase.cxx
-+++ oox/source/shape/ShapeFilterBase.cxx
-@@ -60,9 +60,9 @@ const ::oox::drawingml::table::TableStyleListPtr ShapeFilterBase::getTableStyles
- return ::oox::drawingml::table::TableStyleListPtr();
- }
-
--::oox::drawingml::chart::ChartConverter& ShapeFilterBase::getChartConverter()
-+::oox::drawingml::chart::ChartConverter* ShapeFilterBase::getChartConverter()
- {
-- return *mxChartConv;
-+ return mxChartConv.get();
- }
-
- ::rtl::OUString ShapeFilterBase::implGetImplementationName() const
-diff --git oox/source/shape/ShapeFilterBase.hxx oox/source/shape/ShapeFilterBase.hxx
-index 1e00eb6..d247254 100644
---- oox/source/shape/ShapeFilterBase.hxx
-+++ oox/source/shape/ShapeFilterBase.hxx
-@@ -58,7 +58,7 @@ public:
- /** Has to be implemented by each filter to return TableStyles. */
- virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles();
-
-- virtual ::oox::drawingml::chart::ChartConverter& getChartConverter();
-+ virtual ::oox::drawingml::chart::ChartConverter* getChartConverter();
-
- virtual rtl::OUString implGetImplementationName() const;
-
-diff --git oox/source/xls/excelfilter.cxx oox/source/xls/excelfilter.cxx
-index 7b0b28a..2750eea 100644
---- oox/source/xls/excelfilter.cxx
-+++ oox/source/xls/excelfilter.cxx
-@@ -154,7 +154,7 @@ const TableStyleListPtr ExcelFilter::getTableStyles()
- return TableStyleListPtr();
- }
-
--::oox::drawingml::chart::ChartConverter& ExcelFilter::getChartConverter()
-+::oox::drawingml::chart::ChartConverter* ExcelFilter::getChartConverter()
- {
- return WorkbookHelper( getWorkbookData() ).getChartConverter();
- }
-diff --git oox/source/xls/workbookhelper.cxx oox/source/xls/workbookhelper.cxx
-index b509cbd..85189c4 100644
---- oox/source/xls/workbookhelper.cxx
-+++ oox/source/xls/workbookhelper.cxx
-@@ -202,7 +202,7 @@ public:
- /** Returns the converter for string to cell address/range conversion. */
- inline AddressConverter& getAddressConverter() const { return *mxAddrConverter; }
- /** Returns the chart object converter. */
-- inline ExcelChartConverter& getChartConverter() const { return *mxChartConverter; }
-+ inline ExcelChartConverter* getChartConverter() const { return mxChartConverter.get(); }
- /** Returns the page/print settings converter. */
- inline PageSettingsConverter& getPageSettingsConverter() const { return *mxPageSettConverter; }
-
-@@ -895,7 +895,7 @@ AddressConverter& WorkbookHelper::getAddressConverter() const
- return mrBookData.getAddressConverter();
- }
-
--ExcelChartConverter& WorkbookHelper::getChartConverter() const
-+ExcelChartConverter* WorkbookHelper::getChartConverter() const
- {
- return mrBookData.getChartConverter();
- }
-diff --git sc/source/filter/excel/xestream.cxx sc/source/filter/excel/xestream.cxx
-index 23447e5..ece3914 100644
---- sc/source/filter/excel/xestream.cxx
-+++ sc/source/filter/excel/xestream.cxx
-@@ -1103,10 +1103,9 @@ const oox::drawingml::table::TableStyleListPtr XclExpXmlStream::getTableStyles()
- return oox::drawingml::table::TableStyleListPtr();
- }
-
--oox::drawingml::chart::ChartConverter& XclExpXmlStream::getChartConverter()
-+oox::drawingml::chart::ChartConverter* XclExpXmlStream::getChartConverter()
- {
-- // DO NOT CALL
-- return * (oox::drawingml::chart::ChartConverter*) NULL;
-+ return NULL;
- }
-
- ScDocShell* XclExpXmlStream::getDocShell()
-diff --git sc/source/filter/inc/xestream.hxx sc/source/filter/inc/xestream.hxx
-index 27928c3..5dc09be 100644
---- sc/source/filter/inc/xestream.hxx
-+++ sc/source/filter/inc/xestream.hxx
-@@ -345,7 +345,7 @@ public:
- virtual oox::vml::Drawing* getVmlDrawing();
- virtual const oox::drawingml::Theme* getCurrentTheme() const;
- virtual const oox::drawingml::table::TableStyleListPtr getTableStyles();
-- virtual oox::drawingml::chart::ChartConverter& getChartConverter();
-+ virtual oox::drawingml::chart::ChartConverter* getChartConverter();
-
- void Trace( const char* format, ...);
- private:
-diff --git sw/source/filter/ww8/docxexportfilter.hxx sw/source/filter/ww8/docxexportfilter.hxx
-index cf5d5e2..212c6fe 100644
---- sw/source/filter/ww8/docxexportfilter.hxx
-+++ sw/source/filter/ww8/docxexportfilter.hxx
-@@ -46,7 +46,7 @@ public:
- virtual const ::oox::drawingml::Theme* getCurrentTheme() const { return NULL; }
- virtual sal_Int32 getSchemeClr( sal_Int32 ) const { return 0; }
- virtual ::oox::vml::Drawing* getVmlDrawing() { return NULL; }
-- virtual ::oox::drawingml::chart::ChartConverter& getChartConverter() { static ::oox::drawingml::chart::ChartConverter aConverter; return aConverter; }
-+ virtual ::oox::drawingml::chart::ChartConverter* getChartConverter() { static ::oox::drawingml::chart::ChartConverter aConverter; return &aConverter; }
- virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles() { return ::oox::drawingml::table::TableStyleListPtr(); }
-
- // Actual export of the DOCX document
---- sd/source/filter/eppt/epptooxml.hxx
-+++ sd/source/filter/eppt/epptooxml.hxx
-@@ -85,7 +85,7 @@
- virtual oox::vml::Drawing* getVmlDrawing() { return NULL; }
- virtual const oox::drawingml::Theme* getCurrentTheme() const { return NULL; }
- virtual const oox::drawingml::table::TableStyleListPtr getTableStyles() { return oox::drawingml::table::TableStyleListPtr(); }
-- virtual oox::drawingml::chart::ChartConverter& getChartConverter() { static oox::drawingml::chart::ChartConverter aConverter; return aConverter; }
-+ virtual oox::drawingml::chart::ChartConverter* getChartConverter() { return NULL; }
-
- static const char* GetSideDirection( sal_uInt8 nDirection );
- static const char* GetCornerDirection( sal_uInt8 nDirection );