| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_xmloff.hxx" |
| |
| #include <tools/debug.hxx> |
| #include <com/sun/star/lang/XServiceInfo.hpp> |
| #include <com/sun/star/presentation/AnimationSpeed.hpp> |
| #include "unointerfacetouniqueidentifiermapper.hxx" |
| |
| #include <list> |
| #include <comphelper/extract.hxx> |
| #include <tools/color.hxx> |
| #include <xmloff/xmltoken.hxx> |
| #include "xmloff/xmlnmspe.hxx" |
| #include <xmloff/xmluconv.hxx> |
| #include <xmloff/xmlexp.hxx> |
| #include <xmloff/xmlement.hxx> |
| #include <xmloff/nmspmap.hxx> |
| #include <xmloff/shapeexport.hxx> |
| #include "anim.hxx" |
| |
| using ::rtl::OUString; |
| using ::rtl::OUStringBuffer; |
| |
| using namespace ::std; |
| using namespace ::cppu; |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::uno; |
| using namespace ::com::sun::star::drawing; |
| using namespace ::com::sun::star::beans; |
| using namespace ::com::sun::star::lang; |
| using namespace ::com::sun::star::presentation; |
| using namespace ::xmloff::token; |
| |
| |
| const struct Effect |
| { |
| XMLEffect meKind; |
| XMLEffectDirection meDirection; |
| sal_Int16 mnStartScale; |
| sal_Bool mbIn; |
| } |
| AnimationEffectMap[] = |
| { |
| { EK_none, ED_none, -1, sal_True }, // AnimationEffect_NONE |
| { EK_fade, ED_from_left, -1, sal_True }, // AnimationEffect_FADE_FROM_LEFT |
| { EK_fade, ED_from_top, -1, sal_True }, // AnimationEffect_FADE_FROM_TOP |
| { EK_fade, ED_from_right, -1, sal_True }, // AnimationEffect_FADE_FROM_RIGHT |
| { EK_fade, ED_from_bottom, -1, sal_True }, // AnimationEffect_FADE_FROM_BOTTOM |
| { EK_fade, ED_to_center, -1, sal_True }, // AnimationEffect_FADE_TO_CENTER |
| { EK_fade, ED_from_center, -1, sal_True }, // AnimationEffect_FADE_FROM_CENTER |
| { EK_move, ED_from_left, -1, sal_True }, // AnimationEffect_MOVE_FROM_LEFT |
| { EK_move, ED_from_top, -1, sal_True }, // AnimationEffect_MOVE_FROM_TOP |
| { EK_move, ED_from_right, -1, sal_True }, // AnimationEffect_MOVE_FROM_RIGHT |
| { EK_move, ED_from_bottom, -1, sal_True }, // AnimationEffect_MOVE_FROM_BOTTOM |
| { EK_stripes, ED_vertical, -1, sal_True }, // AnimationEffect_VERTICAL_STRIPES |
| { EK_stripes, ED_horizontal, -1, sal_True }, // AnimationEffect_HORIZONTAL_STRIPES |
| { EK_fade, ED_clockwise, -1, sal_True }, // AnimationEffect_CLOCKWISE |
| { EK_fade, ED_cclockwise, -1, sal_True }, // AnimationEffect_COUNTERCLOCKWISE |
| { EK_fade, ED_from_upperleft, -1, sal_True }, // AnimationEffect_FADE_FROM_UPPERLEFT |
| { EK_fade, ED_from_upperright, -1, sal_True }, // AnimationEffect_FADE_FROM_UPPERRIGHT |
| { EK_fade, ED_from_lowerleft, -1, sal_True }, // AnimationEffect_FADE_FROM_LOWERLEFT |
| { EK_fade, ED_from_lowerright, -1, sal_True }, // AnimationEffect_FADE_FROM_LOWERRIGHT |
| { EK_close,ED_vertical, -1, sal_True }, // AnimationEffect_CLOSE_VERTICAL |
| { EK_close,ED_horizontal, -1, sal_True }, // AnimationEffect_CLOSE_HORIZONTAL |
| { EK_open, ED_vertical, -1, sal_True }, // AnimationEffect_OPEN_VERTICAL |
| { EK_open, ED_horizontal, -1, sal_True }, // AnimationEffect_OPEN_HORIZONTAL |
| { EK_move, ED_path, -1, sal_True }, // AnimationEffect_PATH |
| { EK_move, ED_to_left, -1, sal_False },// AnimationEffect_MOVE_TO_LEFT |
| { EK_move, ED_to_top, -1, sal_False },// AnimationEffect_MOVE_TO_TOP |
| { EK_move, ED_to_right, -1, sal_False },// AnimationEffect_MOVE_TO_RIGHT |
| { EK_move, ED_to_bottom, -1, sal_False },// AnimationEffect_MOVE_TO_BOTTOM |
| { EK_fade, ED_spiral_inward_left, -1, sal_True }, // AnimationEffect_SPIRALIN_LEFT |
| { EK_fade, ED_spiral_inward_right, -1, sal_True }, // AnimationEffect_SPIRALIN_RIGHT |
| { EK_fade, ED_spiral_outward_left, -1, sal_True }, // AnimationEffect_SPIRALOUT_LEFT |
| { EK_fade, ED_spiral_outward_right, -1, sal_True }, // AnimationEffect_SPIRALOUT_RIGHT |
| { EK_dissolve, ED_none, -1, sal_True }, // AnimationEffect_DISSOLVE |
| { EK_wavyline, ED_from_left, -1, sal_True }, // AnimationEffect_WAVYLINE_FROM_LEFT |
| { EK_wavyline, ED_from_top, -1, sal_True }, // AnimationEffect_WAVYLINE_FROM_TOP |
| { EK_wavyline, ED_from_right, -1, sal_True }, // AnimationEffect_WAVYLINE_FROM_RIGHT |
| { EK_wavyline, ED_from_bottom, -1, sal_True }, // AnimationEffect_WAVYLINE_FROM_BOTTOM |
| { EK_random, ED_none, -1, sal_True }, // AnimationEffect_RANDOM |
| { EK_lines, ED_vertical, -1, sal_True }, // AnimationEffect_VERTICAL_LINES |
| { EK_lines, ED_horizontal, -1, sal_True }, // AnimationEffect_HORIZONTAL_LINES |
| { EK_laser, ED_from_left, -1, sal_True }, // AnimationEffect_LASER_FROM_LEFT |
| { EK_laser, ED_from_top, -1, sal_True }, // AnimationEffect_LASER_FROM_TOP |
| { EK_laser, ED_from_right, -1, sal_True }, // AnimationEffect_LASER_FROM_RIGHT |
| { EK_laser, ED_from_bottom, -1, sal_True }, // AnimationEffect_LASER_FROM_BOTTOM |
| { EK_laser, ED_from_upperleft, -1, sal_True }, // AnimationEffect_LASER_FROM_UPPERLEFT |
| { EK_laser, ED_from_upperright, -1, sal_True }, // AnimationEffect_LASER_FROM_UPPERRIGHT |
| { EK_laser, ED_from_lowerleft, -1, sal_True }, // AnimationEffect_LASER_FROM_LOWERLEFT |
| { EK_laser, ED_from_lowerright, -1, sal_True }, // AnimationEffect_LASER_FROM_LOWERRIGHT |
| { EK_appear,ED_none, -1, sal_True }, // AnimationEffect_APPEAR |
| { EK_hide, ED_none, -1, sal_False },// AnimationEffect_HIDE |
| { EK_move, ED_from_upperleft, -1, sal_True }, // AnimationEffect_MOVE_FROM_UPPERLEFT |
| { EK_move, ED_from_upperright, -1, sal_True }, // AnimationEffect_MOVE_FROM_UPPERRIGHT |
| { EK_move, ED_from_lowerright, -1, sal_True }, // AnimationEffect_MOVE_FROM_LOWERRIGHT |
| { EK_move, ED_from_lowerleft, -1, sal_True }, // AnimationEffect_MOVE_FROM_LOWERLEFT |
| { EK_move, ED_to_upperleft, -1, sal_False },// AnimationEffect_MOVE_TO_UPPERLEFT |
| { EK_move, ED_to_upperright, -1, sal_False },// AnimationEffect_MOVE_TO_UPPERRIGHT |
| { EK_move, ED_to_lowerright, -1, sal_False },// AnimationEffect_MOVE_TO_LOWERRIGHT |
| { EK_move, ED_to_lowerleft, -1, sal_False },// AnimationEffect_MOVE_TO_LOWERLEFT |
| { EK_move_short, ED_from_left, -1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_LEFT |
| { EK_move_short, ED_from_upperleft, -1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_UPPERLEFT |
| { EK_move_short, ED_from_top, -1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_TOP |
| { EK_move_short, ED_from_upperright,-1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_UPPERRIGHT |
| { EK_move_short, ED_from_right, -1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_RIGHT |
| { EK_move_short, ED_from_lowerright,-1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_LOWERRIGHT |
| { EK_move_short, ED_from_bottom, -1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_BOTTOM |
| { EK_move_short, ED_from_lowerleft, -1, sal_True }, // AnimationEffect_MOVE_SHORT_FROM_LOWERLEFT |
| { EK_move_short, ED_to_left, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_LEFT |
| { EK_move_short, ED_to_upperleft, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_UPPERLEFT |
| { EK_move_short, ED_to_top, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_TOP |
| { EK_move_short, ED_to_upperright, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_UPPERRIGHT |
| { EK_move_short, ED_to_right, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_RIGHT |
| { EK_move_short, ED_to_lowerright, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_LOWERRIGHT |
| { EK_move_short, ED_to_bottom, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_BOTTOM |
| { EK_move_short, ED_to_lowerleft, -1, sal_False },// AnimationEffect_MOVE_SHORT_TO_LOWERLEFT |
| { EK_checkerboard, ED_vertical, -1, sal_True }, // AnimationEffect_VERTICAL_CHECKERBOARD |
| { EK_checkerboard, ED_horizontal, -1, sal_True }, // AnimationEffect_HORIZONTAL_CHECKERBOARD |
| { EK_rotate, ED_horizontal, -1, sal_True }, // AnimationEffect_HORIZONTAL_ROTATE |
| { EK_rotate, ED_vertical, -1, sal_True }, // AnimationEffect_VERTICAL_ROTATE |
| { EK_stretch,ED_horizontal, -1, sal_True }, // AnimationEffect_HORIZONTAL_STRETCH |
| { EK_stretch,ED_vertical, -1, sal_True }, // AnimationEffect_VERTICAL_STRETCH |
| { EK_stretch,ED_from_left, -1, sal_True }, // AnimationEffect_STRETCH_FROM_LEFT |
| { EK_stretch,ED_from_upperleft, -1, sal_True }, // AnimationEffect_STRETCH_FROM_UPPERLEFT |
| { EK_stretch,ED_from_top, -1, sal_True }, // AnimationEffect_STRETCH_FROM_TOP |
| { EK_stretch,ED_from_upperright,-1, sal_True }, // AnimationEffect_STRETCH_FROM_UPPERRIGHT |
| { EK_stretch,ED_from_right, -1, sal_True }, // AnimationEffect_STRETCH_FROM_RIGHT |
| { EK_stretch,ED_from_lowerright,-1, sal_True }, // AnimationEffect_STRETCH_FROM_LOWERRIGHT |
| { EK_stretch,ED_from_bottom, -1, sal_True }, // AnimationEffect_STRETCH_FROM_BOTTOM |
| { EK_stretch,ED_from_lowerleft, -1, sal_True }, // AnimationEffect_STRETCH_FROM_LOWERLEFT |
| { EK_move, ED_none, 0, sal_True }, // AnimationEffect_ZOOM_IN |
| { EK_move, ED_none, 50, sal_True }, // AnimationEffect_ZOOM_IN_SMALL |
| { EK_move, ED_spiral_inward_left, 0, sal_True }, // AnimationEffect_ZOOM_IN_SPIRAL |
| { EK_move, ED_none, 400, sal_True }, // AnimationEffect_ZOOM_OUT |
| { EK_move, ED_none, 200, sal_True }, // AnimationEffect_ZOOM_OUT_SMALL |
| { EK_move, ED_spiral_inward_left, 400, sal_True }, // AnimationEffect_ZOOM_OUT_SPIRAL |
| { EK_move, ED_from_left, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_LEFT |
| { EK_move, ED_from_upperleft, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_UPPERLEFT |
| { EK_move, ED_from_top, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_TOP |
| { EK_move, ED_from_upperright, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_UPPERRIGHT |
| { EK_move, ED_from_right, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_RIGHT |
| { EK_move, ED_from_lowerright, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_LOWERRIGHT |
| { EK_move, ED_from_bottom, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_BOTTOM |
| { EK_move, ED_from_lowerleft, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_LOWERLEFT |
| { EK_move, ED_from_center, 0, sal_True }, // AnimationEffect_ZOOM_IN_FROM_CENTER |
| { EK_move, ED_from_left, 400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_LEFT |
| { EK_move, ED_from_upperleft, 400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_UPPERLEFT |
| { EK_move, ED_from_top, 400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_TOP |
| { EK_move, ED_from_upperright,400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_UPPERRIGHT |
| { EK_move, ED_from_right, 400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_RIGHT |
| { EK_move, ED_from_lowerright,400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_LOWERRIGHT |
| { EK_move, ED_from_bottom, 400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_BOTTOM |
| { EK_move, ED_from_lowerleft, 400, sal_True }, // AnimationEffect_ZOOM_OUT_FROM_LOWERLEFT |
| { EK_move, ED_from_center, 400, sal_True } // AnimationEffect_ZOOM_OUT_FROM_CENTER |
| }; |
| |
| void SdXMLImplSetEffect( AnimationEffect eEffect, XMLEffect& eKind, XMLEffectDirection& eDirection, sal_Int16& nStartScale, sal_Bool& bIn ) |
| { |
| if( eEffect < AnimationEffect_NONE || eEffect > AnimationEffect_ZOOM_OUT_FROM_CENTER ) |
| { |
| DBG_ERROR( "unknown animation effect!" ); |
| eEffect = AnimationEffect_NONE; |
| } |
| |
| const Effect& rEffect = AnimationEffectMap[eEffect]; |
| eKind = rEffect.meKind; |
| eDirection = rEffect.meDirection; |
| nStartScale = rEffect.mnStartScale; |
| bIn = rEffect.mbIn; |
| } |
| |
| enum XMLActionKind |
| { |
| XMLE_SHOW, |
| XMLE_HIDE, |
| XMLE_DIM, |
| XMLE_PLAY |
| }; |
| |
| struct XMLEffectHint |
| { |
| XMLActionKind meKind; |
| sal_Bool mbTextEffect; |
| Reference<XShape> mxShape; |
| |
| XMLEffect meEffect; |
| XMLEffectDirection meDirection; |
| sal_Int16 mnStartScale; |
| |
| AnimationSpeed meSpeed; |
| Color maDimColor; |
| OUString maSoundURL; |
| sal_Bool mbPlayFull; |
| sal_Int32 mnPresId; |
| sal_Int32 mnPathShapeId; |
| |
| int operator<(const XMLEffectHint& rComp) const { return mnPresId < rComp.mnPresId; } |
| |
| XMLEffectHint() |
| : meKind( XMLE_SHOW ), mbTextEffect( sal_False ), |
| meEffect( EK_none ), meDirection( ED_none ), mnStartScale( -1 ), |
| meSpeed( AnimationSpeed_SLOW ), maDimColor(0), mbPlayFull( sal_False ), |
| mnPresId( 0 ), mnPathShapeId( -1 ) |
| {} |
| }; |
| |
| class AnimExpImpl |
| { |
| public: |
| list<XMLEffectHint> maEffects; |
| UniReference< XMLShapeExport > mxShapeExp; |
| |
| OUString msDimColor; |
| OUString msDimHide; |
| OUString msDimPrev; |
| OUString msEffect; |
| OUString msPlayFull; |
| OUString msPresOrder; |
| OUString msSound; |
| OUString msSoundOn; |
| OUString msSpeed; |
| OUString msTextEffect; |
| OUString msIsAnimation; |
| OUString msAnimPath; |
| |
| AnimExpImpl() |
| : msDimColor( RTL_CONSTASCII_USTRINGPARAM( "DimColor" ) ), |
| msDimHide( RTL_CONSTASCII_USTRINGPARAM( "DimHide" ) ), |
| msDimPrev( RTL_CONSTASCII_USTRINGPARAM( "DimPrevious" ) ), |
| msEffect( RTL_CONSTASCII_USTRINGPARAM( "Effect" ) ), |
| msPlayFull( RTL_CONSTASCII_USTRINGPARAM( "PlayFull" ) ), |
| msPresOrder( RTL_CONSTASCII_USTRINGPARAM( "PresentationOrder" ) ), |
| msSound( RTL_CONSTASCII_USTRINGPARAM( "Sound" ) ), |
| msSoundOn( RTL_CONSTASCII_USTRINGPARAM( "SoundOn" ) ), |
| msSpeed( RTL_CONSTASCII_USTRINGPARAM( "Speed" ) ), |
| msTextEffect( RTL_CONSTASCII_USTRINGPARAM( "TextEffect" ) ), |
| msIsAnimation( RTL_CONSTASCII_USTRINGPARAM( "IsAnimation" ) ), |
| msAnimPath( RTL_CONSTASCII_USTRINGPARAM( "AnimationPath" ) ) |
| {} |
| }; |
| |
| XMLAnimationsExporter::XMLAnimationsExporter( XMLShapeExport* pShapeExp ) |
| { |
| mpImpl = new AnimExpImpl; |
| mpImpl->mxShapeExp = pShapeExp; |
| } |
| |
| XMLAnimationsExporter::~XMLAnimationsExporter() |
| { |
| delete mpImpl; |
| mpImpl = NULL; |
| } |
| |
| void XMLAnimationsExporter::prepare( Reference< XShape > xShape, SvXMLExport& ) |
| { |
| try |
| { |
| // check for presentation shape service |
| { |
| Reference< XServiceInfo > xServiceInfo( xShape, UNO_QUERY ); |
| if( !xServiceInfo.is() || !xServiceInfo->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.Shape" ) ) ) ) |
| return; |
| } |
| |
| Reference< XPropertySet > xProps( xShape, UNO_QUERY ); |
| if( xProps.is() ) |
| { |
| AnimationEffect eEffect; |
| xProps->getPropertyValue( mpImpl->msEffect ) >>= eEffect; |
| if( eEffect == AnimationEffect_PATH ) |
| { |
| Reference< XShape > xPath; |
| xProps->getPropertyValue( mpImpl->msAnimPath ) >>= xPath; |
| // strip if( xPath.is() ) |
| // strip mrExport.getInterfaceToIdentifierMapper()->registerReference( xShape ); |
| // strip mpImpl->mxShapeExp->createShapeId( xPath ); |
| } |
| } |
| } |
| catch( Exception e ) |
| { |
| DBG_ERROR("exception catched while collection animation information!"); |
| } |
| } |
| |
| void XMLAnimationsExporter::collect( Reference< XShape > xShape, SvXMLExport& rExport ) |
| { |
| try |
| { |
| // check for presentation shape service |
| { |
| Reference< XServiceInfo > xServiceInfo( xShape, UNO_QUERY ); |
| if( !xServiceInfo.is() || !xServiceInfo->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.Shape" ) ) ) ) |
| return; |
| } |
| |
| Reference< XPropertySet > xProps( xShape, UNO_QUERY ); |
| if( xProps.is() ) |
| { |
| const OUString aEmptyStr; |
| |
| Reference< XPropertySetInfo > xInfo( xProps->getPropertySetInfo() ); |
| AnimationEffect eEffect; |
| XMLEffectHint aEffect; |
| |
| if( any2bool( xProps->getPropertyValue( mpImpl->msSoundOn ) ) ) |
| { |
| xProps->getPropertyValue( mpImpl->msSound ) >>= aEffect.maSoundURL; |
| xProps->getPropertyValue( mpImpl->msPlayFull ) >>= aEffect.mbPlayFull; |
| } |
| |
| xProps->getPropertyValue( mpImpl->msPresOrder ) >>= aEffect.mnPresId; |
| xProps->getPropertyValue( mpImpl->msSpeed ) >>= aEffect.meSpeed; |
| |
| |
| sal_Bool bIsAnimation = false; |
| xProps->getPropertyValue( mpImpl->msIsAnimation ) >>= bIsAnimation; |
| if( bIsAnimation ) |
| { |
| aEffect.meKind = XMLE_PLAY; |
| |
| if( !aEffect.mxShape.is() ) |
| { |
| rExport.getInterfaceToIdentifierMapper().registerReference( xShape ); |
| aEffect.mxShape = xShape; |
| } |
| |
| mpImpl->maEffects.push_back( aEffect ); |
| } |
| |
| { |
| |
| xProps->getPropertyValue( mpImpl->msEffect ) >>= eEffect; |
| if( eEffect != AnimationEffect_NONE ) |
| { |
| sal_Bool bIn = sal_True; |
| SdXMLImplSetEffect( eEffect, aEffect.meEffect, aEffect.meDirection, aEffect.mnStartScale, bIn ); |
| |
| aEffect.meKind = bIn ? XMLE_SHOW : XMLE_HIDE; |
| |
| if( !aEffect.mxShape.is() ) |
| { |
| rExport.getInterfaceToIdentifierMapper().registerReference( xShape ); |
| aEffect.mxShape = xShape; |
| } |
| |
| if( eEffect == AnimationEffect_PATH ) |
| { |
| Reference< XShape > xPath; |
| xProps->getPropertyValue( mpImpl->msAnimPath ) >>= xPath; |
| if( xPath.is() ) |
| { |
| // strip mpImpl->mxShapeExp->createShapeId( xPath ); |
| // strip aEffect.mnPathShapeId = mpImpl->mxShapeExp->getShapeId( xPath ); |
| } |
| } |
| mpImpl->maEffects.push_back( aEffect ); |
| |
| aEffect.mnPathShapeId = -1; |
| aEffect.maSoundURL = aEmptyStr; |
| } |
| |
| xProps->getPropertyValue( mpImpl->msTextEffect ) >>= eEffect; |
| if( eEffect != AnimationEffect_NONE ) |
| { |
| sal_Bool bIn = sal_True; |
| SdXMLImplSetEffect( eEffect, aEffect.meEffect, aEffect.meDirection, aEffect.mnStartScale, bIn ); |
| aEffect.meKind = bIn ? XMLE_SHOW : XMLE_HIDE; |
| aEffect.mbTextEffect = sal_True; |
| |
| if( !aEffect.mxShape.is() ) |
| { |
| rExport.getInterfaceToIdentifierMapper().registerReference( xShape ); |
| aEffect.mxShape = xShape; |
| } |
| |
| mpImpl->maEffects.push_back( aEffect ); |
| aEffect.mbTextEffect = sal_False; |
| aEffect.maSoundURL = aEmptyStr; |
| } |
| |
| sal_Bool bDimPrev = false; |
| sal_Bool bDimHide = false; |
| xProps->getPropertyValue( mpImpl->msDimPrev ) >>= bDimPrev; |
| xProps->getPropertyValue( mpImpl->msDimHide ) >>= bDimHide; |
| if( bDimPrev || bDimHide ) |
| { |
| aEffect.meKind = bDimPrev ? XMLE_DIM : XMLE_HIDE; |
| aEffect.meEffect = EK_none; |
| aEffect.meDirection = ED_none; |
| aEffect.meSpeed = AnimationSpeed_MEDIUM; |
| if( bDimPrev ) |
| { |
| sal_Int32 nColor = 0; |
| xProps->getPropertyValue( mpImpl->msDimColor ) >>= nColor; |
| aEffect.maDimColor.SetColor( nColor ); |
| } |
| |
| if( !aEffect.mxShape.is() ) |
| { |
| rExport.getInterfaceToIdentifierMapper().registerReference( xShape ); |
| aEffect.mxShape = xShape; |
| } |
| |
| mpImpl->maEffects.push_back( aEffect ); |
| aEffect.maSoundURL = aEmptyStr; |
| } |
| } |
| } |
| } |
| catch( Exception e ) |
| { |
| DBG_ERROR("exception catched while collection animation information!"); |
| } |
| } |
| |
| void XMLAnimationsExporter::exportAnimations( SvXMLExport& rExport ) |
| { |
| mpImpl->maEffects.sort(); |
| |
| list<XMLEffectHint>::iterator aIter = mpImpl->maEffects.begin(); |
| const list<XMLEffectHint>::iterator aEnd = mpImpl->maEffects.end(); |
| |
| OUStringBuffer sTmp; |
| |
| if( aIter != aEnd ) |
| { |
| SvXMLElementExport aElement( rExport, XML_NAMESPACE_PRESENTATION, XML_ANIMATIONS, sal_True, sal_True ); |
| |
| do |
| { |
| XMLEffectHint& rEffect = *aIter; |
| |
| DBG_ASSERT( rEffect.mxShape.is(), "shape id creation failed for animation effect?" ); |
| |
| rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_SHAPE_ID, rExport.getInterfaceToIdentifierMapper().getIdentifier( rEffect.mxShape ) ); |
| |
| if( rEffect.meKind == XMLE_DIM ) |
| { |
| // export a dim action; |
| |
| SvXMLUnitConverter::convertColor( sTmp, rEffect.maDimColor ); |
| rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_COLOR, sTmp.makeStringAndClear() ); |
| |
| SvXMLElementExport aElem( rExport, XML_NAMESPACE_PRESENTATION, XML_DIM, sal_True, sal_True ); |
| } |
| else if( rEffect.meKind == XMLE_PLAY ) |
| { |
| if( rEffect.meSpeed != AnimationSpeed_MEDIUM ) |
| { |
| SvXMLUnitConverter::convertEnum( sTmp, rEffect.meSpeed, aXML_AnimationSpeed_EnumMap ); |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_SPEED, sTmp.makeStringAndClear() ); |
| } |
| |
| SvXMLElementExport aElem( rExport, XML_NAMESPACE_PRESENTATION, XML_PLAY, sal_True, sal_True ); |
| } |
| else |
| { |
| |
| if( rEffect.meEffect != EK_none ) |
| { |
| SvXMLUnitConverter::convertEnum( sTmp, rEffect.meEffect, aXML_AnimationEffect_EnumMap ); |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_EFFECT, sTmp.makeStringAndClear() ); |
| } |
| |
| if( rEffect.meDirection != ED_none ) |
| { |
| SvXMLUnitConverter::convertEnum( sTmp, rEffect.meDirection, aXML_AnimationDirection_EnumMap ); |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_DIRECTION, sTmp.makeStringAndClear() ); |
| } |
| |
| if( rEffect.mnStartScale != -1 ) |
| { |
| SvXMLUnitConverter::convertPercent( sTmp, rEffect.mnStartScale ); |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_START_SCALE, sTmp.makeStringAndClear() ); |
| } |
| |
| if( rEffect.meSpeed != AnimationSpeed_MEDIUM ) |
| { |
| SvXMLUnitConverter::convertEnum( sTmp, rEffect.meSpeed, aXML_AnimationSpeed_EnumMap ); |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_SPEED, sTmp.makeStringAndClear() ); |
| } |
| |
| if( rEffect.mnPathShapeId != -1 ) |
| { |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_PATH_ID, OUString::valueOf( rEffect.mnPathShapeId ) ); |
| } |
| |
| enum XMLTokenEnum eLocalName; |
| if( rEffect.meKind == XMLE_SHOW ) |
| { |
| if( rEffect.mbTextEffect ) |
| eLocalName = XML_SHOW_TEXT; |
| else |
| eLocalName = XML_SHOW_SHAPE; |
| } |
| else |
| { |
| if( rEffect.mbTextEffect ) |
| eLocalName = XML_HIDE_TEXT; |
| else |
| eLocalName = XML_HIDE_SHAPE; |
| } |
| |
| SvXMLElementExport aEle( rExport, XML_NAMESPACE_PRESENTATION, eLocalName, sal_True, sal_True ); |
| if( rEffect.maSoundURL.getLength() != 0 ) |
| { |
| rExport.AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, rExport.GetRelativeReference(rEffect.maSoundURL) ); |
| rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE ); |
| rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, XML_NEW ); |
| rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONREQUEST ); |
| if( rEffect.mbPlayFull ) |
| rExport.AddAttribute( XML_NAMESPACE_PRESENTATION, XML_PLAY_FULL, XML_TRUE ); |
| |
| SvXMLElementExport aElem( rExport, XML_NAMESPACE_PRESENTATION, XML_SOUND, sal_True, sal_True ); |
| } |
| } |
| |
| aIter++; |
| } |
| while( aIter != aEnd ); |
| } |
| |
| mpImpl->maEffects.clear(); |
| } |