diff options
Diffstat (limited to 'slideshow/source/engine/animationnodes/animationaudionode.cxx')
-rw-r--r-- | slideshow/source/engine/animationnodes/animationaudionode.cxx | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/slideshow/source/engine/animationnodes/animationaudionode.cxx b/slideshow/source/engine/animationnodes/animationaudionode.cxx deleted file mode 100644 index a03336650..000000000 --- a/slideshow/source/engine/animationnodes/animationaudionode.cxx +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_slideshow.hxx" - -// must be first -#include <canvas/debug.hxx> -#include <canvas/verbosetrace.hxx> - -#include "eventqueue.hxx" -#include "animationaudionode.hxx" -#include "delayevent.hxx" -#include "tools.hxx" -#include "nodetools.hxx" -#include "boost/bind.hpp" - -using namespace com::sun::star; - -namespace slideshow { -namespace internal { - -AnimationAudioNode::AnimationAudioNode( - const uno::Reference< animations::XAnimationNode >& xNode, - const BaseContainerNodeSharedPtr& rParent, - const NodeContext& rContext ) - : BaseNode( xNode, rParent, rContext ), - mxAudioNode( xNode, uno::UNO_QUERY_THROW ), - maSoundURL(), - mpPlayer() -{ - mxAudioNode->getSource() >>= maSoundURL; - - OSL_ENSURE( maSoundURL.getLength(), - "could not extract sound source URL/empty URL string" ); - - ENSURE_OR_THROW( getContext().mxComponentContext.is(), - "Invalid component context" ); -} - -void AnimationAudioNode::dispose() -{ - resetPlayer(); - mxAudioNode.clear(); - BaseNode::dispose(); -} - -void AnimationAudioNode::activate_st() -{ - createPlayer(); - - AnimationEventHandlerSharedPtr aHandler( - boost::dynamic_pointer_cast<AnimationEventHandler>( getSelf() ) ); - OSL_ENSURE( aHandler, - "could not cast self to AnimationEventHandler?" ); - getContext().mrEventMultiplexer.addCommandStopAudioHandler( aHandler ); - - if (mpPlayer && mpPlayer->startPlayback()) - { - // TODO(F2): Handle end time attribute, too - if( getXAnimationNode()->getDuration().hasValue() ) - { - scheduleDeactivationEvent(); - } - else - { - // no node duration. Take inherent media time, then - scheduleDeactivationEvent( - makeDelay( boost::bind( &AnimationNode::deactivate, getSelf() ), - mpPlayer->getDuration(), - "AnimationAudioNode::deactivate with delay") ); - } - } - else - { - // deactivate ASAP: - scheduleDeactivationEvent( - makeEvent( boost::bind( &AnimationNode::deactivate, getSelf() ), - "AnimationAudioNode::deactivate without delay") ); - } -} - -// TODO(F2): generate deactivation event, when sound -// is over - -void AnimationAudioNode::deactivate_st( NodeState /*eDestState*/ ) -{ - AnimationEventHandlerSharedPtr aHandler( - boost::dynamic_pointer_cast<AnimationEventHandler>( getSelf() ) ); - OSL_ENSURE( aHandler, - "could not cas self to AnimationEventHandler?" ); - getContext().mrEventMultiplexer.removeCommandStopAudioHandler( aHandler ); - - // force-end sound - if (mpPlayer) - { - mpPlayer->stopPlayback(); - resetPlayer(); - } - - // notify _after_ state change: - getContext().mrEventQueue.addEvent( - makeEvent( boost::bind( &EventMultiplexer::notifyAudioStopped, - boost::ref(getContext().mrEventMultiplexer), - getSelf() ), - "AnimationAudioNode::notifyAudioStopped") ); -} - -bool AnimationAudioNode::hasPendingAnimation() const -{ - // force slide to use the animation framework - // (otherwise, a single sound on the slide would - // not be played). - return true; -} - -void AnimationAudioNode::createPlayer() const -{ - if (mpPlayer) - return; - - try - { - mpPlayer = SoundPlayer::create( getContext().mrEventMultiplexer, - maSoundURL, - getContext().mxComponentContext ); - } - catch( lang::NoSupportException& ) - { - // catch possible exceptions from SoundPlayer, - // since being not able to playback the sound - // is not a hard error here (remainder of the - // animations should still work). - } -} - -void AnimationAudioNode::resetPlayer() const -{ - if (mpPlayer) - { - mpPlayer->stopPlayback(); - mpPlayer->dispose(); - mpPlayer.reset(); - } -} - -bool AnimationAudioNode::handleAnimationEvent( - const AnimationNodeSharedPtr& /*rNode*/ ) -{ - // TODO(F2): for now we support only STOPAUDIO events. - deactivate(); - return true; -} - -} // namespace internal -} // namespace presentation - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |