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