/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef OOX_DRAWINGML_DIAGRAM_HXX #define OOX_DRAWINGML_DIAGRAM_HXX #include #include #include #include "oox/drawingml/shape.hxx" #include "oox/drawingml/diagram/diagramlayoutatoms.hxx" namespace oox { namespace drawingml { namespace dgm { /** A Connection */ class Connection { public: 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 boost::shared_ptr< Connection > ConnectionPtr; typedef std::vector< ConnectionPtr > Connections; class Point; typedef boost::shared_ptr< Point > PointPtr; typedef std::vector< PointPtr > Points; /** A point */ 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; } } #endif