1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 25 26 #ifndef OOX_DRAWINGML_DIAGRAM_HXX 27 #define OOX_DRAWINGML_DIAGRAM_HXX 28 29 #include <vector> 30 #include <boost/shared_ptr.hpp> 31 #include <boost/enable_shared_from_this.hpp> 32 #include "oox/drawingml/shape.hxx" 33 #include "oox/drawingml/diagram/diagramlayoutatoms.hxx" 34 35 namespace oox { namespace drawingml { 36 37 namespace dgm { 38 39 /** A Connection 40 */ 41 class Connection 42 { 43 public: Connection()44 Connection() 45 : mnType( 0 ) 46 , mnSourceOrder( 0 ) 47 , mnDestOrder( 0 ) 48 { 49 } 50 51 void dump(); 52 53 sal_Int32 mnType; 54 ::rtl::OUString msModelId; 55 ::rtl::OUString msSourceId; 56 ::rtl::OUString msDestId; 57 ::rtl::OUString msParTransId; 58 ::rtl::OUString msPresId; 59 ::rtl::OUString msSibTransId; 60 sal_Int32 mnSourceOrder; 61 sal_Int32 mnDestOrder; 62 63 }; 64 65 typedef boost::shared_ptr< Connection > ConnectionPtr; 66 typedef std::vector< ConnectionPtr > Connections; 67 68 class Point; 69 70 typedef boost::shared_ptr< Point > PointPtr; 71 typedef std::vector< PointPtr > Points; 72 /** A point 73 */ 74 class Point 75 { 76 public: 77 Point(); getShape()78 ShapePtr & getShape( ) 79 { return mpShape; } 80 setCnxId(const::rtl::OUString & sCnxId)81 void setCnxId( const ::rtl::OUString & sCnxId ) 82 { msCnxId = sCnxId; } 83 void setModelId( const ::rtl::OUString & sModelId ); getModelId() const84 const ::rtl::OUString & getModelId() const 85 { return msModelId; } setType(const sal_Int32 nType)86 void setType( const sal_Int32 nType ) 87 { mnType = nType; } getType() const88 sal_Int32 getType() const 89 { return mnType; } 90 91 void dump(); 92 private: 93 ShapePtr mpShape; 94 ::rtl::OUString msCnxId; 95 ::rtl::OUString msModelId; 96 sal_Int32 mnType; 97 }; 98 99 100 class PointsTree; 101 typedef boost::shared_ptr< PointsTree > PointsTreePtr; 102 103 /** a points tree node */ 104 class PointsTree 105 : public boost::enable_shared_from_this< PointsTree > 106 { 107 public: 108 typedef std::vector< PointsTreePtr > Childrens; PointsTree()109 PointsTree() 110 {}; PointsTree(const PointPtr & pPoint)111 PointsTree( const PointPtr & pPoint ) 112 : mpNode( pPoint ) 113 { } 114 bool addChild( const PointsTreePtr & pChild ); getPoint() const115 const PointPtr & getPoint() const 116 { return mpNode; } 117 PointsTreePtr getParent() const; beginChild() const118 Childrens::const_iterator beginChild() const 119 { return maChildrens.begin(); } endChild() const120 Childrens::const_iterator endChild() const 121 { return maChildrens.end(); } 122 private: 123 PointPtr mpNode; 124 boost::weak_ptr< PointsTree > mpParent; 125 Childrens maChildrens; 126 }; 127 128 } 129 130 //////////////////// 131 132 class DiagramData 133 { 134 public: 135 136 DiagramData(); getFillProperties()137 FillPropertiesPtr & getFillProperties() 138 { return mpFillProperties; } getConnections()139 dgm::Connections & getConnections() 140 { return maConnections; } getPoints()141 dgm::Points & getPoints() 142 { return maPoints; } 143 void dump(); 144 private: 145 FillPropertiesPtr mpFillProperties; 146 dgm::Connections maConnections; 147 dgm::Points maPoints; 148 }; 149 150 typedef boost::shared_ptr< DiagramData > DiagramDataPtr; 151 152 153 154 //////////////////// 155 156 class DiagramLayout 157 { 158 public: setDefStyle(const::rtl::OUString & sDefStyle)159 void setDefStyle( const ::rtl::OUString & sDefStyle ) 160 { msDefStyle = sDefStyle; } setMinVer(const::rtl::OUString & sMinVer)161 void setMinVer( const ::rtl::OUString & sMinVer ) 162 { msMinVer = sMinVer; } setUniqueId(const::rtl::OUString & sUniqueId)163 void setUniqueId( const ::rtl::OUString & sUniqueId ) 164 { msUniqueId = sUniqueId; } getUniqueId()165 const ::rtl::OUString & getUniqueId() 166 { return msUniqueId; } setTitle(const::rtl::OUString & sTitle)167 void setTitle( const ::rtl::OUString & sTitle ) 168 { msTitle = sTitle; } setDesc(const::rtl::OUString & sDesc)169 void setDesc( const ::rtl::OUString & sDesc ) 170 { msDesc = sDesc; } 171 getNode()172 LayoutNodePtr & getNode() 173 { return mpNode; } getNode() const174 const LayoutNodePtr & getNode() const 175 { return mpNode; } getSampData()176 DiagramDataPtr & getSampData() 177 { return mpSampData; } getSampData() const178 const DiagramDataPtr & getSampData() const 179 { return mpSampData; } getStyleData()180 DiagramDataPtr & getStyleData() 181 { return mpStyleData; } getStyleData() const182 const DiagramDataPtr & getStyleData() const 183 { return mpStyleData; } 184 185 void layout( const dgm::PointsTreePtr & pTree, const com::sun::star::awt::Point & pt ); 186 private: 187 ::rtl::OUString msDefStyle; 188 ::rtl::OUString msMinVer; 189 ::rtl::OUString msUniqueId; 190 191 ::rtl::OUString msTitle; 192 ::rtl::OUString msDesc; 193 LayoutNodePtr mpNode; 194 DiagramDataPtr mpSampData; 195 DiagramDataPtr mpStyleData; 196 // TODO 197 // catLst 198 // clrData 199 }; 200 201 typedef boost::shared_ptr< DiagramLayout > DiagramLayoutPtr; 202 203 /////////////////////// 204 205 class DiagramQStyles 206 { 207 208 }; 209 210 typedef boost::shared_ptr< DiagramQStyles > DiagramQStylesPtr; 211 212 /////////////////////// 213 214 class DiagramColors 215 { 216 217 }; 218 219 typedef boost::shared_ptr< DiagramColors > DiagramColorsPtr; 220 221 /////////////////////// 222 223 class Diagram 224 { 225 public: 226 void setData( const DiagramDataPtr & ); 227 void setLayout( const DiagramLayoutPtr & ); getLayout() const228 DiagramLayoutPtr getLayout() const 229 { 230 return mpLayout; 231 } 232 void setQStyles( const DiagramQStylesPtr & ); 233 void setColors( const DiagramColorsPtr & ); 234 235 void addTo( const ShapePtr & pShape ); 236 ::rtl::OUString getLayoutId() const; 237 private: 238 void build( ); 239 DiagramDataPtr mpData; 240 DiagramLayoutPtr mpLayout; 241 DiagramQStylesPtr mpQStyles; 242 DiagramColorsPtr mpColors; 243 std::map< ::rtl::OUString, ShapePtr > maShapeMap; 244 dgm::PointsTreePtr mpRoot; 245 }; 246 247 248 typedef boost::shared_ptr< Diagram > DiagramPtr; 249 250 } } 251 252 #endif 253