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