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 #include "oox/ppt/animationspersist.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Any.hxx>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XShape.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XText.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/ParagraphTarget.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include "oox/drawingml/shape.hxx"
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski using rtl::OUString;
36*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
37*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::presentation;
38*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::drawing;
39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::text;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski namespace oox { namespace ppt {
42*b1cdbd2cSJim Jagielski 
convert(::com::sun::star::uno::Any & rTarget,sal_Int16 & rSubType) const43*b1cdbd2cSJim Jagielski 	void ShapeTargetElement::convert( ::com::sun::star::uno::Any & rTarget, sal_Int16 & rSubType ) const
44*b1cdbd2cSJim Jagielski 	{
45*b1cdbd2cSJim Jagielski 		switch(mnType)
46*b1cdbd2cSJim Jagielski 		{
47*b1cdbd2cSJim Jagielski 		case XML_subSp:
48*b1cdbd2cSJim Jagielski 			rSubType = ShapeAnimationSubType::AS_WHOLE;
49*b1cdbd2cSJim Jagielski 			break;
50*b1cdbd2cSJim Jagielski 		case XML_bg:
51*b1cdbd2cSJim Jagielski 			rSubType = ShapeAnimationSubType::ONLY_BACKGROUND;
52*b1cdbd2cSJim Jagielski 			break;
53*b1cdbd2cSJim Jagielski 		case XML_txEl:
54*b1cdbd2cSJim Jagielski 		{
55*b1cdbd2cSJim Jagielski 			ParagraphTarget aParaTarget;
56*b1cdbd2cSJim Jagielski 			Reference< XShape > xShape;
57*b1cdbd2cSJim Jagielski 			rTarget >>= xShape;
58*b1cdbd2cSJim Jagielski 			aParaTarget.Shape = xShape;
59*b1cdbd2cSJim Jagielski 			rSubType = ShapeAnimationSubType::ONLY_TEXT;
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 			Reference< XText > xText( xShape, UNO_QUERY );
62*b1cdbd2cSJim Jagielski 			if( xText.is() )
63*b1cdbd2cSJim Jagielski 			{
64*b1cdbd2cSJim Jagielski 				switch(mnRangeType)
65*b1cdbd2cSJim Jagielski 				{
66*b1cdbd2cSJim Jagielski 				case XML_charRg:
67*b1cdbd2cSJim Jagielski 					// TODO calculate the corresponding paragraph for the text range....
68*b1cdbd2cSJim Jagielski 					OSL_TRACE( "OOX: TODO calculate the corresponding paragraph for the text range..." );
69*b1cdbd2cSJim Jagielski 					break;
70*b1cdbd2cSJim Jagielski 				case XML_pRg:
71*b1cdbd2cSJim Jagielski 					aParaTarget.Paragraph = static_cast< sal_Int16 >( maRange.start );
72*b1cdbd2cSJim Jagielski 					// TODO what to do with more than one.
73*b1cdbd2cSJim Jagielski 					OSL_TRACE( "OOX: TODO what to do with more than one" );
74*b1cdbd2cSJim Jagielski 					break;
75*b1cdbd2cSJim Jagielski 				}
76*b1cdbd2cSJim Jagielski 				rTarget = makeAny( aParaTarget );
77*b1cdbd2cSJim Jagielski 			}
78*b1cdbd2cSJim Jagielski 			break;
79*b1cdbd2cSJim Jagielski 		}
80*b1cdbd2cSJim Jagielski 		default:
81*b1cdbd2cSJim Jagielski 			break;
82*b1cdbd2cSJim Jagielski 		}
83*b1cdbd2cSJim Jagielski 	}
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 
convert(const SlidePersistPtr & pSlide,sal_Int16 & nSubType) const86*b1cdbd2cSJim Jagielski 	Any AnimTargetElement::convert(const SlidePersistPtr & pSlide, sal_Int16 & nSubType) const
87*b1cdbd2cSJim Jagielski 	{
88*b1cdbd2cSJim Jagielski 		Any aTarget;
89*b1cdbd2cSJim Jagielski 		// see sd/source/files/ppt/pptinanimations.cxx:3191 (in importTargetElementContainer())
90*b1cdbd2cSJim Jagielski 		switch(mnType)
91*b1cdbd2cSJim Jagielski 		{
92*b1cdbd2cSJim Jagielski 		case XML_inkTgt:
93*b1cdbd2cSJim Jagielski 			// TODO
94*b1cdbd2cSJim Jagielski 			OSL_TRACE( "OOX: TODO inkTgt" );
95*b1cdbd2cSJim Jagielski 			break;
96*b1cdbd2cSJim Jagielski 		case XML_sldTgt:
97*b1cdbd2cSJim Jagielski 			// TODO
98*b1cdbd2cSJim Jagielski 			OSL_TRACE( "OOX: TODO sldTgt" );
99*b1cdbd2cSJim Jagielski 			break;
100*b1cdbd2cSJim Jagielski 		case XML_sndTgt:
101*b1cdbd2cSJim Jagielski 			aTarget = makeAny(msValue);
102*b1cdbd2cSJim Jagielski 			break;
103*b1cdbd2cSJim Jagielski 		case XML_spTgt:
104*b1cdbd2cSJim Jagielski 		{
105*b1cdbd2cSJim Jagielski 			Any rTarget;
106*b1cdbd2cSJim Jagielski 			::oox::drawingml::ShapePtr pShape = pSlide->getShape(msValue);
107*b1cdbd2cSJim Jagielski 			OSL_ENSURE( pShape, "failed to locate Shape");
108*b1cdbd2cSJim Jagielski 			if( pShape )
109*b1cdbd2cSJim Jagielski 			{
110*b1cdbd2cSJim Jagielski 				Reference< XShape > xShape( pShape->getXShape() );
111*b1cdbd2cSJim Jagielski 				OSL_ENSURE( xShape.is(), "fail to get XShape from shape" );
112*b1cdbd2cSJim Jagielski 				if( xShape.is() )
113*b1cdbd2cSJim Jagielski 				{
114*b1cdbd2cSJim Jagielski 					rTarget <<= xShape;
115*b1cdbd2cSJim Jagielski 					maShapeTarget.convert(rTarget, nSubType);
116*b1cdbd2cSJim Jagielski 					aTarget = rTarget;
117*b1cdbd2cSJim Jagielski 				}
118*b1cdbd2cSJim Jagielski 			}
119*b1cdbd2cSJim Jagielski 			break;
120*b1cdbd2cSJim Jagielski 		}
121*b1cdbd2cSJim Jagielski 		default:
122*b1cdbd2cSJim Jagielski 			break;
123*b1cdbd2cSJim Jagielski 		}
124*b1cdbd2cSJim Jagielski 		return aTarget;
125*b1cdbd2cSJim Jagielski 	}
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski // BEGIN CUT&PASTE from sd/source/filter/ppt/pptinanimations.cxx
129*b1cdbd2cSJim Jagielski /** this adds an any to another any.
130*b1cdbd2cSJim Jagielski 	if rNewValue is empty, rOldValue is returned.
131*b1cdbd2cSJim Jagielski 	if rOldValue is empty, rNewValue is returned.
132*b1cdbd2cSJim Jagielski 	if rOldValue contains a value, a sequence with rOldValue and rNewValue is returned.
133*b1cdbd2cSJim Jagielski 	if rOldValue contains a sequence, a new sequence with the old sequence and rNewValue is returned.
134*b1cdbd2cSJim Jagielski */
addToSequence(const Any & rOldValue,const Any & rNewValue)135*b1cdbd2cSJim Jagielski 	static Any addToSequence( const Any& rOldValue, const Any& rNewValue )
136*b1cdbd2cSJim Jagielski 	{
137*b1cdbd2cSJim Jagielski 		if( !rNewValue.hasValue() )
138*b1cdbd2cSJim Jagielski 		{
139*b1cdbd2cSJim Jagielski 			return rOldValue;
140*b1cdbd2cSJim Jagielski 		}
141*b1cdbd2cSJim Jagielski 		else if( !rOldValue.hasValue() )
142*b1cdbd2cSJim Jagielski 		{
143*b1cdbd2cSJim Jagielski 			return rNewValue;
144*b1cdbd2cSJim Jagielski 		}
145*b1cdbd2cSJim Jagielski 		else
146*b1cdbd2cSJim Jagielski 		{
147*b1cdbd2cSJim Jagielski 			Sequence< Any > aNewSeq;
148*b1cdbd2cSJim Jagielski 			if( rOldValue >>= aNewSeq )
149*b1cdbd2cSJim Jagielski 			{
150*b1cdbd2cSJim Jagielski 				sal_Int32 nSize = aNewSeq.getLength();
151*b1cdbd2cSJim Jagielski 				aNewSeq.realloc(nSize+1);
152*b1cdbd2cSJim Jagielski 				aNewSeq[nSize] = rNewValue;
153*b1cdbd2cSJim Jagielski 			}
154*b1cdbd2cSJim Jagielski 			else
155*b1cdbd2cSJim Jagielski 			{
156*b1cdbd2cSJim Jagielski 				aNewSeq.realloc(2);
157*b1cdbd2cSJim Jagielski 				aNewSeq[0] = rOldValue;
158*b1cdbd2cSJim Jagielski 				aNewSeq[1] = rNewValue;
159*b1cdbd2cSJim Jagielski 			}
160*b1cdbd2cSJim Jagielski 			return makeAny( aNewSeq );
161*b1cdbd2cSJim Jagielski 		}
162*b1cdbd2cSJim Jagielski 	}
163*b1cdbd2cSJim Jagielski // END
164*b1cdbd2cSJim Jagielski 
convert(const SlidePersistPtr & pSlide) const165*b1cdbd2cSJim Jagielski 	Any AnimationCondition::convert(const SlidePersistPtr & pSlide) const
166*b1cdbd2cSJim Jagielski 	{
167*b1cdbd2cSJim Jagielski 		Any aAny;
168*b1cdbd2cSJim Jagielski 		if( mpTarget )
169*b1cdbd2cSJim Jagielski 		{
170*b1cdbd2cSJim Jagielski 			sal_Int16 nSubType;
171*b1cdbd2cSJim Jagielski 			aAny = mpTarget->convert( pSlide, nSubType );
172*b1cdbd2cSJim Jagielski 		}
173*b1cdbd2cSJim Jagielski 		else
174*b1cdbd2cSJim Jagielski 		{
175*b1cdbd2cSJim Jagielski 			aAny = maValue;
176*b1cdbd2cSJim Jagielski 		}
177*b1cdbd2cSJim Jagielski 		return aAny;
178*b1cdbd2cSJim Jagielski 	}
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 
convertList(const SlidePersistPtr & pSlide,const AnimationConditionList & l)181*b1cdbd2cSJim Jagielski 	Any AnimationCondition::convertList(const SlidePersistPtr & pSlide, const AnimationConditionList & l)
182*b1cdbd2cSJim Jagielski 	{
183*b1cdbd2cSJim Jagielski 		Any aAny;
184*b1cdbd2cSJim Jagielski 		for( AnimationConditionList::const_iterator iter = l.begin();
185*b1cdbd2cSJim Jagielski 			 iter != l.end(); iter++)
186*b1cdbd2cSJim Jagielski 		{
187*b1cdbd2cSJim Jagielski 			aAny = addToSequence( aAny, iter->convert(pSlide) );
188*b1cdbd2cSJim Jagielski 		}
189*b1cdbd2cSJim Jagielski 		return aAny;
190*b1cdbd2cSJim Jagielski 	}
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski } }
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 
195