diff options
author | Thorsten Behrens <tbehrens@novell.com> | 2011-11-22 12:21:19 +0100 |
---|---|---|
committer | Thorsten Behrens <tbehrens@novell.com> | 2011-11-22 12:21:19 +0100 |
commit | b373963d0fc030f7d31a7c6788af24f299fdf3a2 (patch) | |
tree | 2b80fea819b11006b1d9c84afae65ae6fab9077e | |
parent | 5f88396b4c877ff8c1b0c109357dc26729d62663 (diff) |
oox-smartart-import got committed to master, removing.
-rw-r--r-- | patches/dev300/apply | 1 | ||||
-rw-r--r-- | patches/dev300/oox-smartart-import.diff | 6340 |
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 ); |