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 <xmloff/unointerfacetouniqueidentifiermapper.hxx>
31 : : #include <com/sun/star/lang/XServiceInfo.hpp>
32 : : #include <com/sun/star/presentation/AnimationEffect.hpp>
33 : : #include <com/sun/star/presentation/AnimationSpeed.hpp>
34 : : #include <com/sun/star/beans/XPropertySet.hpp>
35 : : #include <com/sun/star/xml/sax/XAttributeList.hpp>
36 : :
37 : : #include <sax/tools/converter.hxx>
38 : :
39 : : #include <list>
40 : : #include <comphelper/extract.hxx>
41 : : #include <xmloff/xmltoken.hxx>
42 : : #include <xmloff/xmlimp.hxx>
43 : : #include "xmloff/xmlnmspe.hxx"
44 : : #include <xmloff/xmluconv.hxx>
45 : : #include <xmloff/nmspmap.hxx>
46 : : #include "anim.hxx"
47 : : #include "animimp.hxx"
48 : :
49 : : using ::rtl::OUString;
50 : : using ::rtl::OUStringBuffer;
51 : :
52 : : using namespace ::std;
53 : : using namespace ::cppu;
54 : : using namespace ::com::sun::star;
55 : : using namespace ::com::sun::star::xml;
56 : : using namespace ::com::sun::star::xml::sax;
57 : : using namespace ::com::sun::star::uno;
58 : : using namespace ::com::sun::star::drawing;
59 : : using namespace ::com::sun::star::beans;
60 : : using namespace ::com::sun::star::lang;
61 : : using namespace ::com::sun::star::presentation;
62 : : using namespace ::xmloff::token;
63 : :
64 : : SvXMLEnumMapEntry aXML_AnimationEffect_EnumMap[] =
65 : : {
66 : : { XML_NONE, EK_none },
67 : : { XML_FADE, EK_fade },
68 : : { XML_MOVE, EK_move },
69 : : { XML_STRIPES, EK_stripes },
70 : : { XML_OPEN, EK_open },
71 : : { XML_CLOSE, EK_close },
72 : : { XML_DISSOLVE, EK_dissolve },
73 : : { XML_WAVYLINE, EK_wavyline },
74 : : { XML_RANDOM, EK_random },
75 : : { XML_LINES, EK_lines },
76 : : { XML_LASER, EK_laser },
77 : : { XML_APPEAR, EK_appear },
78 : : { XML_HIDE, EK_hide },
79 : : { XML_MOVE_SHORT, EK_move_short },
80 : : { XML_CHECKERBOARD, EK_checkerboard },
81 : : { XML_ROTATE, EK_rotate },
82 : : { XML_STRETCH, EK_stretch },
83 : : { XML_TOKEN_INVALID, 0 }
84 : : };
85 : :
86 : : SvXMLEnumMapEntry aXML_AnimationDirection_EnumMap[] =
87 : : {
88 : : { XML_NONE, ED_none },
89 : : { XML_FROM_LEFT, ED_from_left },
90 : : { XML_FROM_TOP, ED_from_top },
91 : : { XML_FROM_RIGHT, ED_from_right },
92 : : { XML_FROM_BOTTOM, ED_from_bottom },
93 : : { XML_FROM_CENTER, ED_from_center },
94 : : { XML_FROM_UPPER_LEFT, ED_from_upperleft },
95 : : { XML_FROM_UPPER_RIGHT, ED_from_upperright },
96 : : { XML_FROM_LOWER_LEFT, ED_from_lowerleft },
97 : : { XML_FROM_LOWER_RIGHT, ED_from_lowerright },
98 : : { XML_TO_LEFT, ED_to_left },
99 : : { XML_TO_TOP, ED_to_top },
100 : : { XML_TO_RIGHT, ED_to_right },
101 : : { XML_TO_BOTTOM, ED_to_bottom },
102 : : { XML_TO_UPPER_LEFT, ED_to_upperleft },
103 : : { XML_TO_UPPER_RIGHT, ED_to_upperright },
104 : : { XML_TO_LOWER_RIGHT, ED_to_lowerright },
105 : : { XML_TO_LOWER_LEFT, ED_to_lowerleft },
106 : : { XML_PATH, ED_path },
107 : : { XML_SPIRAL_INWARD_LEFT, ED_spiral_inward_left },
108 : : { XML_SPIRAL_INWARD_RIGHT,ED_spiral_inward_right },
109 : : { XML_SPIRAL_OUTWARD_LEFT, ED_spiral_outward_left },
110 : : { XML_SPIRAL_OUTWARD_RIGHT, ED_spiral_outward_right },
111 : : { XML_VERTICAL, ED_vertical },
112 : : { XML_HORIZONTAL, ED_horizontal },
113 : : { XML_TO_CENTER, ED_to_center },
114 : : { XML_CLOCKWISE, ED_clockwise },
115 : : { XML_COUNTER_CLOCKWISE,ED_cclockwise },
116 : : { XML_TOKEN_INVALID, 0 }
117 : : };
118 : :
119 : : SvXMLEnumMapEntry aXML_AnimationSpeed_EnumMap[] =
120 : : {
121 : : { XML_SLOW, AnimationSpeed_SLOW },
122 : : { XML_MEDIUM, AnimationSpeed_MEDIUM },
123 : : { XML_FAST, AnimationSpeed_FAST },
124 : : { XML_TOKEN_INVALID, 0 }
125 : : };
126 : :
127 : 0 : AnimationEffect ImplSdXMLgetEffect( XMLEffect eKind, XMLEffectDirection eDirection, sal_Int16 nStartScale, sal_Bool /*bIn*/ )
128 : : {
129 [ # # # # : 0 : switch( eKind )
# # # # #
# # # # #
# # # ]
130 : : {
131 : : case EK_fade:
132 [ # # # # : 0 : switch( eDirection )
# # # # #
# # # # #
# # # ]
133 : : {
134 : 0 : case ED_from_left: return AnimationEffect_FADE_FROM_LEFT;
135 : 0 : case ED_from_top: return AnimationEffect_FADE_FROM_TOP;
136 : 0 : case ED_from_right: return AnimationEffect_FADE_FROM_RIGHT;
137 : 0 : case ED_from_bottom: return AnimationEffect_FADE_FROM_BOTTOM;
138 : 0 : case ED_from_center: return AnimationEffect_FADE_FROM_CENTER;
139 : 0 : case ED_from_upperleft: return AnimationEffect_FADE_FROM_UPPERLEFT;
140 : 0 : case ED_from_upperright: return AnimationEffect_FADE_FROM_UPPERRIGHT;
141 : 0 : case ED_from_lowerleft: return AnimationEffect_FADE_FROM_LOWERLEFT;
142 : 0 : case ED_from_lowerright: return AnimationEffect_FADE_FROM_LOWERRIGHT;
143 : 0 : case ED_to_center: return AnimationEffect_FADE_TO_CENTER;
144 : 0 : case ED_clockwise: return AnimationEffect_CLOCKWISE;
145 : 0 : case ED_cclockwise: return AnimationEffect_COUNTERCLOCKWISE;
146 : 0 : case ED_spiral_inward_left: return AnimationEffect_SPIRALIN_LEFT;
147 : 0 : case ED_spiral_inward_right:return AnimationEffect_SPIRALIN_RIGHT;
148 : 0 : case ED_spiral_outward_left:return AnimationEffect_SPIRALOUT_LEFT;
149 : 0 : case ED_spiral_outward_right:return AnimationEffect_SPIRALOUT_RIGHT;
150 : 0 : default: return AnimationEffect_FADE_FROM_LEFT;
151 : : }
152 : : case EK_move:
153 [ # # ]: 0 : if( nStartScale == 200 )
154 : : {
155 : 0 : return AnimationEffect_ZOOM_OUT_SMALL;
156 : : }
157 [ # # ]: 0 : else if( nStartScale == 50 )
158 : : {
159 : 0 : return AnimationEffect_ZOOM_IN_SMALL;
160 : : }
161 [ # # ]: 0 : else if( nStartScale < 100 )
162 : : {
163 [ # # # # : 0 : switch( eDirection )
# # # # #
# # # # #
# # # #
# ]
164 : : {
165 : 0 : case ED_from_left: return AnimationEffect_ZOOM_IN_FROM_LEFT;
166 : 0 : case ED_from_top: return AnimationEffect_ZOOM_IN_FROM_TOP;
167 : 0 : case ED_from_right: return AnimationEffect_ZOOM_IN_FROM_RIGHT;
168 : 0 : case ED_from_bottom: return AnimationEffect_ZOOM_IN_FROM_BOTTOM;
169 : 0 : case ED_from_upperleft: return AnimationEffect_ZOOM_IN_FROM_UPPERLEFT;
170 : 0 : case ED_from_upperright: return AnimationEffect_ZOOM_IN_FROM_UPPERRIGHT;
171 : 0 : case ED_from_lowerleft: return AnimationEffect_ZOOM_IN_FROM_LOWERLEFT;
172 : 0 : case ED_from_lowerright: return AnimationEffect_ZOOM_IN_FROM_LOWERRIGHT;
173 : 0 : case ED_from_center: return AnimationEffect_ZOOM_IN_FROM_CENTER;
174 : 0 : case ED_spiral_inward_left: return AnimationEffect_ZOOM_IN_SPIRAL;
175 : 0 : case ED_to_left: return AnimationEffect_MOVE_TO_LEFT;
176 : 0 : case ED_to_top: return AnimationEffect_MOVE_TO_TOP;
177 : 0 : case ED_to_right: return AnimationEffect_MOVE_TO_RIGHT;
178 : 0 : case ED_to_bottom: return AnimationEffect_MOVE_TO_BOTTOM;
179 : 0 : case ED_to_upperleft: return AnimationEffect_MOVE_TO_UPPERLEFT;
180 : 0 : case ED_to_upperright: return AnimationEffect_MOVE_TO_UPPERRIGHT;
181 : 0 : case ED_to_lowerright: return AnimationEffect_MOVE_TO_LOWERRIGHT;
182 : 0 : case ED_to_lowerleft: return AnimationEffect_MOVE_TO_LOWERLEFT;
183 : 0 : default: return AnimationEffect_ZOOM_IN;
184 : : }
185 : : }
186 [ # # ]: 0 : else if( nStartScale > 100 )
187 : : {
188 [ # # # # : 0 : switch( eDirection )
# # # # #
# # ]
189 : : {
190 : 0 : case ED_from_left: return AnimationEffect_ZOOM_OUT_FROM_LEFT;
191 : 0 : case ED_from_top: return AnimationEffect_ZOOM_OUT_FROM_TOP;
192 : 0 : case ED_from_right: return AnimationEffect_ZOOM_OUT_FROM_RIGHT;
193 : 0 : case ED_from_bottom: return AnimationEffect_ZOOM_OUT_FROM_BOTTOM;
194 : 0 : case ED_from_upperleft: return AnimationEffect_ZOOM_OUT_FROM_UPPERLEFT;
195 : 0 : case ED_from_upperright: return AnimationEffect_ZOOM_OUT_FROM_UPPERRIGHT;
196 : 0 : case ED_from_lowerleft: return AnimationEffect_ZOOM_OUT_FROM_LOWERLEFT;
197 : 0 : case ED_from_lowerright: return AnimationEffect_ZOOM_OUT_FROM_LOWERRIGHT;
198 : 0 : case ED_from_center: return AnimationEffect_ZOOM_OUT_FROM_CENTER;
199 : 0 : case ED_spiral_inward_left: return AnimationEffect_ZOOM_OUT_SPIRAL;
200 : 0 : default: return AnimationEffect_ZOOM_OUT;
201 : : }
202 : : }
203 : : else
204 : : {
205 [ # # # # : 0 : switch( eDirection )
# # # # #
# # # # #
# # # ]
206 : : {
207 : 0 : case ED_from_left: return AnimationEffect_MOVE_FROM_LEFT;
208 : 0 : case ED_from_top: return AnimationEffect_MOVE_FROM_TOP;
209 : 0 : case ED_from_right: return AnimationEffect_MOVE_FROM_RIGHT;
210 : 0 : case ED_from_bottom: return AnimationEffect_MOVE_FROM_BOTTOM;
211 : 0 : case ED_from_upperleft: return AnimationEffect_MOVE_FROM_UPPERLEFT;
212 : 0 : case ED_from_upperright: return AnimationEffect_MOVE_FROM_UPPERRIGHT;
213 : 0 : case ED_from_lowerleft: return AnimationEffect_MOVE_FROM_LOWERLEFT;
214 : 0 : case ED_from_lowerright: return AnimationEffect_MOVE_FROM_LOWERRIGHT;
215 : 0 : case ED_path: return AnimationEffect_PATH;
216 : 0 : case ED_to_top: return AnimationEffect_MOVE_TO_TOP;
217 : 0 : case ED_to_right: return AnimationEffect_MOVE_TO_RIGHT;
218 : 0 : case ED_to_bottom: return AnimationEffect_MOVE_TO_BOTTOM;
219 : 0 : case ED_to_upperleft: return AnimationEffect_MOVE_TO_UPPERLEFT;
220 : 0 : case ED_to_upperright: return AnimationEffect_MOVE_TO_UPPERRIGHT;
221 : 0 : case ED_to_lowerright: return AnimationEffect_MOVE_TO_LOWERRIGHT;
222 : 0 : case ED_to_lowerleft: return AnimationEffect_MOVE_TO_LOWERLEFT;
223 : : default:
224 : 0 : break;
225 : : }
226 : : }
227 : 0 : return AnimationEffect_MOVE_FROM_LEFT;
228 : : case EK_stripes:
229 [ # # ]: 0 : if( eDirection == ED_vertical )
230 : 0 : return AnimationEffect_VERTICAL_STRIPES;
231 : : else
232 : 0 : return AnimationEffect_HORIZONTAL_STRIPES;
233 : : case EK_open:
234 [ # # ]: 0 : if( eDirection == ED_vertical )
235 : 0 : return AnimationEffect_OPEN_VERTICAL;
236 : : else
237 : 0 : return AnimationEffect_OPEN_HORIZONTAL;
238 : : case EK_close:
239 [ # # ]: 0 : if( eDirection == ED_vertical )
240 : 0 : return AnimationEffect_CLOSE_VERTICAL;
241 : : else
242 : 0 : return AnimationEffect_CLOSE_HORIZONTAL;
243 : : case EK_dissolve:
244 : 0 : return AnimationEffect_DISSOLVE;
245 : : case EK_wavyline:
246 [ # # # # : 0 : switch( eDirection )
# ]
247 : : {
248 : 0 : case ED_from_left: return AnimationEffect_WAVYLINE_FROM_LEFT;
249 : 0 : case ED_from_top: return AnimationEffect_WAVYLINE_FROM_TOP;
250 : 0 : case ED_from_right: return AnimationEffect_WAVYLINE_FROM_RIGHT;
251 : 0 : case ED_from_bottom: return AnimationEffect_WAVYLINE_FROM_BOTTOM;
252 : 0 : default: return AnimationEffect_WAVYLINE_FROM_LEFT;
253 : : }
254 : : case EK_random:
255 : 0 : return AnimationEffect_RANDOM;
256 : : case EK_lines:
257 [ # # ]: 0 : if( eDirection == ED_vertical )
258 : 0 : return AnimationEffect_VERTICAL_LINES;
259 : : else
260 : 0 : return AnimationEffect_HORIZONTAL_LINES;
261 : : case EK_laser:
262 [ # # # # : 0 : switch( eDirection )
# # # #
# ]
263 : : {
264 : 0 : case ED_from_left: return AnimationEffect_LASER_FROM_LEFT;
265 : 0 : case ED_from_top: return AnimationEffect_LASER_FROM_TOP;
266 : 0 : case ED_from_right: return AnimationEffect_LASER_FROM_RIGHT;
267 : 0 : case ED_from_bottom: return AnimationEffect_LASER_FROM_BOTTOM;
268 : 0 : case ED_from_upperleft: return AnimationEffect_LASER_FROM_UPPERLEFT;
269 : 0 : case ED_from_upperright: return AnimationEffect_LASER_FROM_UPPERRIGHT;
270 : 0 : case ED_from_lowerleft: return AnimationEffect_LASER_FROM_LOWERLEFT;
271 : 0 : case ED_from_lowerright: return AnimationEffect_LASER_FROM_LOWERRIGHT;
272 : 0 : default: return AnimationEffect_LASER_FROM_LEFT;
273 : : }
274 : : case EK_appear:
275 : 0 : return AnimationEffect_APPEAR;
276 : : case EK_hide:
277 : 0 : return AnimationEffect_HIDE;
278 : : case EK_move_short:
279 [ # # # # : 0 : switch( eDirection )
# # # # #
# # # # #
# # # ]
280 : : {
281 : 0 : case ED_from_left: return AnimationEffect_MOVE_SHORT_FROM_LEFT;
282 : 0 : case ED_from_top: return AnimationEffect_MOVE_SHORT_FROM_TOP;
283 : 0 : case ED_from_right: return AnimationEffect_MOVE_SHORT_FROM_RIGHT;
284 : 0 : case ED_from_bottom: return AnimationEffect_MOVE_SHORT_FROM_BOTTOM;
285 : 0 : case ED_from_upperleft: return AnimationEffect_MOVE_SHORT_FROM_UPPERLEFT;
286 : 0 : case ED_from_upperright: return AnimationEffect_MOVE_SHORT_FROM_UPPERRIGHT;
287 : 0 : case ED_from_lowerleft: return AnimationEffect_MOVE_SHORT_FROM_LOWERLEFT;
288 : 0 : case ED_from_lowerright: return AnimationEffect_MOVE_SHORT_FROM_LOWERRIGHT;
289 : 0 : case ED_to_left: return AnimationEffect_MOVE_SHORT_TO_LEFT;
290 : 0 : case ED_to_upperleft: return AnimationEffect_MOVE_SHORT_TO_UPPERLEFT;
291 : 0 : case ED_to_top: return AnimationEffect_MOVE_SHORT_TO_TOP;
292 : 0 : case ED_to_upperright: return AnimationEffect_MOVE_SHORT_TO_UPPERRIGHT;
293 : 0 : case ED_to_right: return AnimationEffect_MOVE_SHORT_TO_RIGHT;
294 : 0 : case ED_to_lowerright: return AnimationEffect_MOVE_SHORT_TO_LOWERRIGHT;
295 : 0 : case ED_to_bottom: return AnimationEffect_MOVE_SHORT_TO_BOTTOM;
296 : 0 : case ED_to_lowerleft: return AnimationEffect_MOVE_SHORT_TO_LOWERLEFT;
297 : 0 : default: return AnimationEffect_MOVE_SHORT_FROM_LEFT;
298 : : }
299 : : case EK_checkerboard:
300 [ # # ]: 0 : if( eDirection == ED_vertical )
301 : 0 : return AnimationEffect_VERTICAL_CHECKERBOARD;
302 : : else
303 : 0 : return AnimationEffect_HORIZONTAL_CHECKERBOARD;
304 : : case EK_rotate:
305 [ # # ]: 0 : if( eDirection == ED_vertical )
306 : 0 : return AnimationEffect_VERTICAL_ROTATE;
307 : : else
308 : 0 : return AnimationEffect_HORIZONTAL_ROTATE;
309 : : case EK_stretch:
310 [ # # # # : 0 : switch( eDirection )
# # # # #
# # ]
311 : : {
312 : 0 : case ED_from_left: return AnimationEffect_STRETCH_FROM_LEFT;
313 : 0 : case ED_from_top: return AnimationEffect_STRETCH_FROM_TOP;
314 : 0 : case ED_from_right: return AnimationEffect_STRETCH_FROM_RIGHT;
315 : 0 : case ED_from_bottom: return AnimationEffect_STRETCH_FROM_BOTTOM;
316 : 0 : case ED_from_upperleft: return AnimationEffect_STRETCH_FROM_UPPERLEFT;
317 : 0 : case ED_from_upperright: return AnimationEffect_STRETCH_FROM_UPPERRIGHT;
318 : 0 : case ED_from_lowerleft: return AnimationEffect_STRETCH_FROM_LOWERLEFT;
319 : 0 : case ED_from_lowerright: return AnimationEffect_STRETCH_FROM_LOWERRIGHT;
320 : 0 : case ED_vertical: return AnimationEffect_VERTICAL_STRETCH;
321 : 0 : case ED_horizontal: return AnimationEffect_HORIZONTAL_STRETCH;
322 : : default:
323 : 0 : break;
324 : : }
325 : 0 : return AnimationEffect_STRETCH_FROM_LEFT;
326 : : default:
327 : 0 : return AnimationEffect_NONE;
328 : : }
329 : : }
330 : :
331 : : ///////////////////////////////////////////////////////////////////////
332 : :
333 : 0 : class AnimImpImpl
334 : : {
335 : : public:
336 : : Reference< XPropertySet > mxLastShape;
337 : : OUString maLastShapeId;
338 : :
339 : : OUString msDimColor;
340 : : OUString msDimHide;
341 : : OUString msDimPrev;
342 : : OUString msEffect;
343 : : OUString msPlayFull;
344 : : OUString msPresOrder;
345 : : OUString msSound;
346 : : OUString msSoundOn;
347 : : OUString msSpeed;
348 : : OUString msTextEffect;
349 : : OUString msPresShapeService;
350 : : OUString msAnimPath;
351 : : OUString msIsAnimation;
352 : :
353 : 0 : AnimImpImpl()
354 : : : msDimColor( RTL_CONSTASCII_USTRINGPARAM( "DimColor" ) ),
355 : : msDimHide( RTL_CONSTASCII_USTRINGPARAM( "DimHide" ) ),
356 : : msDimPrev( RTL_CONSTASCII_USTRINGPARAM( "DimPrevious" ) ),
357 : : msEffect( RTL_CONSTASCII_USTRINGPARAM( "Effect" ) ),
358 : : msPlayFull( RTL_CONSTASCII_USTRINGPARAM( "PlayFull" ) ),
359 : : msPresOrder( RTL_CONSTASCII_USTRINGPARAM( "PresentationOrder" ) ),
360 : : msSound( RTL_CONSTASCII_USTRINGPARAM( "Sound" ) ),
361 : : msSoundOn( RTL_CONSTASCII_USTRINGPARAM( "SoundOn" ) ),
362 : : msSpeed( RTL_CONSTASCII_USTRINGPARAM( "Speed" ) ),
363 : : msTextEffect( RTL_CONSTASCII_USTRINGPARAM( "TextEffect" ) ),
364 : : msPresShapeService( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.Shape" ) ),
365 : : msAnimPath( RTL_CONSTASCII_USTRINGPARAM( "AnimationPath" ) ),
366 [ # # ][ # # ]: 0 : msIsAnimation( RTL_CONSTASCII_USTRINGPARAM( "IsAnimation" ) )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
367 : 0 : {}
368 : : };
369 : :
370 : : ///////////////////////////////////////////////////////////////////////
371 : :
372 : : enum XMLActionKind
373 : : {
374 : : XMLE_SHOW,
375 : : XMLE_HIDE,
376 : : XMLE_DIM,
377 : : XMLE_PLAY
378 : : };
379 : :
380 : : class XMLAnimationsEffectContext : public SvXMLImportContext
381 : : {
382 : : public:
383 : : AnimImpImpl* mpImpl;
384 : :
385 : : XMLActionKind meKind;
386 : : sal_Bool mbTextEffect;
387 : : OUString maShapeId;
388 : :
389 : : XMLEffect meEffect;
390 : : XMLEffectDirection meDirection;
391 : : sal_Int16 mnStartScale;
392 : :
393 : : AnimationSpeed meSpeed;
394 : : sal_Int32 maDimColor;
395 : : OUString maSoundURL;
396 : : sal_Bool mbPlayFull;
397 : : OUString maPathShapeId;
398 : :
399 : : public:
400 : : TYPEINFO();
401 : :
402 : : XMLAnimationsEffectContext( SvXMLImport& rImport,
403 : : sal_uInt16 nPrfx,
404 : : const OUString& rLocalName,
405 : : const Reference< XAttributeList >& xAttrList,
406 : : AnimImpImpl* pImpl);
407 : : virtual ~XMLAnimationsEffectContext();
408 : :
409 : : virtual void EndElement();
410 : :
411 : : virtual SvXMLImportContext * CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName,
412 : : const Reference< XAttributeList >& xAttrList );
413 : : };
414 : :
415 : : class XMLAnimationsSoundContext : public SvXMLImportContext
416 : : {
417 : : XMLAnimationsEffectContext* mpParent;
418 : :
419 : : public:
420 : : TYPEINFO();
421 : :
422 : : XMLAnimationsSoundContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLocalName, const Reference< XAttributeList >& xAttrList, XMLAnimationsEffectContext* pParent );
423 : : virtual ~XMLAnimationsSoundContext();
424 : : };
425 : :
426 [ # # ][ # # ]: 0 : TYPEINIT1( XMLAnimationsSoundContext, SvXMLImportContext );
427 : :
428 : 0 : XMLAnimationsSoundContext::XMLAnimationsSoundContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLocalName, const Reference< XAttributeList >& xAttrList, XMLAnimationsEffectContext* pParent )
429 : 0 : : SvXMLImportContext( rImport, nPrfx, rLocalName ), mpParent( pParent )
430 : : {
431 [ # # ][ # # ]: 0 : if( mpParent && nPrfx == XML_NAMESPACE_PRESENTATION && IsXMLToken( rLocalName, XML_SOUND ) )
[ # # ][ # # ]
[ # # ]
432 : : {
433 [ # # ][ # # ]: 0 : const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
434 [ # # ]: 0 : for(sal_Int16 i=0; i < nAttrCount; i++)
435 : : {
436 [ # # ][ # # ]: 0 : OUString sAttrName = xAttrList->getNameByIndex( i );
437 : 0 : OUString aLocalName;
438 [ # # ]: 0 : sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
439 [ # # ][ # # ]: 0 : OUString sValue = xAttrList->getValueByIndex( i );
440 : :
441 [ # # # ]: 0 : switch( nPrefix )
442 : : {
443 : : case XML_NAMESPACE_XLINK:
444 [ # # ][ # # ]: 0 : if( IsXMLToken( aLocalName, XML_HREF ) )
445 : : {
446 [ # # ]: 0 : mpParent->maSoundURL = rImport.GetAbsoluteReference(sValue);
447 : : }
448 : 0 : break;
449 : : case XML_NAMESPACE_PRESENTATION:
450 [ # # ][ # # ]: 0 : if( IsXMLToken( aLocalName, XML_PLAY_FULL ) )
451 : : {
452 [ # # ]: 0 : mpParent->mbPlayFull = IsXMLToken( sValue, XML_TRUE );
453 : : }
454 : : }
455 : 0 : }
456 : : }
457 : 0 : }
458 : :
459 : 0 : XMLAnimationsSoundContext::~XMLAnimationsSoundContext()
460 : : {
461 [ # # ]: 0 : }
462 : :
463 : :
464 [ # # ][ # # ]: 0 : TYPEINIT1( XMLAnimationsEffectContext, SvXMLImportContext );
465 : :
466 : 0 : XMLAnimationsEffectContext::XMLAnimationsEffectContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLocalName, const Reference< XAttributeList >& xAttrList, AnimImpImpl* pImpl )
467 : : : SvXMLImportContext(rImport, nPrfx, rLocalName),
468 : : mpImpl( pImpl ),
469 : : meKind( XMLE_SHOW ), mbTextEffect( sal_False ),
470 : : meEffect( EK_none ), meDirection( ED_none ), mnStartScale( 100 ),
471 : 0 : meSpeed( AnimationSpeed_MEDIUM ), maDimColor(0), mbPlayFull( sal_False )
472 : : {
473 [ # # ][ # # ]: 0 : if( IsXMLToken( rLocalName, XML_SHOW_SHAPE ) )
474 : : {
475 : 0 : meKind = XMLE_SHOW;
476 : : }
477 [ # # ][ # # ]: 0 : else if( IsXMLToken( rLocalName, XML_SHOW_TEXT ) )
478 : : {
479 : 0 : meKind = XMLE_SHOW;
480 : 0 : mbTextEffect = sal_True;
481 : : }
482 [ # # ][ # # ]: 0 : else if( IsXMLToken( rLocalName, XML_HIDE_SHAPE ) )
483 : : {
484 : 0 : meKind = XMLE_HIDE;
485 : : }
486 [ # # ][ # # ]: 0 : else if( IsXMLToken( rLocalName, XML_HIDE_TEXT ) )
487 : : {
488 : 0 : meKind = XMLE_HIDE;
489 : 0 : mbTextEffect = sal_True;
490 : : }
491 [ # # ][ # # ]: 0 : else if( IsXMLToken( rLocalName, XML_DIM ) )
492 : : {
493 : 0 : meKind = XMLE_DIM;
494 : : }
495 [ # # ][ # # ]: 0 : else if( IsXMLToken( rLocalName, XML_PLAY ) )
496 : : {
497 : 0 : meKind = XMLE_PLAY;
498 : : }
499 : : else
500 : : {
501 : : // unknown action, overread
502 : 0 : return;
503 : : }
504 : :
505 : : // read attributes
506 [ # # ][ # # ]: 0 : const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ # # ]
507 [ # # ]: 0 : for(sal_Int16 i=0; i < nAttrCount; i++)
508 : : {
509 [ # # ][ # # ]: 0 : OUString sAttrName = xAttrList->getNameByIndex( i );
510 : 0 : OUString aLocalName;
511 [ # # ]: 0 : sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
512 [ # # ][ # # ]: 0 : OUString sValue = xAttrList->getValueByIndex( i );
513 : :
514 [ # # # ]: 0 : switch( nPrefix )
515 : : {
516 : : case XML_NAMESPACE_DRAW:
517 [ # # ][ # # ]: 0 : if( IsXMLToken( aLocalName, XML_SHAPE_ID ) )
518 : : {
519 : 0 : maShapeId = sValue;
520 : : }
521 [ # # ][ # # ]: 0 : else if( IsXMLToken( aLocalName, XML_COLOR ) )
522 : : {
523 [ # # ]: 0 : ::sax::Converter::convertColor(maDimColor, sValue);
524 : : }
525 : 0 : break;
526 : :
527 : : case XML_NAMESPACE_PRESENTATION:
528 [ # # ][ # # ]: 0 : if( IsXMLToken( aLocalName, XML_EFFECT ) )
529 : : {
530 : : sal_uInt16 eEnum;
531 [ # # ][ # # ]: 0 : if( SvXMLUnitConverter::convertEnum( eEnum, sValue, aXML_AnimationEffect_EnumMap ) )
532 : 0 : meEffect = (XMLEffect)eEnum;
533 : : }
534 [ # # ][ # # ]: 0 : else if( IsXMLToken(aLocalName, XML_DIRECTION ) )
535 : : {
536 : : sal_uInt16 eEnum;
537 [ # # ][ # # ]: 0 : if( SvXMLUnitConverter::convertEnum( eEnum, sValue, aXML_AnimationDirection_EnumMap ) )
538 : 0 : meDirection = (XMLEffectDirection)eEnum;
539 : : }
540 [ # # ][ # # ]: 0 : else if( IsXMLToken( aLocalName, XML_START_SCALE ) )
541 : : {
542 : : sal_Int32 nScale;
543 [ # # ][ # # ]: 0 : if (::sax::Converter::convertPercent( nScale, sValue ))
544 : 0 : mnStartScale = (sal_Int16)nScale;
545 : : }
546 [ # # ][ # # ]: 0 : else if( IsXMLToken( aLocalName, XML_SPEED ) )
547 : : {
548 : : sal_uInt16 eEnum;
549 [ # # ][ # # ]: 0 : if( SvXMLUnitConverter::convertEnum( eEnum, sValue, aXML_AnimationSpeed_EnumMap ) )
550 : 0 : meSpeed = (AnimationSpeed)eEnum;
551 : : }
552 [ # # ][ # # ]: 0 : else if( IsXMLToken( aLocalName, XML_PATH_ID ) )
553 : : {
554 : 0 : maPathShapeId = sValue;
555 : : }
556 : 0 : break;
557 : : }
558 : 0 : }
559 : : }
560 : :
561 : 0 : XMLAnimationsEffectContext::~XMLAnimationsEffectContext()
562 : : {
563 [ # # ]: 0 : }
564 : :
565 : 0 : SvXMLImportContext * XMLAnimationsEffectContext::CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName, const Reference< XAttributeList>& xAttrList )
566 : : {
567 [ # # ]: 0 : return new XMLAnimationsSoundContext( GetImport(), nPrefix, rLocalName, xAttrList, this );
568 : : }
569 : :
570 : 0 : void XMLAnimationsEffectContext::EndElement()
571 : : {
572 : : // set effect on shape
573 : :
574 : : try
575 : : {
576 [ # # ]: 0 : UniReference< XMLShapeImportHelper > xShapeImport( GetImport().GetShapeImport() );
577 : 0 : Any aAny;
578 : :
579 [ # # ]: 0 : if( !maShapeId.isEmpty() )
580 : : {
581 : 0 : Reference< XPropertySet > xSet;
582 [ # # ]: 0 : if( mpImpl->maLastShapeId != maShapeId )
583 : : {
584 [ # # ][ # # ]: 0 : xSet = Reference< XPropertySet >::query( GetImport().getInterfaceToIdentifierMapper().getReference( maShapeId ) );
[ # # ][ # # ]
585 [ # # ]: 0 : if( xSet.is() )
586 : : {
587 : : // check for presentation shape service
588 : : {
589 [ # # ]: 0 : Reference< XServiceInfo > xServiceInfo( xSet, UNO_QUERY );
590 [ # # ][ # # ]: 0 : if( !xServiceInfo.is() || !xServiceInfo->supportsService( mpImpl->msPresShapeService ) )
[ # # ][ # # ]
[ # # ]
591 [ # # ]: 0 : return;
592 : : }
593 : :
594 : 0 : mpImpl->maLastShapeId = maShapeId;
595 [ # # ]: 0 : mpImpl->mxLastShape = xSet;
596 : : }
597 : : }
598 : : else
599 : : {
600 [ # # ]: 0 : xSet = mpImpl->mxLastShape;
601 : : }
602 : :
603 [ # # ]: 0 : if( xSet.is() )
604 : : {
605 [ # # ]: 0 : if( meKind == XMLE_DIM )
606 : : {
607 [ # # ]: 0 : aAny <<= (sal_Bool)sal_True;
608 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msDimPrev, aAny );
609 : :
610 [ # # ]: 0 : aAny <<= maDimColor;
611 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msDimColor, aAny );
612 : : }
613 [ # # ]: 0 : else if( meKind == XMLE_PLAY )
614 : : {
615 [ # # ]: 0 : aAny <<= (sal_Bool)sal_True;
616 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msIsAnimation, aAny );
617 : :
618 [ # # ]: 0 : aAny <<= meSpeed;
619 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msSpeed, aAny );
620 : : }
621 : : else
622 : : {
623 [ # # ][ # # ]: 0 : if( meKind == XMLE_HIDE && !mbTextEffect && meEffect == EK_none )
[ # # ]
624 : : {
625 [ # # ]: 0 : aAny = bool2any( sal_True );
626 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msDimHide, aAny );
627 : : }
628 : : else
629 : : {
630 : 0 : const AnimationEffect eEffect = ImplSdXMLgetEffect( meEffect, meDirection, mnStartScale, meKind == XMLE_SHOW );
631 : :
632 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mbTextEffect ? mpImpl->msTextEffect : mpImpl->msEffect, makeAny( eEffect ) );
[ # # ][ # # ]
633 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msSpeed, makeAny( meSpeed ) );
[ # # ]
634 : :
635 [ # # ][ # # ]: 0 : if( eEffect == AnimationEffect_PATH && !maPathShapeId.isEmpty() )
[ # # ]
636 : : {
637 [ # # ][ # # ]: 0 : Reference< XShape > xPath( GetImport().getInterfaceToIdentifierMapper().getReference( maPathShapeId ), UNO_QUERY );
[ # # ]
638 [ # # ]: 0 : if( xPath.is() )
639 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msAnimPath, makeAny( xPath ) );
[ # # ]
640 : : }
641 : : }
642 : : }
643 : : }
644 [ # # ]: 0 : if( !maSoundURL.isEmpty() )
645 : : {
646 [ # # ]: 0 : if( xSet.is() )
647 : : {
648 [ # # ]: 0 : aAny <<= maSoundURL;
649 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msSound, aAny );
650 : :
651 [ # # ][ # # ]: 0 : aAny <<= bool2any( mbPlayFull );
652 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msPlayFull, aAny );
653 : :
654 [ # # ][ # # ]: 0 : aAny <<= bool2any( sal_True );
655 [ # # ][ # # ]: 0 : xSet->setPropertyValue( mpImpl->msSoundOn, aAny );
656 : : }
657 : : else
658 : : {
659 : : OSL_FAIL("XMLAnimationsEffectContext::EndElement - Sound URL without a XPropertySet!");
660 : : }
661 [ # # ]: 0 : }
662 [ # # ][ # # ]: 0 : }
[ # # ][ # # ]
663 : : }
664 : 0 : catch (const Exception&)
665 : : {
666 : : OSL_FAIL( "exception caught while importing animation information!" );
667 : : }
668 : : }
669 : :
670 : : ///////////////////////////////////////////////////////////////////////
671 : :
672 [ # # ][ # # ]: 0 : TYPEINIT1( XMLAnimationsContext, SvXMLImportContext );
673 : :
674 : 0 : XMLAnimationsContext::XMLAnimationsContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName,
675 : : const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& )
676 : 0 : : SvXMLImportContext(rImport, nPrfx, rLocalName)
677 : : {
678 [ # # ][ # # ]: 0 : mpImpl = new AnimImpImpl();
679 : 0 : }
680 : :
681 : 0 : XMLAnimationsContext::~XMLAnimationsContext()
682 : : {
683 [ # # ][ # # ]: 0 : delete mpImpl;
684 [ # # ]: 0 : }
685 : :
686 : 0 : SvXMLImportContext * XMLAnimationsContext::CreateChildContext( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName,
687 : : const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList )
688 : : {
689 [ # # ]: 0 : return new XMLAnimationsEffectContext( GetImport(), nPrefix, rLocalName, xAttrList, mpImpl );
690 : : }
691 : :
692 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|