xref: /AOO41X/main/oox/inc/oox/drawingml/diagram/diagram.hxx (revision e35081216278e1848f1c12af2e117a766f306f4b)
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