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