Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #include <com/sun/star/animations/XAnimateColor.hpp>
31 : : #include <com/sun/star/animations/XAnimateSet.hpp>
32 : : #include <com/sun/star/animations/XCommand.hpp>
33 : : #include <com/sun/star/animations/Timing.hpp>
34 : : #include <com/sun/star/animations/Event.hpp>
35 : : #include <com/sun/star/animations/XAnimateMotion.hpp>
36 : : #include <com/sun/star/animations/XAnimateTransform.hpp>
37 : : #include <com/sun/star/animations/XTransitionFilter.hpp>
38 : : #include <com/sun/star/animations/XIterateContainer.hpp>
39 : : #include <com/sun/star/animations/XAudio.hpp>
40 : : #include <com/sun/star/animations/AnimationColorSpace.hpp>
41 : : #include <com/sun/star/animations/AnimationNodeType.hpp>
42 : : #include <com/sun/star/animations/AnimationRestart.hpp>
43 : : #include <com/sun/star/animations/EventTrigger.hpp>
44 : : #include <com/sun/star/animations/AnimationFill.hpp>
45 : : #include <com/sun/star/animations/AnimationEndSync.hpp>
46 : : #include <com/sun/star/animations/AnimationCalcMode.hpp>
47 : : #include <com/sun/star/animations/AnimationAdditiveMode.hpp>
48 : : #include <com/sun/star/animations/AnimationTransformType.hpp>
49 : : #include <com/sun/star/animations/TransitionType.hpp>
50 : : #include <com/sun/star/animations/TransitionSubType.hpp>
51 : : #include <com/sun/star/animations/ValuePair.hpp>
52 : : #include <com/sun/star/container/XEnumerationAccess.hpp>
53 : : #include <com/sun/star/beans/NamedValue.hpp>
54 : : #include <com/sun/star/presentation/EffectNodeType.hpp>
55 : : #include <com/sun/star/presentation/EffectPresetClass.hpp>
56 : : #include <com/sun/star/presentation/ParagraphTarget.hpp>
57 : : #include <com/sun/star/presentation/TextAnimationType.hpp>
58 : : #include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
59 : : #include <com/sun/star/presentation/EffectCommands.hpp>
60 : : #include <com/sun/star/drawing/XShape.hpp>
61 : :
62 : : #include <sax/tools/converter.hxx>
63 : :
64 : : #include <tools/debug.hxx>
65 : : #include <xmloff/unointerfacetouniqueidentifiermapper.hxx>
66 : : #include "sdxmlexp_impl.hxx"
67 : : #include "sdpropls.hxx"
68 : : #include <xmloff/xmltoken.hxx>
69 : : #include "xmloff/xmlnmspe.hxx"
70 : : #include <xmloff/xmluconv.hxx>
71 : : #include <xmloff/xmlexp.hxx>
72 : : #include <xmloff/xmlement.hxx>
73 : : #include <xmloff/nmspmap.hxx>
74 : : #include <xmloff/shapeexport.hxx>
75 : :
76 : : #include "animations.hxx"
77 : : #include <xmloff/animationexport.hxx>
78 : :
79 : : using ::rtl::OUString;
80 : : using ::rtl::OUStringBuffer;
81 : :
82 : : using namespace ::std;
83 : : using namespace ::cppu;
84 : : using namespace ::com::sun::star::animations;
85 : : using namespace ::com::sun::star::presentation;
86 : : using namespace ::com::sun::star::drawing;
87 : : using namespace ::com::sun::star::beans;
88 : : using namespace ::xmloff::token;
89 : :
90 : : using ::com::sun::star::uno::Any;
91 : : using ::com::sun::star::uno::UNO_QUERY;
92 : : using ::com::sun::star::uno::UNO_QUERY_THROW;
93 : : using ::com::sun::star::uno::Reference;
94 : : using ::com::sun::star::uno::Sequence;
95 : : using ::com::sun::star::uno::Exception;
96 : : using ::com::sun::star::uno::RuntimeException;
97 : : using ::com::sun::star::uno::XInterface;
98 : : using ::com::sun::star::beans::NamedValue;
99 : : using ::com::sun::star::container::XEnumerationAccess;
100 : : using ::com::sun::star::container::XEnumeration;
101 : :
102 : : namespace xmloff
103 : : {
104 : :
105 : 1214 : SvXMLEnumMapEntry* getAnimationsEnumMap( sal_uInt16 nMap )
106 : : {
107 [ - - - - : 1214 : switch( nMap )
- - - - +
+ - - - -
- - - ]
108 : : {
109 : : case Animations_EnumMap_Fill:
110 : : {
111 : : static SvXMLEnumMapEntry aAnimations_EnumMap_Fill[] =
112 : : {
113 : : { XML_DEFAULT, AnimationFill::DEFAULT },
114 : : { XML_REMOVE, AnimationFill::REMOVE },
115 : : { XML_FREEZE, AnimationFill::FREEZE },
116 : : { XML_HOLD, AnimationFill::HOLD },
117 : : { XML_TRANSITION, AnimationFill::TRANSITION },
118 : : { XML_AUTO, AnimationFill::AUTO },
119 : : { XML_TOKEN_INVALID, 0 }
120 : : };
121 : 0 : return aAnimations_EnumMap_Fill;
122 : : }
123 : : case Animations_EnumMap_FillDefault:
124 : : {
125 : : static SvXMLEnumMapEntry aAnimations_EnumMap_Fill[] =
126 : : {
127 : : { XML_INHERIT, AnimationFill::INHERIT },
128 : : { XML_REMOVE, AnimationFill::REMOVE },
129 : : { XML_FREEZE, AnimationFill::FREEZE },
130 : : { XML_HOLD, AnimationFill::HOLD },
131 : : { XML_TRANSITION, AnimationFill::TRANSITION },
132 : : { XML_AUTO, AnimationFill::AUTO },
133 : : { XML_TOKEN_INVALID, 0 }
134 : : };
135 : 0 : return aAnimations_EnumMap_Fill;
136 : : }
137 : : case Animations_EnumMap_Restart:
138 : : {
139 : : static SvXMLEnumMapEntry aAnimations_EnumMap_Restart[] =
140 : : {
141 : : { XML_DEFAULT, AnimationRestart::DEFAULT },
142 : : { XML_ALWAYS, AnimationRestart::ALWAYS },
143 : : { XML_WHENNOTACTIVE,AnimationRestart::WHEN_NOT_ACTIVE },
144 : : { XML_NEVER, AnimationRestart::NEVER },
145 : : { XML_TOKEN_INVALID, 0 }
146 : : };
147 : 0 : return aAnimations_EnumMap_Restart;
148 : : }
149 : : case Animations_EnumMap_RestartDefault:
150 : : {
151 : : static SvXMLEnumMapEntry aAnimations_EnumMap_RestartDefault[] =
152 : : {
153 : : { XML_INHERIT, AnimationRestart::INHERIT },
154 : : { XML_ALWAYS, AnimationRestart::ALWAYS },
155 : : { XML_WHENNOTACTIVE,AnimationRestart::WHEN_NOT_ACTIVE },
156 : : { XML_NEVER, AnimationRestart::NEVER },
157 : : { XML_TOKEN_INVALID, 0 }
158 : : };
159 : 0 : return aAnimations_EnumMap_RestartDefault;
160 : : }
161 : : case Animations_EnumMap_Endsync:
162 : : {
163 : : static SvXMLEnumMapEntry aAnimations_EnumMap_Endsync[] =
164 : : {
165 : : { XML_FIRST, AnimationEndSync::FIRST },
166 : : { XML_LAST, AnimationEndSync::LAST },
167 : : { XML_ALL, AnimationEndSync::ALL },
168 : : { XML_MEDIA, AnimationEndSync::MEDIA },
169 : : { XML_TOKEN_INVALID, 0 }
170 : : };
171 : 0 : return aAnimations_EnumMap_Endsync;
172 : : }
173 : : case Animations_EnumMap_CalcMode:
174 : : {
175 : : static SvXMLEnumMapEntry aAnimations_EnumMap_CalcMode[] =
176 : : {
177 : : { XML_DISCRETE, AnimationCalcMode::DISCRETE },
178 : : { XML_LINEAR, AnimationCalcMode::LINEAR },
179 : : { XML_PACED, AnimationCalcMode::PACED },
180 : : { XML_SPLINE, AnimationCalcMode::SPLINE },
181 : : { XML_TOKEN_INVALID, 0 }
182 : : };
183 : 0 : return aAnimations_EnumMap_CalcMode;
184 : : }
185 : : case Animations_EnumMap_AdditiveMode:
186 : : {
187 : : static SvXMLEnumMapEntry aAnimations_EnumMap_AdditiveMode[] =
188 : : {
189 : : { XML_BASE, AnimationAdditiveMode::BASE },
190 : : { XML_SUM, AnimationAdditiveMode::SUM },
191 : : { XML_REPLACE, AnimationAdditiveMode::REPLACE },
192 : : { XML_MULTIPLY, AnimationAdditiveMode::MULTIPLY },
193 : : { XML_NONE, AnimationAdditiveMode::NONE },
194 : : { XML_TOKEN_INVALID, 0 }
195 : : };
196 : 0 : return aAnimations_EnumMap_AdditiveMode;
197 : : }
198 : : case Animations_EnumMap_TransformType:
199 : : {
200 : : static SvXMLEnumMapEntry aAnimations_EnumMap_TransformType[] =
201 : : {
202 : : { XML_TRANSLATE, AnimationTransformType::TRANSLATE },
203 : : { XML_SCALE, AnimationTransformType::SCALE },
204 : : { XML_ROTATE, AnimationTransformType::ROTATE },
205 : : { XML_SKEWX, AnimationTransformType::SKEWX },
206 : : { XML_SKEWY, AnimationTransformType::SKEWY },
207 : : { XML_TOKEN_INVALID, 0 }
208 : : };
209 : 0 : return aAnimations_EnumMap_TransformType;
210 : : }
211 : : case Animations_EnumMap_TransitionType:
212 : : {
213 : : static SvXMLEnumMapEntry aAnimations_EnumMap_TransitionType[] =
214 : : {
215 : : { XML_BARWIPE, TransitionType::BARWIPE },
216 : : { XML_BOXWIPE, TransitionType::BOXWIPE },
217 : : { XML_FOURBOXWIPE, TransitionType::FOURBOXWIPE },
218 : : { XML_BARNDOORWIPE, TransitionType::BARNDOORWIPE },
219 : : { XML_DIAGONALWIPE, TransitionType::DIAGONALWIPE },
220 : : { XML_BOWTIEWIPE, TransitionType::BOWTIEWIPE },
221 : : { XML_MISCDIAGONALWIPE, TransitionType::MISCDIAGONALWIPE },
222 : : { XML_VEEWIPE, TransitionType::VEEWIPE },
223 : : { XML_BARNVEEWIPE, TransitionType::BARNVEEWIPE },
224 : : { XML_ZIGZAGWIPE, TransitionType::ZIGZAGWIPE },
225 : : { XML_BARNZIGZAGWIPE, TransitionType::BARNZIGZAGWIPE },
226 : : { XML_IRISWIPE, TransitionType::IRISWIPE },
227 : : { XML_TRIANGLEWIPE, TransitionType::TRIANGLEWIPE },
228 : : { XML_ARROWHEADWIPE, TransitionType::ARROWHEADWIPE },
229 : : { XML_PENTAGONWIPE, TransitionType::PENTAGONWIPE },
230 : : { XML_HEXAGONWIPE, TransitionType::HEXAGONWIPE },
231 : : { XML_ELLIPSEWIPE, TransitionType::ELLIPSEWIPE },
232 : : { XML_EYEWIPE, TransitionType::EYEWIPE },
233 : : { XML_ROUNDRECTWIPE, TransitionType::ROUNDRECTWIPE },
234 : : { XML_STARWIPE, TransitionType::STARWIPE },
235 : : { XML_MISCSHAPEWIPE, TransitionType::MISCSHAPEWIPE },
236 : : { XML_CLOCKWIPE, TransitionType::CLOCKWIPE },
237 : : { XML_PINWHEELWIPE, TransitionType::PINWHEELWIPE },
238 : : { XML_SINGLESWEEPWIPE, TransitionType::SINGLESWEEPWIPE },
239 : : { XML_FANWIPE, TransitionType::FANWIPE },
240 : : { XML_DOUBLEFANWIPE, TransitionType::DOUBLEFANWIPE },
241 : : { XML_DOUBLESWEEPWIPE, TransitionType::DOUBLESWEEPWIPE },
242 : : { XML_SALOONDOORWIPE, TransitionType::SALOONDOORWIPE },
243 : : { XML_WINDSHIELDWIPE, TransitionType::WINDSHIELDWIPE },
244 : : { XML_SNAKEWIPE, TransitionType::SNAKEWIPE },
245 : : { XML_SPIRALWIPE, TransitionType::SPIRALWIPE },
246 : : { XML_PARALLELSNAKESWIPE,TransitionType::PARALLELSNAKESWIPE },
247 : : { XML_BOXSNAKESWIPE, TransitionType::BOXSNAKESWIPE },
248 : : { XML_WATERFALLWIPE, TransitionType::WATERFALLWIPE },
249 : : { XML_PUSHWIPE, TransitionType::PUSHWIPE },
250 : : { XML_SLIDEWIPE, TransitionType::SLIDEWIPE },
251 : : { XML_FADE, TransitionType::FADE },
252 : : { XML_RANDOMBARWIPE, TransitionType::RANDOMBARWIPE },
253 : : { XML_CHECKERBOARDWIPE, TransitionType::CHECKERBOARDWIPE },
254 : : { XML_DISSOLVE, TransitionType::DISSOLVE },
255 : : { XML_BLINDSWIPE, TransitionType::BLINDSWIPE },
256 : : { XML_RANDOM, TransitionType::RANDOM },
257 : : { XML_ZOOM, TransitionType::ZOOM },
258 : : { XML_TOKEN_INVALID, 0 }
259 : : };
260 : 608 : return aAnimations_EnumMap_TransitionType;
261 : : }
262 : : case Animations_EnumMap_TransitionSubType:
263 : : {
264 : : static SvXMLEnumMapEntry aAnimations_EnumMap_TransitionSubType[] =
265 : : {
266 : : { XML_DEFAULT, TransitionSubType::DEFAULT },
267 : : { XML_LEFTTORIGHT, TransitionSubType::LEFTTORIGHT },
268 : : { XML_TOPTOBOTTOM, TransitionSubType::TOPTOBOTTOM },
269 : : { XML_TOPLEFT, TransitionSubType::TOPLEFT },
270 : : { XML_TOPRIGHT, TransitionSubType::TOPRIGHT },
271 : : { XML_BOTTOMRIGHT, TransitionSubType::BOTTOMRIGHT },
272 : : { XML_BOTTOMLEFT, TransitionSubType::BOTTOMLEFT },
273 : : { XML_TOPCENTER, TransitionSubType::TOPCENTER },
274 : : { XML_RIGHTCENTER, TransitionSubType::RIGHTCENTER },
275 : : { XML_BOTTOMCENTER, TransitionSubType::BOTTOMCENTER },
276 : : { XML_LEFTCENTER, TransitionSubType::LEFTCENTER },
277 : : { XML_CORNERSIN, TransitionSubType::CORNERSIN },
278 : : { XML_CORNERSOUT, TransitionSubType::CORNERSOUT },
279 : : { XML_VERTICAL, TransitionSubType::VERTICAL },
280 : : { XML_HORIZONTAL, TransitionSubType::HORIZONTAL },
281 : : { XML_DIAGONALBOTTOMLEFT, TransitionSubType::DIAGONALBOTTOMLEFT },
282 : : { XML_DIAGONALTOPLEFT, TransitionSubType::DIAGONALTOPLEFT },
283 : : { XML_DOUBLEBARNDOOR, TransitionSubType::DOUBLEBARNDOOR },
284 : : { XML_DOUBLEDIAMOND, TransitionSubType::DOUBLEDIAMOND },
285 : : { XML_DOWN, TransitionSubType::DOWN },
286 : : { XML_LEFT, TransitionSubType::LEFT },
287 : : { XML_UP, TransitionSubType::UP },
288 : : { XML_RIGHT, TransitionSubType::RIGHT },
289 : : { XML_RECTANGLE, TransitionSubType::RECTANGLE },
290 : : { XML_DIAMOND, TransitionSubType::DIAMOND },
291 : : { XML_CIRCLE, TransitionSubType::CIRCLE },
292 : : { XML_FOURPOINT, TransitionSubType::FOURPOINT },
293 : : { XML_FIVEPOINT, TransitionSubType::FIVEPOINT },
294 : : { XML_SIXPOINT, TransitionSubType::SIXPOINT },
295 : : { XML_HEART, TransitionSubType::HEART },
296 : : { XML_KEYHOLE, TransitionSubType::KEYHOLE },
297 : : { XML_CLOCKWISETWELVE, TransitionSubType::CLOCKWISETWELVE },
298 : : { XML_CLOCKWISETHREE, TransitionSubType::CLOCKWISETHREE },
299 : : { XML_CLOCKWISESIX, TransitionSubType::CLOCKWISESIX },
300 : : { XML_CLOCKWISENINE, TransitionSubType::CLOCKWISENINE },
301 : : { XML_TWOBLADEVERTICAL, TransitionSubType::TWOBLADEVERTICAL },
302 : : { XML_TWOBLADEHORIZONTAL, TransitionSubType::TWOBLADEHORIZONTAL },
303 : : { XML_FOURBLADE, TransitionSubType::FOURBLADE },
304 : : { XML_CLOCKWISETOP, TransitionSubType::CLOCKWISETOP },
305 : : { XML_CLOCKWISERIGHT, TransitionSubType::CLOCKWISERIGHT },
306 : : { XML_CLOCKWISEBOTTOM, TransitionSubType::CLOCKWISEBOTTOM },
307 : : { XML_CLOCKWISELEFT, TransitionSubType::CLOCKWISELEFT },
308 : : { XML_CLOCKWISETOPLEFT, TransitionSubType::CLOCKWISETOPLEFT },
309 : : { XML_COUNTERCLOCKWISEBOTTOMLEFT,TransitionSubType::COUNTERCLOCKWISEBOTTOMLEFT },
310 : : { XML_CLOCKWISEBOTTOMRIGHT, TransitionSubType::CLOCKWISEBOTTOMRIGHT },
311 : : { XML_COUNTERCLOCKWISETOPRIGHT,TransitionSubType::COUNTERCLOCKWISETOPRIGHT },
312 : : { XML_CENTERTOP, TransitionSubType::CENTERTOP },
313 : : { XML_CENTERRIGHT, TransitionSubType::CENTERRIGHT },
314 : : { XML_TOP, TransitionSubType::TOP },
315 : : { XML_BOTTOM, TransitionSubType::BOTTOM },
316 : : { XML_FANOUTVERTICAL, TransitionSubType::FANOUTVERTICAL },
317 : : { XML_FANOUTHORIZONTAL, TransitionSubType::FANOUTHORIZONTAL },
318 : : { XML_FANINVERTICAL, TransitionSubType::FANINVERTICAL },
319 : : { XML_FANINHORIZONTAL, TransitionSubType::FANINHORIZONTAL },
320 : : { XML_PARALLELVERTICAL, TransitionSubType::PARALLELVERTICAL },
321 : : { XML_PARALLELDIAGONAL, TransitionSubType::PARALLELDIAGONAL },
322 : : { XML_OPPOSITEVERTICAL, TransitionSubType::OPPOSITEVERTICAL },
323 : : { XML_OPPOSITEHORIZONTAL, TransitionSubType::OPPOSITEHORIZONTAL },
324 : : { XML_PARALLELDIAGONALTOPLEFT,TransitionSubType::PARALLELDIAGONALTOPLEFT },
325 : : { XML_PARALLELDIAGONALBOTTOMLEFT,TransitionSubType::PARALLELDIAGONALBOTTOMLEFT },
326 : : { XML_TOPLEFTHORIZONTAL, TransitionSubType::TOPLEFTHORIZONTAL },
327 : : { XML_TOPLEFTDIAGONAL, TransitionSubType::TOPLEFTDIAGONAL },
328 : : { XML_TOPRIGHTDIAGONAL, TransitionSubType::TOPRIGHTDIAGONAL },
329 : : { XML_BOTTOMRIGHTDIAGONAL, TransitionSubType::BOTTOMRIGHTDIAGONAL },
330 : : { XML_BOTTOMLEFTDIAGONAL, TransitionSubType::BOTTOMLEFTDIAGONAL },
331 : : { XML_TOPLEFTCLOCKWISE, TransitionSubType::TOPLEFTCLOCKWISE },
332 : : { XML_TOPRIGHTCLOCKWISE, TransitionSubType::TOPRIGHTCLOCKWISE },
333 : : { XML_BOTTOMRIGHTCLOCKWISE, TransitionSubType::BOTTOMRIGHTCLOCKWISE },
334 : : { XML_BOTTOMLEFTCLOCKWISE, TransitionSubType::BOTTOMLEFTCLOCKWISE },
335 : : { XML_TOPLEFTCOUNTERCLOCKWISE,TransitionSubType::TOPLEFTCOUNTERCLOCKWISE },
336 : : { XML_TOPRIGHTCOUNTERCLOCKWISE,TransitionSubType::TOPRIGHTCOUNTERCLOCKWISE },
337 : : { XML_BOTTOMRIGHTCOUNTERCLOCKWISE,TransitionSubType::BOTTOMRIGHTCOUNTERCLOCKWISE },
338 : : { XML_BOTTOMLEFTCOUNTERCLOCKWISE,TransitionSubType::BOTTOMLEFTCOUNTERCLOCKWISE },
339 : : { XML_VERTICALTOPSAME, TransitionSubType::VERTICALTOPSAME },
340 : : { XML_VERTICALBOTTOMSAME, TransitionSubType::VERTICALBOTTOMSAME },
341 : : { XML_VERTICALTOPLEFTOPPOSITE,TransitionSubType::VERTICALTOPLEFTOPPOSITE },
342 : : { XML_VERTICALBOTTOMLEFTOPPOSITE,TransitionSubType::VERTICALBOTTOMLEFTOPPOSITE },
343 : : { XML_HORIZONTALLEFTSAME, TransitionSubType::HORIZONTALLEFTSAME },
344 : : { XML_HORIZONTALRIGHTSAME, TransitionSubType::HORIZONTALRIGHTSAME },
345 : : { XML_HORIZONTALTOPLEFTOPPOSITE,TransitionSubType::HORIZONTALTOPLEFTOPPOSITE },
346 : : { XML_HORIZONTALTOPRIGHTOPPOSITE,TransitionSubType::HORIZONTALTOPRIGHTOPPOSITE },
347 : : { XML_DIAGONALBOTTOMLEFTOPPOSITE,TransitionSubType::DIAGONALBOTTOMLEFTOPPOSITE },
348 : : { XML_DIAGONALTOPLEFTOPPOSITE,TransitionSubType::DIAGONALTOPLEFTOPPOSITE },
349 : : { XML_TWOBOXTOP, TransitionSubType::TWOBOXTOP },
350 : : { XML_TWOBOXBOTTOM, TransitionSubType::TWOBOXBOTTOM },
351 : : { XML_TWOBOXLEFT, TransitionSubType::TWOBOXLEFT },
352 : : { XML_TWOBOXRIGHT, TransitionSubType::TWOBOXRIGHT },
353 : : { XML_FOURBOXVERTICAL, TransitionSubType::FOURBOXVERTICAL },
354 : : { XML_FOURBOXHORIZONTAL, TransitionSubType::FOURBOXHORIZONTAL },
355 : : { XML_VERTICALLEFT, TransitionSubType::VERTICALLEFT },
356 : : { XML_VERTICALRIGHT, TransitionSubType::VERTICALRIGHT },
357 : : { XML_HORIZONTALLEFT, TransitionSubType::HORIZONTALLEFT },
358 : : { XML_HORIZONTALRIGHT, TransitionSubType::HORIZONTALRIGHT },
359 : : { XML_FROMLEFT, TransitionSubType::FROMLEFT },
360 : : { XML_FROMTOP, TransitionSubType::FROMTOP },
361 : : { XML_FROMRIGHT, TransitionSubType::FROMRIGHT },
362 : : { XML_FROMBOTTOM, TransitionSubType::FROMBOTTOM },
363 : : { XML_CROSSFADE, TransitionSubType::CROSSFADE },
364 : : { XML_FADETOCOLOR, TransitionSubType::FADETOCOLOR },
365 : : { XML_FADEFROMCOLOR, TransitionSubType::FADEFROMCOLOR },
366 : : { XML_FADEOVERCOLOR, TransitionSubType::FADEOVERCOLOR },
367 : : { XML_THREEBLADE, TransitionSubType::THREEBLADE },
368 : : { XML_EIGHTBLADE, TransitionSubType::EIGHTBLADE },
369 : : { XML_ONEBLADE, TransitionSubType::ONEBLADE },
370 : : { XML_ACROSS, TransitionSubType::ACROSS },
371 : : { XML_TOPLEFTVERTICAL, TransitionSubType::TOPLEFTVERTICAL },
372 : : { XML_COMBHORIZONTAL, TransitionSubType::COMBHORIZONTAL },
373 : : { XML_COMBVERTICAL, TransitionSubType::COMBVERTICAL },
374 : : { XML_IN, TransitionSubType::IN },
375 : : { XML_OUT, TransitionSubType::OUT },
376 : : { XML_ROTATEIN, TransitionSubType::ROTATEIN },
377 : : { XML_ROTATEOUT, TransitionSubType::ROTATEOUT },
378 : : { XML_FROMTOPLEFT, TransitionSubType::FROMTOPLEFT },
379 : : { XML_FROMTOPRIGHT, TransitionSubType::FROMTOPRIGHT },
380 : : { XML_FROMBOTTOMLEFT, TransitionSubType::FROMBOTTOMLEFT },
381 : : { XML_FROMBOTTOMRIGHT, TransitionSubType::FROMBOTTOMRIGHT },
382 : :
383 : : { XML_TOKEN_INVALID, 0 }
384 : : };
385 : 606 : return aAnimations_EnumMap_TransitionSubType;
386 : : }
387 : : case Animations_EnumMap_EventTrigger:
388 : : {
389 : : static SvXMLEnumMapEntry aAnimations_EnumMap_EventTrigger[] =
390 : : {
391 : : { XML_ONBEGIN, EventTrigger::ON_BEGIN },
392 : : { XML_ONEND, EventTrigger::ON_END },
393 : : { XML_BEGIN, EventTrigger::BEGIN_EVENT },
394 : : { XML_END, EventTrigger::END_EVENT },
395 : : { XML_CLICK, EventTrigger::ON_CLICK },
396 : : { XML_DOUBLECLICK, EventTrigger::ON_DBL_CLICK },
397 : : { XML_MOUSEOVER, EventTrigger::ON_MOUSE_ENTER },
398 : : { XML_MOUSEOUT, EventTrigger::ON_MOUSE_LEAVE },
399 : : { XML_NEXT, EventTrigger::ON_NEXT },
400 : : { XML_PREVIOUS, EventTrigger::ON_PREV },
401 : : { XML_STOP_AUDIO, EventTrigger::ON_STOP_AUDIO },
402 : : { XML_REPEAT, EventTrigger::REPEAT },
403 : : { XML_TOKEN_INVALID, 0 }
404 : : };
405 : 0 : return aAnimations_EnumMap_EventTrigger;
406 : : }
407 : :
408 : : case Animations_EnumMap_EffectPresetClass:
409 : : {
410 : : static SvXMLEnumMapEntry aAnimations_EnumMap_EffectPresetClass[] =
411 : : {
412 : : { XML_CUSTOM, EffectPresetClass::CUSTOM },
413 : : { XML_ENTRANCE, EffectPresetClass::ENTRANCE },
414 : : { XML_EXIT, EffectPresetClass::EXIT },
415 : : { XML_EMPHASIS, EffectPresetClass::EMPHASIS },
416 : : { XML_MOTION_PATH, EffectPresetClass::MOTIONPATH },
417 : : { XML_OLE_ACTION, EffectPresetClass::OLEACTION },
418 : : { XML_MEDIA_CALL, EffectPresetClass::MEDIACALL },
419 : : { XML_TOKEN_INVALID, 0 }
420 : : };
421 : 0 : return aAnimations_EnumMap_EffectPresetClass;
422 : : }
423 : :
424 : : case Animations_EnumMap_EffectNodeType:
425 : : {
426 : : static SvXMLEnumMapEntry aAnimations_EnumMap_EffectNodeType[] =
427 : : {
428 : : { XML_DEFAULT, EffectNodeType::DEFAULT },
429 : : { XML_ON_CLICK, EffectNodeType::ON_CLICK },
430 : : { XML_WITH_PREVIOUS, EffectNodeType::WITH_PREVIOUS },
431 : : { XML_AFTER_PREVIOUS, EffectNodeType::AFTER_PREVIOUS },
432 : : { XML_MAIN_SEQUENCE, EffectNodeType::MAIN_SEQUENCE },
433 : : { XML_TIMING_ROOT, EffectNodeType::TIMING_ROOT },
434 : : { XML_INTERACTIVE_SEQUENCE, EffectNodeType::INTERACTIVE_SEQUENCE },
435 : : { XML_TOKEN_INVALID, 0 }
436 : : };
437 : 0 : return aAnimations_EnumMap_EffectNodeType;
438 : : }
439 : : case Animations_EnumMap_SubItem:
440 : : {
441 : : static SvXMLEnumMapEntry aAnimations_EnumMap_SubItem[] =
442 : : {
443 : : { XML_WHOLE, ShapeAnimationSubType::AS_WHOLE },
444 : : { XML_BACKGROUND, ShapeAnimationSubType::ONLY_BACKGROUND },
445 : : { XML_TEXT, ShapeAnimationSubType::ONLY_TEXT },
446 : : { XML_TOKEN_INVALID, 0 }
447 : : };
448 : 0 : return aAnimations_EnumMap_SubItem;
449 : : }
450 : : case Animations_EnumMap_IterateType:
451 : : {
452 : : static SvXMLEnumMapEntry aAnimations_EnumMap_IterateType[] =
453 : : {
454 : : { XML_BY_PARAGRAPH, TextAnimationType::BY_PARAGRAPH },
455 : : { XML_BY_WORD, TextAnimationType::BY_WORD },
456 : : { XML_BY_LETTER, TextAnimationType::BY_LETTER },
457 : : { XML_TOKEN_INVALID, 0 }
458 : : };
459 : 0 : return aAnimations_EnumMap_IterateType;
460 : : }
461 : : case Animations_EnumMap_Command:
462 : : {
463 : : static SvXMLEnumMapEntry aAnimations_EnumMap_Command[] =
464 : : {
465 : : { XML_CUSTOM, EffectCommands::CUSTOM },
466 : : { XML_VERB, EffectCommands::VERB },
467 : : { XML_PLAY, EffectCommands::PLAY },
468 : : { XML_TOGGLE_PAUSE, EffectCommands::TOGGLEPAUSE },
469 : : { XML_STOP, EffectCommands::STOP },
470 : : { XML_STOP_AUDIO, EffectCommands::STOPAUDIO },
471 : : { XML_TOKEN_INVALID, 0 }
472 : : };
473 : 0 : return aAnimations_EnumMap_Command;
474 : : }
475 : : }
476 : :
477 : : OSL_FAIL( "xmloff::getAnimationsEnumMap(), invalid map!" );
478 : 1214 : return NULL;
479 : : }
480 : :
481 : 0 : struct ImplAttributeNameConversion* getAnimationAttributeNamesConversionList()
482 : : {
483 : : static struct ImplAttributeNameConversion gImplConversionList[] =
484 : : {
485 : : { XML_X, "X" },
486 : : { XML_Y, "Y" },
487 : : { XML_WIDTH, "Width" },
488 : : { XML_HEIGHT, "Height" },
489 : : { XML_ROTATE, "Rotate" },
490 : : { XML_SKEWX, "SkewX" },
491 : : { XML_FILL_COLOR, "FillColor" },
492 : : { XML_FILL, "FillStyle" },
493 : : { XML_STROKE_COLOR, "LineColor" },
494 : : { XML_STROKE, "LineStyle" },
495 : : { XML_COLOR, "CharColor" },
496 : : { XML_TEXT_ROTATION_ANGLE, "CharRotation" },
497 : : { XML_FONT_WEIGHT, "CharWeight" },
498 : : { XML_TEXT_UNDERLINE, "CharUnderline" },
499 : : { XML_FONT_FAMILY, "CharFontName" },
500 : : { XML_FONT_SIZE, "CharHeight" },
501 : : { XML_FONT_STYLE, "CharPosture" },
502 : : { XML_VISIBILITY, "Visibility" },
503 : : { XML_OPACITY, "Opacity" },
504 : : { XML_DIM, "DimColor" },
505 : : { XML_TOKEN_INVALID, NULL }
506 : : };
507 : :
508 : 0 : return gImplConversionList;
509 : : }
510 : :
511 : :
512 : : class AnimationsExporterImpl
513 : : {
514 : : public:
515 : : AnimationsExporterImpl( SvXMLExport& rExport, const Reference< XPropertySet >& xPageProps );
516 : : virtual ~AnimationsExporterImpl();
517 : :
518 : : void prepareNode( const Reference< XAnimationNode >& xNode );
519 : : void exportNode( const Reference< XAnimationNode >& xNode );
520 : :
521 : : void exportContainer( const Reference< XTimeContainer >& xNode, sal_Int16 nContainerNodeType );
522 : : void exportAnimate( const Reference< XAnimate >& xNode );
523 : : void exportAudio( const Reference< XAudio >& xAudio );
524 : : void exportCommand( const Reference< XCommand >& xCommand );
525 : :
526 : : Reference< XInterface > getParagraphTarget( const ParagraphTarget* pTarget ) const;
527 : :
528 : : void convertPath( OUStringBuffer& sTmp, const Any& rPath ) const;
529 : : void convertValue( XMLTokenEnum eAttributeName, OUStringBuffer& sTmp, const Any& rValue ) const;
530 : : void convertTiming( OUStringBuffer& sTmp, const Any& rTiming ) const;
531 : : void convertSource( OUStringBuffer& sTmp, const Any& rSource ) const;
532 : : void convertTarget( OUStringBuffer& sTmp, const Any& rTarget ) const;
533 : :
534 : : void prepareValue( const Any& rValue );
535 : :
536 : : void exportTransitionNode();
537 : : void prepareTransitionNode();
538 : :
539 : : bool mbHasTransition;
540 : : private:
541 : : SvXMLExport& mrExport;
542 : : Reference< XInterface > mxExport;
543 : : Reference< XPropertySet > mxPageProps;
544 : : XMLSdPropHdlFactory* mpSdPropHdlFactory;
545 : : };
546 : :
547 : 2 : AnimationsExporterImpl::AnimationsExporterImpl( SvXMLExport& rExport, const Reference< XPropertySet >& xPageProps )
548 : : : mbHasTransition(false)
549 : : , mrExport( rExport )
550 : 2 : , mxPageProps( xPageProps )
551 : : {
552 : : try
553 : : {
554 [ + - ]: 2 : mxExport = static_cast< ::com::sun::star::document::XFilter *>(&rExport);
555 : : }
556 [ # # ]: 0 : catch (const RuntimeException&)
557 : : {
558 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::AnimationsExporterImpl(), RuntimeException caught!" );
559 : : }
560 : :
561 [ + - ][ + - ]: 2 : mpSdPropHdlFactory = new XMLSdPropHdlFactory( mrExport.GetModel(), mrExport );
562 [ + - ]: 2 : if( mpSdPropHdlFactory )
563 : : {
564 : : // set lock to avoid deletion
565 [ + - ]: 2 : mpSdPropHdlFactory->acquire();
566 : : }
567 : :
568 [ # # ]: 2 : }
569 : :
570 : 2 : AnimationsExporterImpl::~AnimationsExporterImpl()
571 : : {
572 : : // cleanup factory, decrease refcount. Should lead to destruction.
573 [ + - ]: 2 : if(mpSdPropHdlFactory)
574 : : {
575 [ + - ]: 2 : mpSdPropHdlFactory->release();
576 : 2 : mpSdPropHdlFactory = 0L;
577 : : }
578 [ - + ]: 4 : }
579 : :
580 : 0 : void AnimationsExporterImpl::exportTransitionNode()
581 : : {
582 [ # # ][ # # ]: 0 : if( mbHasTransition && mxPageProps.is() )
[ # # ]
583 : : {
584 : 0 : sal_Int16 nTransition = 0;
585 [ # # ][ # # ]: 0 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TransitionType" ) ) ) >>= nTransition;
[ # # ]
586 : :
587 [ # # ][ # # ]: 0 : Any aSound( mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Sound" ) ) ) );
[ # # ]
588 : 0 : OUString sSoundURL;
589 : 0 : aSound >>= sSoundURL;
590 : 0 : sal_Bool bStopSound = sal_False;
591 [ # # ]: 0 : if( !(aSound >>= bStopSound) )
592 : 0 : bStopSound = sal_False;
593 : :
594 : :
595 : 0 : OUStringBuffer sTmp;
596 [ # # ][ # # ]: 0 : if( (nTransition != 0) || !sSoundURL.isEmpty() || bStopSound )
[ # # ][ # # ]
597 : : {
598 [ # # ][ # # ]: 0 : Reference< XInterface > xSource( mxPageProps.get() );
599 : 0 : Event aEvent;
600 [ # # ]: 0 : aEvent.Source <<= xSource;
601 : 0 : aEvent.Trigger = EventTrigger::BEGIN_EVENT;
602 : 0 : aEvent.Repeat = 0;
603 : :
604 [ # # ][ # # ]: 0 : convertTiming( sTmp, Any( aEvent ) );
605 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_BEGIN, sTmp.makeStringAndClear() );
606 : :
607 [ # # ]: 0 : SvXMLElementExport aElement( mrExport, XML_NAMESPACE_ANIMATION, XML_PAR, sal_True, sal_True );
608 : :
609 [ # # ]: 0 : if( nTransition != 0 )
610 : : {
611 : 0 : sal_Int16 nSubtype = 0;
612 : 0 : sal_Bool bDirection = sal_False;
613 : 0 : sal_Int32 nFadeColor = 0;
614 : 0 : double fDuration = 0.0;
615 [ # # ][ # # ]: 0 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TransitionSubtype" ) ) ) >>= nSubtype;
[ # # ]
616 [ # # ][ # # ]: 0 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TransitionDirection" ) ) ) >>= bDirection;
[ # # ]
617 [ # # ][ # # ]: 0 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TransitionFadeColor" ) ) ) >>= nFadeColor;
[ # # ]
618 [ # # ][ # # ]: 0 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TransitionDuration" ) ) ) >>= fDuration;
[ # # ]
619 : :
620 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fDuration );
621 [ # # ]: 0 : sTmp.append( sal_Unicode('s'));
622 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_DUR, sTmp.makeStringAndClear() );
623 : :
624 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTransition, getAnimationsEnumMap(Animations_EnumMap_TransitionType) );
625 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_TYPE, sTmp.makeStringAndClear() );
626 : :
627 [ # # ]: 0 : if( nSubtype != TransitionSubType::DEFAULT )
628 : : {
629 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nSubtype, getAnimationsEnumMap(Animations_EnumMap_TransitionSubType) );
630 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_SUBTYPE, sTmp.makeStringAndClear() );
631 : : }
632 : :
633 [ # # ]: 0 : if( !bDirection )
634 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_DIRECTION, XML_REVERSE );
635 : :
636 [ # # ][ # # ]: 0 : if( (nTransition == TransitionType::FADE) && ((nSubtype == TransitionSubType::FADETOCOLOR) || (nSubtype == TransitionSubType::FADEFROMCOLOR) ))
[ # # ]
637 : : {
638 [ # # ]: 0 : ::sax::Converter::convertColor( sTmp, nFadeColor );
639 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_FADECOLOR, sTmp.makeStringAndClear() );
640 : : }
641 [ # # ][ # # ]: 0 : SvXMLElementExport aElement2( mrExport, XML_NAMESPACE_ANIMATION, XML_TRANSITIONFILTER, sal_True, sal_True );
642 : : }
643 : :
644 [ # # ]: 0 : if( bStopSound )
645 : : {
646 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_COMMAND, XML_STOP_AUDIO );
647 [ # # ][ # # ]: 0 : SvXMLElementExport aElement2( mrExport, XML_NAMESPACE_ANIMATION, XML_COMMAND, sal_True, sal_True );
648 : : }
649 [ # # ]: 0 : else if( !sSoundURL.isEmpty())
650 : : {
651 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, mrExport.GetRelativeReference( sSoundURL ) );
652 : :
653 : 0 : sal_Bool bLoopSound = sal_False;
654 [ # # ][ # # ]: 0 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "LoopSound" ) ) ) >>= bLoopSound;
[ # # ]
655 : :
656 [ # # ]: 0 : if( bLoopSound )
657 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_REPEATCOUNT, XML_INDEFINITE );
658 [ # # ][ # # ]: 0 : SvXMLElementExport aElement2( mrExport, XML_NAMESPACE_ANIMATION, XML_AUDIO, sal_True, sal_True );
659 [ # # ]: 0 : }
660 : 0 : }
661 : : }
662 : 0 : }
663 : :
664 : 2 : void AnimationsExporterImpl::prepareTransitionNode()
665 : : {
666 [ + - ]: 2 : if( mxPageProps.is() ) try
667 : : {
668 : 2 : sal_Int16 nTransition = 0;
669 [ + - ][ + - ]: 2 : mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TransitionType" ) ) ) >>= nTransition;
[ + - ]
670 : :
671 : 2 : sal_Bool bStopSound = sal_False;
672 : 2 : OUString sSoundURL;
673 : :
674 [ + - ]: 2 : if( nTransition == 0 )
675 : : {
676 [ + - ][ + - ]: 2 : Any aSound( mxPageProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Sound" ) ) ) );
[ + - ]
677 : 2 : aSound >>= sSoundURL;
678 : :
679 [ + - ]: 2 : if( !(aSound >>= bStopSound) )
680 : 2 : bStopSound = sal_False;
681 : : }
682 : :
683 [ + - ][ + - ]: 2 : if( (nTransition != 0) || !sSoundURL.isEmpty() || bStopSound )
[ - + ][ - + ]
684 : : {
685 : 0 : mbHasTransition = true;
686 [ # # ][ # # ]: 0 : Reference< XInterface > xInt( mxPageProps.get() );
687 [ # # ][ # # ]: 0 : mrExport.getInterfaceToIdentifierMapper().registerReference( xInt );
688 [ # # ]: 2 : }
689 : : }
690 : 0 : catch (const Exception&)
691 : : {
692 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::prepareNode(), Exception caught!" );
693 : : }
694 : :
695 : 2 : }
696 : :
697 : 2 : void AnimationsExporterImpl::prepareNode( const Reference< XAnimationNode >& xNode )
698 : : {
699 : : try
700 : : {
701 [ + - ][ + - ]: 2 : prepareValue( xNode->getBegin() );
[ + - ]
702 [ + - ][ + - ]: 2 : prepareValue( xNode->getEnd() );
[ + - ]
703 : :
704 [ + - ][ + - ]: 2 : sal_Int16 nNodeType = xNode->getType();
705 [ - + - - : 2 : switch( nNodeType )
- - ]
706 : : {
707 : : case AnimationNodeType::ITERATE:
708 : : {
709 [ # # ]: 0 : Reference< XIterateContainer > xIter( xNode, UNO_QUERY_THROW );
710 [ # # ][ # # ]: 0 : prepareValue( xIter->getTarget() );
[ # # ]
711 : : }
712 : : // its intended that here is no break!
713 : : case AnimationNodeType::PAR:
714 : : case AnimationNodeType::SEQ:
715 : : {
716 [ + - ]: 2 : Reference< XEnumerationAccess > xEnumerationAccess( xNode, UNO_QUERY_THROW );
717 [ + - ][ + - ]: 2 : Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY_THROW );
[ + - ]
718 [ + - ][ + - ]: 2 : while( xEnumeration->hasMoreElements() )
[ - + ]
719 : : {
720 [ # # ][ # # ]: 0 : Reference< XAnimationNode > xChildNode( xEnumeration->nextElement(), UNO_QUERY_THROW );
[ # # ]
721 [ # # ]: 0 : prepareNode( xChildNode );
722 : 2 : }
723 : : }
724 : 2 : break;
725 : :
726 : : case AnimationNodeType::ANIMATE:
727 : : case AnimationNodeType::SET:
728 : : case AnimationNodeType::ANIMATEMOTION:
729 : : case AnimationNodeType::ANIMATECOLOR:
730 : : case AnimationNodeType::ANIMATETRANSFORM:
731 : : case AnimationNodeType::TRANSITIONFILTER:
732 : : {
733 [ # # ]: 0 : Reference< XAnimate > xAnimate( xNode, UNO_QUERY_THROW );
734 [ # # ][ # # ]: 0 : prepareValue( xAnimate->getTarget() );
[ # # ]
735 : : }
736 : 0 : break;
737 : :
738 : : case AnimationNodeType::COMMAND:
739 : : {
740 [ # # ]: 0 : Reference< XCommand > xCommand( xNode, UNO_QUERY_THROW );
741 [ # # ][ # # ]: 0 : prepareValue( xCommand->getTarget() );
[ # # ]
742 : : }
743 : 0 : break;
744 : :
745 : : case AnimationNodeType::AUDIO:
746 : : {
747 [ # # ]: 0 : Reference< XAudio > xAudio( xNode, UNO_QUERY_THROW );
748 [ # # ][ # # ]: 0 : prepareValue( xAudio->getSource() );
[ # # ]
749 : : }
750 : 0 : break;
751 : : }
752 : :
753 [ + - ][ + - ]: 2 : Sequence< NamedValue > aUserData( xNode->getUserData() );
754 [ + - ]: 2 : if( aUserData.hasElements() )
755 : : {
756 : 2 : const NamedValue* pValue = aUserData.getConstArray();
757 : 2 : const sal_Int32 nLength = aUserData.getLength();
758 : : sal_Int32 nElement;
759 [ + + ]: 4 : for( nElement = 0; nElement < nLength; nElement++, pValue++ )
760 : : {
761 [ + - ][ - + ]: 2 : if( IsXMLToken( pValue->Name, XML_MASTER_ELEMENT ) )
762 : : {
763 : 0 : Reference< XInterface > xMaster;
764 [ # # ]: 0 : pValue->Value >>= xMaster;
765 [ # # ]: 0 : if( xMaster.is() )
766 [ # # ][ # # ]: 0 : mrExport.getInterfaceToIdentifierMapper().registerReference( xMaster );
767 : : }
768 : : }
769 [ + - ][ # # ]: 2 : }
770 : : }
771 : 0 : catch (const Exception&)
772 : : {
773 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::prepareNode(), RuntimeException caught!" );
774 : : }
775 : 2 : }
776 : :
777 : 0 : void AnimationsExporterImpl::exportNode( const Reference< XAnimationNode >& xNode )
778 : : {
779 : : try
780 : : {
781 : 0 : OUStringBuffer sTmp;
782 : :
783 [ # # ][ # # ]: 0 : const OUString& rExportIdentifier = mrExport.getInterfaceToIdentifierMapper().getIdentifier( xNode );
784 [ # # ]: 0 : if( !rExportIdentifier.isEmpty() )
785 : : {
786 : : mrExport.AddAttributeIdLegacy(
787 [ # # ]: 0 : XML_NAMESPACE_ANIMATION, rExportIdentifier);
788 : : }
789 : :
790 [ # # ][ # # ]: 0 : Any aTemp( xNode->getBegin() );
791 [ # # ]: 0 : if( aTemp.hasValue() )
792 : : {
793 [ # # ]: 0 : convertTiming( sTmp, aTemp );
794 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_BEGIN, sTmp.makeStringAndClear() );
795 : : }
796 : :
797 : 0 : double fTemp = 0;
798 : : sal_Int32 nTemp;
799 : :
800 [ # # ][ # # ]: 0 : aTemp = xNode->getDuration();
801 [ # # ]: 0 : if( aTemp.hasValue() )
802 : : {
803 [ # # ]: 0 : if( aTemp >>= fTemp )
804 : : {
805 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fTemp );
806 [ # # ]: 0 : sTmp.append( sal_Unicode('s'));
807 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_DUR, sTmp.makeStringAndClear() );
808 : : }
809 : : else
810 : : {
811 : : Timing eTiming;
812 [ # # ][ # # ]: 0 : if( aTemp >>= eTiming )
813 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_DUR, eTiming == Timing_INDEFINITE ? XML_INDEFINITE : XML_MEDIA );
814 : : }
815 : : }
816 : :
817 [ # # ][ # # ]: 0 : aTemp = xNode->getEnd();
818 [ # # ]: 0 : if( aTemp.hasValue() )
819 : : {
820 [ # # ]: 0 : convertTiming( sTmp, aTemp );
821 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_END, sTmp.makeStringAndClear() );
822 : : }
823 : :
824 [ # # ][ # # ]: 0 : nTemp = xNode->getFill();
825 [ # # ]: 0 : if( nTemp != AnimationFill::DEFAULT )
826 : : {
827 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_Fill) );
828 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_FILL, sTmp.makeStringAndClear() );
829 : : }
830 : :
831 [ # # ][ # # ]: 0 : nTemp = xNode->getFillDefault();
832 [ # # ]: 0 : if( nTemp != AnimationFill::INHERIT )
833 : : {
834 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_FillDefault) );
835 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_FILLDEFAULT, sTmp.makeStringAndClear() );
836 : : }
837 : :
838 [ # # ][ # # ]: 0 : nTemp = xNode->getRestart();
839 [ # # ]: 0 : if( nTemp != AnimationRestart::DEFAULT )
840 : : {
841 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_Restart) );
842 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_RESTART, sTmp.makeStringAndClear() );
843 : : }
844 : :
845 [ # # ][ # # ]: 0 : nTemp = xNode->getRestartDefault();
846 [ # # ]: 0 : if( nTemp != AnimationRestart::INHERIT )
847 : : {
848 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_RestartDefault) );
849 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_RESTARTDEFAULT, sTmp.makeStringAndClear() );
850 : : }
851 : :
852 [ # # ][ # # ]: 0 : fTemp = xNode->getAcceleration();
853 [ # # ]: 0 : if( fTemp != 0.0 )
854 : : {
855 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fTemp );
856 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ACCELERATE, sTmp.makeStringAndClear() );
857 : : }
858 : :
859 [ # # ][ # # ]: 0 : fTemp = xNode->getDecelerate();
860 [ # # ]: 0 : if( fTemp != 0.0 )
861 : : {
862 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fTemp );
863 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_DECELERATE, sTmp.makeStringAndClear() );
864 : : }
865 : :
866 [ # # ][ # # ]: 0 : sal_Bool bTemp = xNode->getAutoReverse();
867 [ # # ]: 0 : if( bTemp )
868 : : {
869 [ # # ]: 0 : ::sax::Converter::convertBool( sTmp, bTemp );
870 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_AUTOREVERSE, sTmp.makeStringAndClear() );
871 : : }
872 : :
873 [ # # ][ # # ]: 0 : aTemp = xNode->getRepeatCount();
874 [ # # ]: 0 : if( aTemp.hasValue() )
875 : : {
876 : : Timing eTiming;
877 [ # # ][ # # ]: 0 : if( (aTemp >>= eTiming ) && (eTiming == Timing_INDEFINITE ) )
[ # # ][ # # ]
878 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_REPEATCOUNT, XML_INDEFINITE );
879 [ # # ]: 0 : else if( aTemp >>= fTemp )
880 : : {
881 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fTemp );
882 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_REPEATCOUNT, sTmp.makeStringAndClear() );
883 : : }
884 : : }
885 : :
886 [ # # ][ # # ]: 0 : aTemp = xNode->getRepeatDuration();
887 [ # # ]: 0 : if( aTemp.hasValue() )
888 : : {
889 : : Timing eTiming;
890 [ # # ][ # # ]: 0 : if( ( aTemp >>= eTiming ) && (eTiming == Timing_INDEFINITE) )
[ # # ][ # # ]
891 : : {
892 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_REPEATDUR, XML_INDEFINITE );
893 : : }
894 [ # # ]: 0 : else if( aTemp >>= fTemp )
895 : : {
896 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fTemp );
897 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_REPEATDUR, sTmp.makeStringAndClear() );
898 : : }
899 : : }
900 : :
901 [ # # ][ # # ]: 0 : aTemp = xNode->getEndSync();
902 [ # # ]: 0 : if( aTemp.hasValue() )
903 : : {
904 [ # # ]: 0 : if( aTemp >>= nTemp )
905 : : {
906 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_Endsync) );
907 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ENDSYNC, sTmp.makeStringAndClear() );
908 : : }
909 : : }
910 : :
911 : 0 : sal_Int16 nContainerNodeType = EffectNodeType::DEFAULT;
912 : 0 : OUString aPresetId;
913 [ # # ][ # # ]: 0 : Sequence< NamedValue > aUserData( xNode->getUserData() );
914 [ # # ]: 0 : if( aUserData.hasElements() )
915 : : {
916 : 0 : const NamedValue* pValue = aUserData.getConstArray();
917 : 0 : const sal_Int32 nLength = aUserData.getLength();
918 : : sal_Int32 nElement;
919 [ # # ]: 0 : for( nElement = 0; nElement < nLength; nElement++, pValue++ )
920 : : {
921 [ # # ][ # # ]: 0 : if( IsXMLToken( pValue->Name, XML_NODE_TYPE ) )
922 : : {
923 [ # # ][ # # ]: 0 : if( (pValue->Value >>= nContainerNodeType) && (nContainerNodeType != EffectNodeType::DEFAULT) )
[ # # ]
924 : : {
925 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nContainerNodeType, getAnimationsEnumMap(Animations_EnumMap_EffectNodeType) );
926 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_NODE_TYPE, sTmp.makeStringAndClear() );
927 : : }
928 : : }
929 [ # # ][ # # ]: 0 : else if( IsXMLToken( pValue->Name, XML_PRESET_ID ) )
930 : : {
931 [ # # ]: 0 : if( pValue->Value >>= aPresetId )
932 : : {
933 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_PRESET_ID, aPresetId );
934 : : }
935 : : }
936 [ # # ][ # # ]: 0 : else if( IsXMLToken( pValue->Name, XML_PRESET_SUB_TYPE ) )
937 : : {
938 : 0 : OUString aPresetSubType;
939 [ # # ]: 0 : if( pValue->Value >>= aPresetSubType )
940 : : {
941 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_PRESET_SUB_TYPE, aPresetSubType );
942 : 0 : }
943 : : }
944 [ # # ][ # # ]: 0 : else if( IsXMLToken( pValue->Name, XML_PRESET_CLASS ) )
945 : : {
946 : 0 : sal_Int16 nEffectPresetClass = sal_Int16();
947 [ # # ]: 0 : if( pValue->Value >>= nEffectPresetClass )
948 : : {
949 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nEffectPresetClass, getAnimationsEnumMap(Animations_EnumMap_EffectPresetClass) );
950 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_PRESET_CLASS, sTmp.makeStringAndClear() );
951 : : }
952 : : }
953 [ # # ][ # # ]: 0 : else if( IsXMLToken( pValue->Name, XML_MASTER_ELEMENT ) )
954 : : {
955 : 0 : Reference< XInterface > xMaster;
956 [ # # ]: 0 : pValue->Value >>= xMaster;
957 [ # # ]: 0 : if( xMaster.is() )
958 : : {
959 [ # # ][ # # ]: 0 : const OUString& rIdentifier = mrExport.getInterfaceToIdentifierMapper().getIdentifier(xMaster);
960 [ # # ]: 0 : if( !rIdentifier.isEmpty() )
961 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_MASTER_ELEMENT, rIdentifier );
962 : 0 : }
963 : : }
964 [ # # ][ # # ]: 0 : else if( IsXMLToken( pValue->Name, XML_GROUP_ID ) )
965 : : {
966 : 0 : sal_Int32 nGroupId = 0;
967 [ # # ]: 0 : if( pValue->Value >>= nGroupId )
968 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_GROUP_ID, OUString::valueOf( nGroupId ) );
969 : : }
970 : : else
971 : : {
972 : 0 : OUString aTmp;
973 [ # # ]: 0 : if( pValue->Value >>= aTmp )
974 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_PRESENTATION, pValue->Name, aTmp );
975 : : }
976 : : }
977 : : }
978 : :
979 [ # # ][ # # ]: 0 : nTemp = xNode->getType();
980 [ # # # # : 0 : switch( nTemp )
# ]
981 : : {
982 : : case AnimationNodeType::PAR:
983 : : case AnimationNodeType::SEQ:
984 : : case AnimationNodeType::ITERATE:
985 : : {
986 [ # # ]: 0 : Reference< XTimeContainer > xContainer( xNode, UNO_QUERY_THROW );
987 [ # # ]: 0 : exportContainer( xContainer, nContainerNodeType );
988 : : }
989 : 0 : break;
990 : :
991 : : case AnimationNodeType::ANIMATE:
992 : : case AnimationNodeType::SET:
993 : : case AnimationNodeType::ANIMATEMOTION:
994 : : case AnimationNodeType::ANIMATECOLOR:
995 : : case AnimationNodeType::ANIMATETRANSFORM:
996 : : case AnimationNodeType::TRANSITIONFILTER:
997 : : {
998 [ # # ]: 0 : Reference< XAnimate > xAnimate( xNode, UNO_QUERY_THROW );
999 [ # # ]: 0 : exportAnimate( xAnimate );
1000 : : }
1001 : 0 : break;
1002 : : case AnimationNodeType::AUDIO:
1003 : : {
1004 [ # # ]: 0 : Reference< XAudio > xAudio( xNode, UNO_QUERY_THROW );
1005 [ # # ]: 0 : exportAudio( xAudio );
1006 : : }
1007 : 0 : break;
1008 : : case AnimationNodeType::COMMAND:
1009 : : {
1010 [ # # ]: 0 : Reference< XCommand > xCommand( xNode, UNO_QUERY_THROW );
1011 [ # # ]: 0 : exportCommand( xCommand );
1012 : : }
1013 : 0 : break;
1014 : : default:
1015 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportNode(), invalid AnimationNodeType!" );
1016 [ # # ][ # # ]: 0 : }
1017 : : }
1018 : 0 : catch (const RuntimeException&)
1019 : : {
1020 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportNode(), RuntimeException caught!" );
1021 : : }
1022 : :
1023 : : // if something goes wrong, its always a good idea to clear the attribute list
1024 : 0 : mrExport.ClearAttrList();
1025 : 0 : }
1026 : :
1027 : 0 : void AnimationsExporterImpl::exportContainer( const Reference< XTimeContainer >& xContainer, sal_Int16 nContainerNodeType )
1028 : : {
1029 : : try
1030 : : {
1031 [ # # ][ # # ]: 0 : const sal_Int32 nNodeType = xContainer->getType();
1032 : :
1033 [ # # ]: 0 : if( nNodeType == AnimationNodeType::ITERATE )
1034 : : {
1035 : 0 : OUStringBuffer sTmp;
1036 [ # # ]: 0 : Reference< XIterateContainer > xIter( xContainer, UNO_QUERY_THROW );
1037 : :
1038 [ # # ][ # # ]: 0 : Any aTemp( xIter->getTarget() );
1039 [ # # ]: 0 : if( aTemp.hasValue() )
1040 : : {
1041 [ # # ]: 0 : convertTarget( sTmp, aTemp );
1042 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_TARGETELEMENT, sTmp.makeStringAndClear() );
1043 : : }
1044 : :
1045 [ # # ][ # # ]: 0 : sal_Int16 nTemp = xIter->getSubItem();
1046 [ # # ]: 0 : if( nTemp )
1047 : : {
1048 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_SubItem) );
1049 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_SUB_ITEM, sTmp.makeStringAndClear() );
1050 : : }
1051 : :
1052 [ # # ][ # # ]: 0 : nTemp = xIter->getIterateType();
1053 [ # # ]: 0 : if( nTemp )
1054 : : {
1055 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_IterateType) );
1056 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_ITERATE_TYPE, sTmp.makeStringAndClear() );
1057 : : }
1058 : :
1059 [ # # ][ # # ]: 0 : double fTemp = xIter->getIterateInterval();
1060 [ # # ]: 0 : if( fTemp )
1061 : : {
1062 [ # # ]: 0 : if( 0 == ( mrExport.getExportFlags() & EXPORT_SAVEBACKWARDCOMPATIBLE ) )
1063 : : {
1064 : : // issue 146582
1065 : 0 : ::rtl::OUStringBuffer buf;
1066 [ # # ]: 0 : ::sax::Converter::convertDuration(buf, fTemp / (24*60*60));
1067 : : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION,
1068 [ # # ][ # # ]: 0 : XML_ITERATE_INTERVAL, buf.makeStringAndClear());
1069 : : }
1070 : : else
1071 : : {
1072 [ # # ]: 0 : sTmp.append( fTemp );
1073 [ # # ]: 0 : sTmp.append( (sal_Unicode)'s' );
1074 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_ITERATE_INTERVAL, sTmp.makeStringAndClear() );
1075 : : }
1076 : 0 : }
1077 : : }
1078 : :
1079 : : XMLTokenEnum eElementToken;
1080 [ # # # # ]: 0 : switch( nNodeType )
1081 : : {
1082 : 0 : case AnimationNodeType::PAR: eElementToken = XML_PAR; break;
1083 : 0 : case AnimationNodeType::SEQ: eElementToken = XML_SEQ; break;
1084 : 0 : case AnimationNodeType::ITERATE:eElementToken = XML_ITERATE; break;
1085 : : default:
1086 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportContainer(), invalid TimeContainerType!" );
1087 : 0 : return;
1088 : : }
1089 [ # # ]: 0 : SvXMLElementExport aElement( mrExport, XML_NAMESPACE_ANIMATION, eElementToken, sal_True, sal_True );
1090 : :
1091 [ # # ]: 0 : if( nContainerNodeType == EffectNodeType::TIMING_ROOT )
1092 [ # # ]: 0 : exportTransitionNode();
1093 : :
1094 [ # # ]: 0 : Reference< XEnumerationAccess > xEnumerationAccess( xContainer, UNO_QUERY_THROW );
1095 [ # # ][ # # ]: 0 : Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY_THROW );
[ # # ]
1096 [ # # ][ # # ]: 0 : while( xEnumeration->hasMoreElements() )
[ # # ]
1097 : : {
1098 [ # # ][ # # ]: 0 : Reference< XAnimationNode > xChildNode( xEnumeration->nextElement(), UNO_QUERY_THROW );
[ # # ]
1099 [ # # ]: 0 : exportNode( xChildNode );
1100 [ # # ][ # # ]: 0 : }
1101 : : }
1102 : 0 : catch (const RuntimeException&)
1103 : : {
1104 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportContainer(), RuntimeException caught!" );
1105 : : }
1106 : : }
1107 : :
1108 : 0 : void AnimationsExporterImpl::exportAnimate( const Reference< XAnimate >& xAnimate )
1109 : : {
1110 : : try
1111 : : {
1112 [ # # ][ # # ]: 0 : const sal_Int16 nNodeType = xAnimate->getType();
1113 : :
1114 : 0 : OUStringBuffer sTmp;
1115 : : sal_Int32 nTemp;
1116 : : sal_Bool bTemp;
1117 : :
1118 [ # # ][ # # ]: 0 : Any aTemp( xAnimate->getTarget() );
1119 [ # # ]: 0 : if( aTemp.hasValue() )
1120 : : {
1121 [ # # ]: 0 : convertTarget( sTmp, aTemp );
1122 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_TARGETELEMENT, sTmp.makeStringAndClear() );
1123 : : }
1124 : :
1125 [ # # ][ # # ]: 0 : nTemp = xAnimate->getSubItem();
1126 [ # # ]: 0 : if( nTemp )
1127 : : {
1128 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_SubItem) );
1129 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_SUB_ITEM, sTmp.makeStringAndClear() );
1130 : : }
1131 : :
1132 : 0 : XMLTokenEnum eAttributeName = XML_TOKEN_INVALID;
1133 : :
1134 [ # # ]: 0 : if( nNodeType == AnimationNodeType::TRANSITIONFILTER )
1135 : : {
1136 : 0 : eAttributeName = XML_TRANSITIONFILTER;
1137 : : }
1138 [ # # ]: 0 : else if( nNodeType == AnimationNodeType::ANIMATETRANSFORM )
1139 : : {
1140 : 0 : eAttributeName = XML_ANIMATETRANSFORM;
1141 : : }
1142 [ # # ]: 0 : else if( nNodeType == AnimationNodeType::ANIMATEMOTION )
1143 : : {
1144 : 0 : eAttributeName = XML_ANIMATEMOTION;
1145 : : }
1146 : : else
1147 : : {
1148 [ # # ][ # # ]: 0 : OUString sTemp( xAnimate->getAttributeName() );
1149 [ # # ]: 0 : if( !sTemp.isEmpty() )
1150 : : {
1151 : 0 : ImplAttributeNameConversion* p = getAnimationAttributeNamesConversionList();
1152 [ # # ]: 0 : while( p->mpAPIName )
1153 : : {
1154 [ # # ]: 0 : if( sTemp.compareToAscii( p->mpAPIName ) == 0 )
1155 : : {
1156 [ # # ]: 0 : sTemp = GetXMLToken( p->meXMLToken );
1157 : 0 : eAttributeName = p->meXMLToken;
1158 : 0 : break;
1159 : : }
1160 : :
1161 : 0 : p++;
1162 : : }
1163 : :
1164 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ATTRIBUTENAME, sTemp );
1165 : : }
1166 : : else
1167 : : {
1168 [ # # ]: 0 : OUString aStr( RTL_CONSTASCII_USTRINGPARAM( "invalid" ) );
1169 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ATTRIBUTENAME, aStr );
1170 : 0 : }
1171 : : }
1172 : :
1173 [ # # ][ # # ]: 0 : Sequence< Any > aValues( xAnimate->getValues() );
1174 [ # # ]: 0 : if( aValues.getLength() )
1175 : : {
1176 [ # # ]: 0 : aTemp <<= aValues;
1177 [ # # ]: 0 : convertValue( eAttributeName, sTmp, aTemp );
1178 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_VALUES, sTmp.makeStringAndClear() );
1179 : : }
1180 : : else
1181 : : {
1182 [ # # ][ # # ]: 0 : aTemp = xAnimate->getFrom();
1183 [ # # ]: 0 : if( aTemp.hasValue() )
1184 : : {
1185 [ # # ]: 0 : convertValue( eAttributeName, sTmp, aTemp );
1186 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_FROM, sTmp.makeStringAndClear() );
1187 : : }
1188 : :
1189 [ # # ][ # # ]: 0 : aTemp = xAnimate->getBy();
1190 [ # # ]: 0 : if( aTemp.hasValue() )
1191 : : {
1192 [ # # ]: 0 : convertValue( eAttributeName, sTmp, aTemp );
1193 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_BY, sTmp.makeStringAndClear() );
1194 : : }
1195 : :
1196 [ # # ][ # # ]: 0 : aTemp = xAnimate->getTo();
1197 [ # # ]: 0 : if( aTemp.hasValue() )
1198 : : {
1199 [ # # ]: 0 : convertValue( eAttributeName, sTmp, aTemp );
1200 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_TO, sTmp.makeStringAndClear() );
1201 : : }
1202 : : }
1203 : :
1204 [ # # ]: 0 : if(nNodeType != AnimationNodeType::SET)
1205 : : {
1206 [ # # ][ # # ]: 0 : Sequence< double > aKeyTimes( xAnimate->getKeyTimes() );
1207 [ # # ]: 0 : if( aKeyTimes.getLength() )
1208 : : {
1209 : 0 : sal_Int32 nLength = aKeyTimes.getLength();
1210 : 0 : const double* p = aKeyTimes.getConstArray();
1211 : :
1212 [ # # ]: 0 : while( nLength-- )
1213 : : {
1214 [ # # ]: 0 : if( sTmp.getLength() )
1215 [ # # ]: 0 : sTmp.append( (sal_Unicode)';' );
1216 : :
1217 [ # # ]: 0 : sTmp.append( *p++ );
1218 : : }
1219 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_KEYTIMES, sTmp.makeStringAndClear() );
1220 : : }
1221 : :
1222 [ # # ][ # # ]: 0 : OUString sTemp( xAnimate->getFormula() );
1223 [ # # ]: 0 : if( !sTemp.isEmpty() )
1224 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_FORMULA, sTemp );
1225 : :
1226 [ # # ][ # # ]: 0 : if( (nNodeType != AnimationNodeType::TRANSITIONFILTER) &&
1227 : : (nNodeType != AnimationNodeType::AUDIO ) )
1228 : : {
1229 : : // calcMode = "discrete | linear | paced | spline"
1230 [ # # ][ # # ]: 0 : nTemp = xAnimate->getCalcMode();
1231 [ # # ][ # # ]: 0 : if( ((nNodeType == AnimationNodeType::ANIMATEMOTION ) && (nTemp != AnimationCalcMode::PACED)) ||
[ # # ][ # # ]
1232 : : ((nNodeType != AnimationNodeType::ANIMATEMOTION ) && (nTemp != AnimationCalcMode::LINEAR)) )
1233 : : {
1234 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_CalcMode) );
1235 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_CALCMODE, sTmp.makeStringAndClear() );
1236 : : }
1237 : :
1238 [ # # ][ # # ]: 0 : bTemp = xAnimate->getAccumulate();
1239 [ # # ]: 0 : if( bTemp )
1240 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ACCUMULATE, XML_SUM );
1241 : :
1242 [ # # ][ # # ]: 0 : nTemp = xAnimate->getAdditive();
1243 [ # # ]: 0 : if( nTemp != AnimationAdditiveMode::REPLACE )
1244 : : {
1245 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_AdditiveMode) );
1246 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ADDITIVE, sTmp.makeStringAndClear() );
1247 : : }
1248 : : }
1249 : :
1250 [ # # ][ # # ]: 0 : Sequence< TimeFilterPair > aTimeFilter( xAnimate->getTimeFilter() );
1251 [ # # ]: 0 : if( aTimeFilter.getLength() )
1252 : : {
1253 : 0 : sal_Int32 nLength = aTimeFilter.getLength();
1254 : 0 : const TimeFilterPair* p = aTimeFilter.getConstArray();
1255 : :
1256 [ # # ]: 0 : while( nLength-- )
1257 : : {
1258 [ # # ]: 0 : if( sTmp.getLength() )
1259 [ # # ]: 0 : sTmp.append( (sal_Unicode)';' );
1260 : :
1261 [ # # ]: 0 : sTmp.append( p->Time );
1262 [ # # ]: 0 : sTmp.append( (sal_Unicode)',' );
1263 [ # # ]: 0 : sTmp.append( p->Progress );
1264 : :
1265 : 0 : p++;
1266 : : }
1267 : :
1268 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_KEYSPLINES, sTmp.makeStringAndClear() );
1269 [ # # ][ # # ]: 0 : }
1270 : : }
1271 : :
1272 : 0 : XMLTokenEnum eElementToken = XML_ANIMATE;
1273 : :
1274 [ # # # # : 0 : switch( nNodeType )
# # # ]
1275 : : {
1276 : : case AnimationNodeType::ANIMATE:
1277 : 0 : eElementToken = XML_ANIMATE;
1278 : 0 : break;
1279 : :
1280 : : case AnimationNodeType::SET:
1281 : 0 : eElementToken = XML_SET;
1282 : 0 : break;
1283 : :
1284 : : case AnimationNodeType::ANIMATEMOTION:
1285 : : {
1286 : 0 : eElementToken = XML_ANIMATEMOTION;
1287 : :
1288 [ # # ]: 0 : Reference< XAnimateMotion > xAnimateMotion( xAnimate, UNO_QUERY_THROW );
1289 : :
1290 [ # # ][ # # ]: 0 : aTemp = xAnimateMotion->getPath();
1291 [ # # ]: 0 : if( aTemp.hasValue() )
1292 : : {
1293 [ # # ]: 0 : convertPath( sTmp, aTemp );
1294 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_PATH, sTmp.makeStringAndClear() );
1295 : : }
1296 : :
1297 : : // TODO: origin = ( parent | layout )
1298 [ # # ][ # # ]: 0 : aTemp = xAnimateMotion->getOrigin();
1299 : : }
1300 : 0 : break;
1301 : :
1302 : : case AnimationNodeType::ANIMATECOLOR:
1303 : : {
1304 : 0 : eElementToken = XML_ANIMATECOLOR;
1305 : :
1306 [ # # ]: 0 : Reference< XAnimateColor > xAnimateColor( xAnimate, UNO_QUERY_THROW );
1307 : :
1308 [ # # ][ # # ]: 0 : nTemp = xAnimateColor->getColorInterpolation();
1309 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_COLOR_INTERPOLATION, (nTemp == AnimationColorSpace::RGB) ? XML_RGB : XML_HSL );
1310 : :
1311 [ # # ][ # # ]: 0 : bTemp = xAnimateColor->getDirection();
1312 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_COLOR_INTERPOLATION_DIRECTION, bTemp ? XML_CLOCKWISE : XML_COUNTER_CLOCKWISE );
1313 : : }
1314 : 0 : break;
1315 : :
1316 : : case AnimationNodeType::ANIMATETRANSFORM:
1317 : : {
1318 : 0 : eElementToken = XML_ANIMATETRANSFORM;
1319 : :
1320 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_ATTRIBUTENAME, XML_TRANSFORM );
1321 : :
1322 [ # # ]: 0 : Reference< XAnimateTransform > xTransform( xAnimate, UNO_QUERY_THROW );
1323 [ # # ][ # # ]: 0 : nTemp = xTransform->getTransformType();
1324 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTemp, getAnimationsEnumMap(Animations_EnumMap_TransformType) );
1325 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_TYPE, sTmp.makeStringAndClear() );
1326 : : }
1327 : 0 : break;
1328 : :
1329 : : case AnimationNodeType::TRANSITIONFILTER:
1330 : : {
1331 [ # # ]: 0 : Reference< XTransitionFilter > xTransitionFilter( xAnimate, UNO_QUERY );
1332 : 0 : eElementToken = XML_TRANSITIONFILTER;
1333 : :
1334 [ # # ][ # # ]: 0 : sal_Int16 nTransition = xTransitionFilter->getTransition();
1335 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nTransition, getAnimationsEnumMap(Animations_EnumMap_TransitionType) );
1336 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_TYPE, sTmp.makeStringAndClear() );
1337 : :
1338 [ # # ][ # # ]: 0 : sal_Int16 nSubtype = xTransitionFilter->getSubtype();
1339 [ # # ]: 0 : if( nSubtype != TransitionSubType::DEFAULT )
1340 : : {
1341 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nSubtype, getAnimationsEnumMap(Animations_EnumMap_TransitionSubType) );
1342 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_SUBTYPE, sTmp.makeStringAndClear() );
1343 : : }
1344 : :
1345 [ # # ][ # # ]: 0 : bTemp = xTransitionFilter->getMode();
1346 [ # # ]: 0 : if( !bTemp )
1347 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_MODE, XML_OUT );
1348 : :
1349 [ # # ][ # # ]: 0 : bTemp = xTransitionFilter->getDirection();
1350 [ # # ]: 0 : if( !bTemp )
1351 [ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_DIRECTION, XML_REVERSE );
1352 : :
1353 [ # # ][ # # ]: 0 : if( (nTransition == TransitionType::FADE) && ((nSubtype == TransitionSubType::FADETOCOLOR) || (nSubtype == TransitionSubType::FADEFROMCOLOR) ))
[ # # ]
1354 : : {
1355 [ # # ][ # # ]: 0 : nTemp = xTransitionFilter->getFadeColor();
1356 [ # # ]: 0 : ::sax::Converter::convertColor( sTmp, nTemp );
1357 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_FADECOLOR, sTmp.makeStringAndClear() );
1358 : 0 : }
1359 : : }
1360 : 0 : break;
1361 : : }
1362 : :
1363 [ # # ][ # # ]: 0 : SvXMLElementExport aElement( mrExport, XML_NAMESPACE_ANIMATION, eElementToken, sal_True, sal_True );
[ # # ][ # # ]
1364 : :
1365 : : }
1366 : 0 : catch (const Exception&)
1367 : : {
1368 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportAnimate(), Exception cought!" );
1369 : : }
1370 : 0 : }
1371 : :
1372 : 0 : void AnimationsExporterImpl::exportAudio( const Reference< XAudio >& xAudio )
1373 : : {
1374 [ # # ]: 0 : if( xAudio.is() ) try
1375 : : {
1376 : 0 : OUString aSourceURL;
1377 [ # # ][ # # ]: 0 : xAudio->getSource() >>= aSourceURL;
1378 [ # # ]: 0 : if( !aSourceURL.isEmpty() )
1379 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, mrExport.GetRelativeReference( aSourceURL ) );
1380 : :
1381 [ # # ][ # # ]: 0 : const double fVolume = xAudio->getVolume();
1382 [ # # ]: 0 : if( fVolume != 1.0 )
1383 : : {
1384 : 0 : OUStringBuffer sTmp;
1385 [ # # ]: 0 : ::sax::Converter::convertDouble( sTmp, fVolume );
1386 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_AUDIO_LEVEL, sTmp.makeStringAndClear() );
1387 : : }
1388 : :
1389 : : /* todo?
1390 : : sal_Int32 nEndAfterSlide = 0;
1391 : : xAudio->getEndAfterSlide() >>= nEndAfterSlide;
1392 : : if( nEndAfterSlide != 0 )
1393 : : mrExport.AddAttribute( );
1394 : : */
1395 [ # # ][ # # ]: 0 : SvXMLElementExport aElement( mrExport, XML_NAMESPACE_ANIMATION, XML_AUDIO, sal_True, sal_True );
[ # # ]
1396 : :
1397 : : }
1398 : 0 : catch (const Exception&)
1399 : : {
1400 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportAudio(), exception caught!" );
1401 : : }
1402 : 0 : }
1403 : :
1404 : 0 : void AnimationsExporterImpl::exportCommand( const Reference< XCommand >& xCommand )
1405 : : {
1406 [ # # ]: 0 : if( xCommand.is() ) try
1407 : : {
1408 : 0 : OUStringBuffer sTmp;
1409 [ # # ][ # # ]: 0 : Any aTemp( xCommand->getTarget() );
1410 [ # # ]: 0 : if( aTemp.hasValue() )
1411 : : {
1412 [ # # ]: 0 : convertTarget( sTmp, aTemp );
1413 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_SMIL, XML_TARGETELEMENT, sTmp.makeStringAndClear() );
1414 : : }
1415 : :
1416 [ # # ][ # # ]: 0 : sal_Int16 nCommand = xCommand->getCommand();
1417 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp, (sal_uInt16)nCommand, getAnimationsEnumMap(Animations_EnumMap_Command) );
1418 [ # # ][ # # ]: 0 : mrExport.AddAttribute( XML_NAMESPACE_ANIMATION, XML_COMMAND, sTmp.makeStringAndClear() );
1419 : :
1420 : : // todo virtual ::com::sun::star::uno::Any SAL_CALL getParameter() throw (::com::sun::star::uno::RuntimeException) = 0;
1421 : :
1422 [ # # ][ # # ]: 0 : SvXMLElementExport aElement( mrExport, XML_NAMESPACE_ANIMATION, XML_COMMAND, sal_True, sal_True );
[ # # ]
1423 : :
1424 : : }
1425 : 0 : catch (const Exception&)
1426 : : {
1427 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::exportCommand(), exception caught!" );
1428 : : }
1429 : 0 : }
1430 : :
1431 : 0 : Reference< XInterface > AnimationsExporterImpl::getParagraphTarget( const ParagraphTarget* pTarget ) const
1432 : : {
1433 [ # # ]: 0 : if( pTarget ) try
1434 : : {
1435 [ # # ]: 0 : Reference< XEnumerationAccess > xParaEnumAccess( pTarget->Shape, UNO_QUERY_THROW );
1436 : :
1437 [ # # ][ # # ]: 0 : Reference< XEnumeration > xEnumeration( xParaEnumAccess->createEnumeration(), UNO_QUERY_THROW );
[ # # ]
1438 : 0 : sal_Int32 nParagraph = pTarget->Paragraph;
1439 : :
1440 [ # # ][ # # ]: 0 : while( xEnumeration->hasMoreElements() )
[ # # ]
1441 : : {
1442 [ # # ][ # # ]: 0 : Reference< XInterface > xRef( xEnumeration->nextElement(), UNO_QUERY );
[ # # ]
1443 [ # # ]: 0 : if( nParagraph-- == 0 )
1444 : 0 : return xRef;
1445 [ # # ][ # # ]: 0 : }
[ # # ][ # # ]
1446 : : }
1447 [ # # ]: 0 : catch (const RuntimeException&)
1448 : : {
1449 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::getParagraphTarget(), RuntimeException caught!" );
1450 : : }
1451 : :
1452 : 0 : Reference< XInterface > xRef;
1453 : 0 : return xRef;
1454 : : }
1455 : :
1456 : 0 : void AnimationsExporterImpl::convertPath( OUStringBuffer& sTmp, const Any& rPath ) const
1457 : : {
1458 : 0 : OUString aStr;
1459 : 0 : rPath >>= aStr;
1460 : :
1461 [ # # ][ # # ]: 0 : sTmp = aStr;
1462 : 0 : }
1463 : :
1464 : 0 : void AnimationsExporterImpl::convertValue( XMLTokenEnum eAttributeName, OUStringBuffer& sTmp, const Any& rValue ) const
1465 : : {
1466 [ # # ]: 0 : if( !rValue.hasValue() )
1467 : 0 : return;
1468 : :
1469 [ # # ]: 0 : if( rValue.getValueType() == ::getCppuType((const ValuePair*)0) )
1470 : : {
1471 : 0 : const ValuePair* pValuePair = static_cast< const ValuePair* >( rValue.getValue() );
1472 : 0 : OUStringBuffer sTmp2;
1473 [ # # ]: 0 : convertValue( eAttributeName, sTmp, pValuePair->First );
1474 [ # # ]: 0 : sTmp.append( (sal_Unicode)',' );
1475 [ # # ]: 0 : convertValue( eAttributeName, sTmp2, pValuePair->Second );
1476 [ # # ][ # # ]: 0 : sTmp.append( sTmp2.makeStringAndClear() );
1477 : : }
1478 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((Sequence<Any>*)0) )
1479 : : {
1480 : 0 : const Sequence<Any>* pSequence = static_cast< const Sequence<Any>* >( rValue.getValue() );
1481 : 0 : const sal_Int32 nLength = pSequence->getLength();
1482 : : sal_Int32 nElement;
1483 : 0 : const Any* pAny = pSequence->getConstArray();
1484 : :
1485 : 0 : OUStringBuffer sTmp2;
1486 : :
1487 [ # # ]: 0 : for( nElement = 0; nElement < nLength; nElement++, pAny++ )
1488 : : {
1489 [ # # ]: 0 : if( sTmp.getLength() )
1490 [ # # ]: 0 : sTmp.append( (sal_Unicode)';' );
1491 [ # # ]: 0 : convertValue( eAttributeName, sTmp2, *pAny );
1492 [ # # ][ # # ]: 0 : sTmp.append( sTmp2.makeStringAndClear() );
1493 : 0 : }
1494 : : }
1495 : : else
1496 : : {
1497 : 0 : OUString aString;
1498 : : sal_Int32 nType;
1499 : :
1500 [ # # # # : 0 : switch( eAttributeName )
# # # # #
# # # # ]
1501 : : {
1502 : : case XML_X:
1503 : : case XML_Y:
1504 : : case XML_WIDTH:
1505 : : case XML_HEIGHT:
1506 : : case XML_ANIMATETRANSFORM:
1507 : : case XML_ANIMATEMOTION:
1508 : : {
1509 [ # # ]: 0 : if( rValue >>= aString )
1510 : : {
1511 [ # # ]: 0 : sTmp.append( aString );
1512 : : }
1513 [ # # ][ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((const double*)0) )
1514 : : {
1515 [ # # ]: 0 : sTmp.append( *(static_cast< const double* >( rValue.getValue() )) );
1516 : : }
1517 : : else
1518 : : {
1519 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::convertValue(), invalid value type!" );
1520 : : }
1521 : : return;
1522 : : }
1523 : :
1524 : : case XML_SKEWX:
1525 : 0 : case XML_ROTATE: nType = XML_TYPE_DOUBLE; break;
1526 : 0 : case XML_TEXT_ROTATION_ANGLE: nType = XML_TYPE_NUMBER16; break;
1527 : : case XML_FILL_COLOR:
1528 : : case XML_STROKE_COLOR:
1529 : : case XML_DIM:
1530 : 0 : case XML_COLOR: nType = XML_TYPE_COLOR; break;
1531 : 0 : case XML_FILL: nType = XML_SD_TYPE_FILLSTYLE; break;
1532 : 0 : case XML_STROKE: nType = XML_SD_TYPE_STROKE; break;
1533 : 0 : case XML_FONT_WEIGHT: nType = XML_TYPE_TEXT_WEIGHT; break;
1534 : 0 : case XML_FONT_STYLE: nType = XML_TYPE_TEXT_POSTURE; break;
1535 : 0 : case XML_TEXT_UNDERLINE: nType = XML_TYPE_TEXT_UNDERLINE_STYLE; break;
1536 : 0 : case XML_FONT_SIZE: nType = XML_TYPE_DOUBLE_PERCENT; break;
1537 : 0 : case XML_VISIBILITY: nType = XML_SD_TYPE_PRESPAGE_VISIBILITY; break;
1538 : : case XML_OPACITY:
1539 : 0 : case XML_TRANSITIONFILTER: nType = XML_TYPE_DOUBLE; break;
1540 : : default:
1541 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::convertValue(), invalid AttributeName!" );
1542 : 0 : nType = XML_TYPE_STRING;
1543 : : }
1544 : :
1545 : : //const XMLPropertyHandler* pHandler = static_cast<SdXMLExport*>(&mrExport)->GetSdPropHdlFactory()->GetPropertyHandler( nType );
1546 [ # # ]: 0 : const XMLPropertyHandler* pHandler = mpSdPropHdlFactory->GetPropertyHandler( nType );
1547 [ # # ]: 0 : if( pHandler )
1548 : : {
1549 [ # # ]: 0 : pHandler->exportXML( aString, rValue, mrExport.GetMM100UnitConverter() );
1550 [ # # ]: 0 : sTmp.append( aString );
1551 [ # # ]: 0 : }
1552 : : }
1553 : : }
1554 : :
1555 : 0 : void AnimationsExporterImpl::convertTiming( OUStringBuffer& sTmp, const Any& rValue ) const
1556 : : {
1557 [ # # ]: 0 : if( !rValue.hasValue() )
1558 : 0 : return;
1559 : :
1560 [ # # ]: 0 : if( rValue.getValueType() == ::getCppuType((Sequence<Any>*)0) )
1561 : : {
1562 : 0 : const Sequence<Any>* pSequence = static_cast< const Sequence<Any>* >( rValue.getValue() );
1563 : 0 : const sal_Int32 nLength = pSequence->getLength();
1564 : : sal_Int32 nElement;
1565 : 0 : const Any* pAny = pSequence->getConstArray();
1566 : :
1567 : 0 : OUStringBuffer sTmp2;
1568 : :
1569 [ # # ]: 0 : for( nElement = 0; nElement < nLength; nElement++, pAny++ )
1570 : : {
1571 [ # # ]: 0 : if( sTmp.getLength() )
1572 [ # # ]: 0 : sTmp.append( (sal_Unicode)';' );
1573 [ # # ]: 0 : convertTiming( sTmp2, *pAny );
1574 [ # # ][ # # ]: 0 : sTmp.append( sTmp2.makeStringAndClear() );
1575 : 0 : }
1576 : : }
1577 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((const double*)0) )
1578 : : {
1579 : 0 : sTmp.append( *(static_cast< const double* >( rValue.getValue() )) );
1580 : 0 : sTmp.append( sal_Unicode('s'));
1581 : : }
1582 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((const Timing*)0) )
1583 : : {
1584 : 0 : const Timing* pTiming = static_cast< const Timing* >( rValue.getValue() );
1585 [ # # ]: 0 : sTmp.append( GetXMLToken( (*pTiming == Timing_MEDIA) ? XML_MEDIA : XML_INDEFINITE ) );
1586 : : }
1587 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((const Event*)0) )
1588 : : {
1589 : 0 : OUStringBuffer sTmp2;
1590 : :
1591 : 0 : const Event* pEvent = static_cast< const Event* >( rValue.getValue() );
1592 : :
1593 [ # # ]: 0 : if( pEvent->Trigger != EventTrigger::NONE )
1594 : : {
1595 [ # # ]: 0 : if( pEvent->Source.hasValue() )
1596 : : {
1597 [ # # ]: 0 : convertSource( sTmp, pEvent->Source );
1598 [ # # ]: 0 : sTmp.append( (sal_Unicode)'.' );
1599 : : }
1600 : :
1601 [ # # ]: 0 : SvXMLUnitConverter::convertEnum( sTmp2, (sal_uInt16)pEvent->Trigger, getAnimationsEnumMap(Animations_EnumMap_EventTrigger) );
1602 : :
1603 [ # # ][ # # ]: 0 : sTmp.append( sTmp2.makeStringAndClear() );
1604 : : }
1605 : :
1606 [ # # ]: 0 : if( pEvent->Offset.hasValue() )
1607 : : {
1608 [ # # ]: 0 : convertTiming( sTmp2, pEvent->Offset );
1609 : :
1610 [ # # ]: 0 : if( sTmp.getLength() )
1611 [ # # ]: 0 : sTmp.append( (sal_Unicode)'+' );
1612 : :
1613 [ # # ][ # # ]: 0 : sTmp.append( sTmp2.makeStringAndClear() );
1614 : 0 : }
1615 : : }
1616 : : else
1617 : : {
1618 : : OSL_FAIL( "xmloff::AnimationsExporterImpl::convertTiming(), invalid value type!" );
1619 : : }
1620 : : }
1621 : :
1622 : 0 : void AnimationsExporterImpl::convertSource( OUStringBuffer& sTmp, const Any& rSource ) const
1623 : : {
1624 : 0 : convertTarget( sTmp, rSource );
1625 : 0 : }
1626 : :
1627 : 0 : void AnimationsExporterImpl::convertTarget( OUStringBuffer& sTmp, const Any& rTarget ) const
1628 : : {
1629 [ # # ]: 0 : if( !rTarget.hasValue() )
1630 : 0 : return;
1631 : :
1632 : 0 : Reference< XInterface > xRef;
1633 : :
1634 [ # # ]: 0 : if( rTarget.getValueTypeClass() == ::com::sun::star::uno::TypeClass_INTERFACE )
1635 : : {
1636 [ # # ]: 0 : rTarget >>= xRef;
1637 : : }
1638 [ # # ][ # # ]: 0 : else if( rTarget.getValueType() == ::getCppuType((const ParagraphTarget*)0) )
1639 : : {
1640 [ # # ][ # # ]: 0 : xRef = getParagraphTarget( static_cast< const ParagraphTarget* >( rTarget.getValue() ) );
1641 : : }
1642 : :
1643 : : DBG_ASSERT( xRef.is(), "xmloff::AnimationsExporterImpl::convertTarget(), invalid target type!" );
1644 [ # # ]: 0 : if( xRef.is() )
1645 : : {
1646 [ # # ][ # # ]: 0 : const OUString& rIdentifier = mrExport.getInterfaceToIdentifierMapper().getIdentifier(xRef);
1647 [ # # ]: 0 : if( !rIdentifier.isEmpty() )
1648 [ # # ]: 0 : sTmp.append( rIdentifier );
1649 : 0 : }
1650 : : }
1651 : :
1652 : 4 : void AnimationsExporterImpl::prepareValue( const Any& rValue )
1653 : : {
1654 [ + - ]: 4 : if( !rValue.hasValue() )
1655 : 4 : return;
1656 : :
1657 [ # # ]: 0 : if( rValue.getValueType() == ::getCppuType((const ValuePair*)0) )
1658 : : {
1659 : 0 : const ValuePair* pValuePair = static_cast< const ValuePair* >( rValue.getValue() );
1660 : 0 : prepareValue( pValuePair->First );
1661 : 0 : prepareValue( pValuePair->Second );
1662 : : }
1663 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((Sequence<Any>*)0) )
1664 : : {
1665 : 0 : const Sequence<Any>* pSequence = static_cast< const Sequence<Any>* >( rValue.getValue() );
1666 : 0 : const sal_Int32 nLength = pSequence->getLength();
1667 : : sal_Int32 nElement;
1668 : 0 : const Any* pAny = pSequence->getConstArray();
1669 : :
1670 [ # # ]: 0 : for( nElement = 0; nElement < nLength; nElement++, pAny++ )
1671 : 0 : prepareValue( *pAny );
1672 : : }
1673 [ # # ]: 0 : else if( rValue.getValueTypeClass() == ::com::sun::star::uno::TypeClass_INTERFACE )
1674 : : {
1675 [ # # ]: 0 : Reference< XInterface> xRef( rValue, UNO_QUERY );
1676 [ # # ]: 0 : if( xRef.is() )
1677 [ # # ][ # # ]: 0 : mrExport.getInterfaceToIdentifierMapper().registerReference( xRef );
1678 : : }
1679 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((const ParagraphTarget*)0) )
1680 : : {
1681 [ # # ]: 0 : Reference< XInterface> xRef( getParagraphTarget( static_cast< const ParagraphTarget* >( rValue.getValue() ) ) );
1682 [ # # ]: 0 : if( xRef.is() )
1683 [ # # ][ # # ]: 0 : mrExport.getInterfaceToIdentifierMapper().registerReference( xRef );
1684 : : }
1685 [ # # ]: 0 : else if( rValue.getValueType() == ::getCppuType((const Event*)0) )
1686 : : {
1687 : 0 : const Event* pEvent = static_cast< const Event* >( rValue.getValue() );
1688 : 0 : prepareValue( pEvent->Source );
1689 : : }
1690 : : }
1691 : :
1692 : 2 : AnimationsExporter::AnimationsExporter( SvXMLExport& rExport, const Reference< XPropertySet >& xPageProps )
1693 : : {
1694 [ + - ][ + - ]: 2 : mpImpl = new AnimationsExporterImpl( rExport, xPageProps );
1695 : 2 : }
1696 : :
1697 : 2 : AnimationsExporter::~AnimationsExporter()
1698 : : {
1699 [ + - ][ + - ]: 2 : delete mpImpl;
1700 [ - + ]: 4 : }
1701 : :
1702 : 2 : void AnimationsExporter::prepare( Reference< XAnimationNode > xRootNode )
1703 : : {
1704 : : try
1705 : : {
1706 [ + - ]: 2 : if( xRootNode.is() )
1707 : : {
1708 [ + - ]: 2 : mpImpl->prepareTransitionNode();
1709 [ + - ]: 2 : mpImpl->prepareNode( xRootNode );
1710 : : }
1711 : : }
1712 : 0 : catch (const RuntimeException&)
1713 : : {
1714 : : OSL_FAIL( "xmloff::AnimationsExporter::prepare(), exception caught" );
1715 : : }
1716 [ # # ]: 2 : }
1717 : :
1718 : 2 : void AnimationsExporter::exportAnimations( Reference< XAnimationNode > xRootNode )
1719 : : {
1720 : : try
1721 : : {
1722 [ + - ]: 2 : if( xRootNode.is() )
1723 : : {
1724 : 2 : bool bHasEffects = mpImpl->mbHasTransition;
1725 : :
1726 [ + - ]: 2 : if( !bHasEffects )
1727 : : {
1728 : : // first check if there are no animations
1729 [ + - ]: 2 : Reference< XEnumerationAccess > xEnumerationAccess( xRootNode, UNO_QUERY_THROW );
1730 [ + - ][ + - ]: 2 : Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY_THROW );
[ + - ]
1731 [ + - ][ - + ]: 2 : if( xEnumeration->hasMoreElements() )
[ + - ]
1732 : : {
1733 : : // first child node may be an empty main sequence, check this
1734 [ # # ][ # # ]: 0 : Reference< XAnimationNode > xMainNode( xEnumeration->nextElement(), UNO_QUERY_THROW );
[ # # ]
1735 [ # # ]: 0 : Reference< XEnumerationAccess > xMainEnumerationAccess( xMainNode, UNO_QUERY_THROW );
1736 [ # # ][ # # ]: 0 : Reference< XEnumeration > xMainEnumeration( xMainEnumerationAccess->createEnumeration(), UNO_QUERY_THROW );
[ # # ]
1737 : :
1738 : : // only export if the main sequence is not empty or if there are additional
1739 : : // trigger sequences
1740 [ # # ][ # # ]: 0 : bHasEffects = xMainEnumeration->hasMoreElements() || xEnumeration->hasMoreElements();
[ # # ][ # # ]
[ # # ][ # # ]
1741 [ # # ]: 2 : }
1742 : : }
1743 : :
1744 [ - + ]: 2 : if( bHasEffects )
1745 [ # # ]: 0 : mpImpl->exportNode( xRootNode );
1746 : : }
1747 : : }
1748 : 0 : catch (const RuntimeException&)
1749 : : {
1750 : : OSL_FAIL( "xmloff::AnimationsExporter::exportAnimations(), exception caught" );
1751 : : }
1752 : 2 : }
1753 : :
1754 : : }
1755 : :
1756 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|