Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DIAGRAM_HXX
21 : #define INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DIAGRAM_HXX
22 :
23 : #include <map>
24 : #include <vector>
25 :
26 : #include <boost/shared_ptr.hpp>
27 : #include <boost/enable_shared_from_this.hpp>
28 :
29 : #include <rtl/ustring.hxx>
30 :
31 : #include "oox/drawingml/shape.hxx"
32 : #include "oox/drawingml/fillproperties.hxx"
33 :
34 : namespace com { namespace sun { namespace star {
35 : namespace xml { namespace dom { class XDocument; } }
36 : } } }
37 :
38 : using namespace ::com::sun::star;
39 :
40 : namespace oox { namespace drawingml {
41 :
42 : namespace dgm {
43 :
44 : /** A Connection
45 : */
46 0 : struct Connection
47 : {
48 0 : Connection() :
49 : mnType( 0 ),
50 : mnSourceOrder( 0 ),
51 0 : mnDestOrder( 0 )
52 0 : {}
53 :
54 : void dump();
55 :
56 : sal_Int32 mnType;
57 : OUString msModelId;
58 : OUString msSourceId;
59 : OUString msDestId;
60 : OUString msParTransId;
61 : OUString msPresId;
62 : OUString msSibTransId;
63 : sal_Int32 mnSourceOrder;
64 : sal_Int32 mnDestOrder;
65 :
66 : };
67 :
68 : typedef std::vector< Connection > Connections;
69 :
70 :
71 : /** A point
72 : */
73 0 : struct Point
74 : {
75 0 : Point() :
76 : mnType(0),
77 : mnMaxChildren(-1),
78 : mnPreferredChildren(-1),
79 : mnDirection(XML_norm),
80 : mnHierarchyBranch(XML_std),
81 : mnResizeHandles(XML_rel),
82 : mnCustomAngle(-1),
83 : mnPercentageNeighbourWidth(-1),
84 : mnPercentageNeighbourHeight(-1),
85 : mnPercentageOwnWidth(-1),
86 : mnPercentageOwnHeight(-1),
87 : mnIncludeAngleScale(-1),
88 : mnRadiusScale(-1),
89 : mnWidthScale(-1),
90 : mnHeightScale(-1),
91 : mnWidthOverride(-1),
92 : mnHeightOverride(-1),
93 : mnLayoutStyleCount(-1),
94 : mnLayoutStyleIndex(-1),
95 :
96 : mbOrgChartEnabled(false),
97 : mbBulletEnabled(false),
98 : mbCoherent3DOffset(false),
99 : mbCustomHorizontalFlip(false),
100 : mbCustomVerticalFlip(false),
101 : mbCustomText(false),
102 0 : mbIsPlaceholder(false)
103 0 : {}
104 : void dump();
105 :
106 : ShapePtr mpShape;
107 :
108 : OUString msCnxId;
109 : OUString msModelId;
110 : OUString msColorTransformCategoryId;
111 : OUString msColorTransformTypeId;
112 : OUString msLayoutCategoryId;
113 : OUString msLayoutTypeId;
114 : OUString msPlaceholderText;
115 : OUString msPresentationAssociationId;
116 : OUString msPresentationLayoutName;
117 : OUString msPresentationLayoutStyleLabel;
118 : OUString msQuickStyleCategoryId;
119 : OUString msQuickStyleTypeId;
120 :
121 : sal_Int32 mnType;
122 : sal_Int32 mnMaxChildren;
123 : sal_Int32 mnPreferredChildren;
124 : sal_Int32 mnDirection;
125 : sal_Int32 mnHierarchyBranch;
126 : sal_Int32 mnResizeHandles;
127 : sal_Int32 mnCustomAngle;
128 : sal_Int32 mnPercentageNeighbourWidth;
129 : sal_Int32 mnPercentageNeighbourHeight;
130 : sal_Int32 mnPercentageOwnWidth;
131 : sal_Int32 mnPercentageOwnHeight;
132 : sal_Int32 mnIncludeAngleScale;
133 : sal_Int32 mnRadiusScale;
134 : sal_Int32 mnWidthScale;
135 : sal_Int32 mnHeightScale;
136 : sal_Int32 mnWidthOverride;
137 : sal_Int32 mnHeightOverride;
138 : sal_Int32 mnLayoutStyleCount;
139 : sal_Int32 mnLayoutStyleIndex;
140 :
141 : bool mbOrgChartEnabled;
142 : bool mbBulletEnabled;
143 : bool mbCoherent3DOffset;
144 : bool mbCustomHorizontalFlip;
145 : bool mbCustomVerticalFlip;
146 : bool mbCustomText;
147 : bool mbIsPlaceholder;
148 : };
149 :
150 : typedef std::vector< Point > Points;
151 :
152 : }
153 :
154 : class LayoutNode;
155 : typedef boost::shared_ptr< LayoutNode > LayoutNodePtr;
156 :
157 :
158 :
159 : typedef std::map< OUString, uno::Reference<xml::dom::XDocument> > DiagramDomMap;
160 : typedef uno::Sequence< uno::Sequence< uno::Any > > DiagramRelsMap;
161 :
162 :
163 :
164 0 : class DiagramData
165 : {
166 : public:
167 : ::std::vector<OUString> maExtDrawings;
168 : typedef std::map< OUString, dgm::Point* > PointNameMap;
169 : typedef std::map< OUString,
170 : std::vector<dgm::Point*> > PointsNameMap;
171 : typedef std::map< OUString, const dgm::Connection* > ConnectionNameMap;
172 : typedef std::map< OUString,
173 : std::vector<std::pair<OUString,sal_Int32> > > StringMap;
174 :
175 : DiagramData();
176 0 : FillPropertiesPtr & getFillProperties()
177 0 : { return mpFillProperties; }
178 0 : dgm::Connections & getConnections()
179 0 : { return maConnections; }
180 0 : dgm::Points & getPoints()
181 0 : { return maPoints; }
182 0 : ConnectionNameMap & getConnectionNameMap()
183 0 : { return maConnectionNameMap; }
184 0 : StringMap & getPresOfNameMap()
185 0 : { return maPresOfNameMap; }
186 0 : PointNameMap & getPointNameMap()
187 0 : { return maPointNameMap; }
188 0 : PointsNameMap & getPointsPresNameMap()
189 0 : { return maPointsPresNameMap; }
190 0 : ::std::vector<OUString> &getExtDrawings()
191 0 : { return maExtDrawings; }
192 : void dump();
193 : private:
194 : FillPropertiesPtr mpFillProperties;
195 : dgm::Connections maConnections;
196 : dgm::Points maPoints;
197 : PointNameMap maPointNameMap;
198 : PointsNameMap maPointsPresNameMap;
199 : ConnectionNameMap maConnectionNameMap;
200 : StringMap maPresOfNameMap;
201 : };
202 :
203 : typedef boost::shared_ptr< DiagramData > DiagramDataPtr;
204 :
205 :
206 :
207 :
208 :
209 0 : class DiagramLayout
210 : {
211 : public:
212 0 : void setDefStyle( const OUString & sDefStyle )
213 0 : { msDefStyle = sDefStyle; }
214 0 : void setMinVer( const OUString & sMinVer )
215 0 : { msMinVer = sMinVer; }
216 0 : void setUniqueId( const OUString & sUniqueId )
217 0 : { msUniqueId = sUniqueId; }
218 : const OUString & getUniqueId()
219 : { return msUniqueId; }
220 0 : void setTitle( const OUString & sTitle )
221 0 : { msTitle = sTitle; }
222 0 : void setDesc( const OUString & sDesc )
223 0 : { msDesc = sDesc; }
224 :
225 0 : LayoutNodePtr & getNode()
226 0 : { return mpNode; }
227 : const LayoutNodePtr & getNode() const
228 : { return mpNode; }
229 0 : DiagramDataPtr & getSampData()
230 0 : { return mpSampData; }
231 : const DiagramDataPtr & getSampData() const
232 : { return mpSampData; }
233 0 : DiagramDataPtr & getStyleData()
234 0 : { return mpStyleData; }
235 : const DiagramDataPtr & getStyleData() const
236 : { return mpStyleData; }
237 :
238 : private:
239 : OUString msDefStyle;
240 : OUString msMinVer;
241 : OUString msUniqueId;
242 :
243 : OUString msTitle;
244 : OUString msDesc;
245 : LayoutNodePtr mpNode;
246 : DiagramDataPtr mpSampData;
247 : DiagramDataPtr mpStyleData;
248 : // TODO
249 : // catLst
250 : // clrData
251 : };
252 :
253 : typedef boost::shared_ptr< DiagramLayout > DiagramLayoutPtr;
254 :
255 :
256 :
257 0 : struct DiagramStyle
258 : {
259 : ShapeStyleRef maFillStyle;
260 : ShapeStyleRef maLineStyle;
261 : ShapeStyleRef maEffectStyle;
262 : ShapeStyleRef maTextStyle;
263 : };
264 :
265 : typedef std::map<OUString,DiagramStyle> DiagramQStyleMap;
266 :
267 0 : struct DiagramColor
268 : {
269 : oox::drawingml::Color maFillColor;
270 : oox::drawingml::Color maLineColor;
271 : oox::drawingml::Color maEffectColor;
272 : oox::drawingml::Color maTextFillColor;
273 : oox::drawingml::Color maTextLineColor;
274 : oox::drawingml::Color maTextEffectColor;
275 : };
276 :
277 : typedef std::map<OUString,DiagramColor> DiagramColorMap;
278 :
279 :
280 :
281 0 : class Diagram
282 : {
283 : public:
284 : void setData( const DiagramDataPtr & );
285 0 : DiagramDataPtr getData() const
286 : {
287 0 : return mpData;
288 : }
289 : void setLayout( const DiagramLayoutPtr & );
290 : DiagramLayoutPtr getLayout() const
291 : {
292 : return mpLayout;
293 : }
294 :
295 0 : DiagramQStyleMap& getStyles() { return maStyles; }
296 0 : const DiagramQStyleMap& getStyles() const { return maStyles; }
297 0 : DiagramColorMap& getColors() { return maColors; }
298 0 : const DiagramColorMap& getColors() const { return maColors; }
299 0 : DiagramDomMap & getDomMap() { return maMainDomMap; }
300 0 : DiagramRelsMap & getDataRelsMap() { return maDataRelsMap; }
301 : void addTo( const ShapePtr & pShape );
302 :
303 : uno::Sequence<beans::PropertyValue> getDomsAsPropertyValues() const;
304 : private:
305 : void build( );
306 : DiagramDataPtr mpData;
307 : DiagramLayoutPtr mpLayout;
308 : DiagramQStyleMap maStyles;
309 : DiagramColorMap maColors;
310 : std::map< OUString, ShapePtr > maShapeMap;
311 : DiagramDomMap maMainDomMap;
312 : DiagramRelsMap maDataRelsMap;
313 : };
314 :
315 :
316 : typedef boost::shared_ptr< Diagram > DiagramPtr;
317 :
318 : } }
319 :
320 : #endif
321 :
322 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|