1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include "oox/ppt/soundactioncontext.hxx" 25 26 #include "comphelper/anytostring.hxx" 27 #include "cppuhelper/exc_hlp.hxx" 28 29 #include "oox/helper/attributelist.hxx" 30 #include "oox/helper/propertymap.hxx" 31 #include "oox/drawingml/embeddedwavaudiofile.hxx" 32 33 using rtl::OUString; 34 using namespace ::oox::core; 35 using namespace ::com::sun::star::xml::sax; 36 using namespace ::com::sun::star::uno; 37 38 39 namespace oox { namespace ppt { 40 41 SoundActionContext(ContextHandler & rParent,PropertyMap & aProperties)42 SoundActionContext::SoundActionContext( ContextHandler& rParent, PropertyMap & aProperties ) throw() 43 : ContextHandler( rParent ) 44 , maSlideProperties( aProperties ) 45 , mbHasStartSound( false ) 46 , mbLoopSound( false ) 47 , mbStopSound( false ) 48 { 49 } 50 51 ~SoundActionContext()52 SoundActionContext::~SoundActionContext() throw() 53 { 54 } 55 56 endFastElement(sal_Int32 aElement)57 void SoundActionContext::endFastElement( sal_Int32 aElement ) throw (SAXException, RuntimeException) 58 { 59 if ( aElement == PPT_TOKEN( sndAc ) ) 60 { 61 if( mbHasStartSound ) 62 { 63 OUString url; 64 // TODO this is very wrong 65 if ( msSndName.getLength() != 0 ) 66 { 67 // try the builtIn version 68 url = msSndName; 69 } 70 #if 0 // OOo does not support embedded data yet 71 else if ( msEmbedded.getLength() != 0 ) 72 { 73 RelationsRef xRel = getHandler()->getRelations(); 74 url = xRel->getRelationById( msEmbedded )->msTarget; 75 } 76 else if ( msLink.getLength() != 0 ) 77 { 78 url = msLink; 79 } 80 #endif 81 if ( url.getLength() != 0 ) 82 { 83 maSlideProperties[ PROP_Sound ] <<= url; 84 maSlideProperties[ PROP_SoundOn ] <<= sal_True; 85 } 86 } 87 // else if( mbStopSound ) 88 // { 89 // maSlideProperties[ CREATE_OUSTRING( "" ) ] = Any( sal_True ); 90 // } 91 } 92 } 93 94 createFastChildContext(::sal_Int32 aElement,const Reference<XFastAttributeList> & xAttribs)95 Reference< XFastContextHandler > SoundActionContext::createFastChildContext( ::sal_Int32 aElement, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) 96 { 97 Reference< XFastContextHandler > xRet; 98 AttributeList attribs(xAttribs); 99 100 switch( aElement ) 101 { 102 case PPT_TOKEN( snd ): 103 if( mbHasStartSound ) 104 { 105 drawingml::EmbeddedWAVAudioFile aAudio; 106 drawingml::getEmbeddedWAVAudioFile( getRelations(), xAttribs, aAudio); 107 108 msSndName = ( aAudio.mbBuiltIn ? aAudio.msName : aAudio.msEmbed ); 109 } 110 break; 111 case PPT_TOKEN( endSnd ): 112 // CT_Empty 113 mbStopSound = true; 114 break; 115 case PPT_TOKEN( stSnd ): 116 mbHasStartSound = true; 117 mbLoopSound = attribs.getBool( XML_loop, false ); 118 default: 119 break; 120 } 121 122 if( !xRet.is() ) 123 xRet.set( this ); 124 125 return xRet; 126 } 127 128 129 130 } } 131