Files
libreoffice/slideshow/source/engine/animationnodes/setactivity.hxx
Kurt Zenker 9c56500643 INTEGRATION: CWS presfixes09 (1.6.16); FILE MERGED
2006/04/24 13:25:29 thb 1.6.16.3: #i53194# Unified include statements (local headers always have double quotes; external headers angle brackets); reverted EventMultiplexer pause events to shared_ptr; removed EventMultiplexer::removeViewHandler(), since the handler is held weakly, anyway.
2006/04/12 20:40:08 thb 1.6.16.2: #i37778# Replaced all shared_ptr.get() != NULL places with the more elegant automatic-conversion-to-bool version (at least where the compiler tolerated that)
2006/03/24 18:23:20 thb 1.6.16.1: #i37778# Moved whole slideshow engine from namespace presentation (which conflicts with one of the UNO subnamespaces) to slideshow
2006-12-13 14:35:35 +00:00

168 lines
4.9 KiB
C++

/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: setactivity.hxx,v $
*
* $Revision: 1.7 $
*
* last change: $Author: kz $ $Date: 2006-12-13 15:35:35 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
#ifndef INCLUDED_SLIDESHOW_SETACTIVITY_HXX
#define INCLUDED_SLIDESHOW_SETACTIVITY_HXX
// must be first
#include <canvas/debug.hxx>
#include <canvas/verbosetrace.hxx>
#include "animationactivity.hxx"
#include "animation.hxx"
#include "animatableshape.hxx"
#include "shapeattributelayer.hxx"
#include "activitiesfactory.hxx"
namespace slideshow {
namespace internal {
/** Templated setter for animation values
This template class implements the AnimationActivity
interface, but only the perform() and
setAttributeLayer() methods are functional. To be used for set animations.
@see AnimationSetNode.
*/
template <class AnimationT>
class SetActivity : public AnimationActivity
{
public:
typedef ::boost::shared_ptr< AnimationT > AnimationSharedPtrT;
typedef typename AnimationT::ValueType ValueT;
SetActivity( const ActivitiesFactory::CommonParameters& rParms,
const AnimationSharedPtrT& rAnimation,
const ValueT& rToValue )
: mpAnimation( rAnimation ),
mpShape(),
mpAttributeLayer(),
mpEndEvent( rParms.mpEndEvent ),
mrEventQueue( rParms.mrEventQueue ),
maToValue( rToValue ),
mbIsActive(true)
{
ENSURE_AND_THROW( mpAnimation, "Invalid animation" );
}
virtual void dispose()
{
mbIsActive = false;
mpAnimation.reset();
mpShape.reset();
mpAttributeLayer.reset();
// discharge end event:
if (mpEndEvent && mpEndEvent->isCharged())
mpEndEvent->dispose();
mpEndEvent.reset();
}
virtual double calcTimeLag() const
{
return 0.0;
}
virtual bool perform()
{
if (! isActive())
return false;
// we're going inactive immediately:
mbIsActive = false;
if (mpAnimation && mpAttributeLayer && mpShape) {
mpAnimation->start( mpShape, mpAttributeLayer );
(*mpAnimation)(maToValue);
mpAnimation->end();
}
// fire end event, if any
if (mpEndEvent)
mrEventQueue.addEvent( mpEndEvent );
return false; // don't reinsert
}
virtual bool isActive() const
{
return mbIsActive;
}
virtual bool needsScreenUpdate() const
{
return true;
}
virtual void dequeued()
{
}
virtual void end()
{
perform();
}
virtual void setTargets( const AnimatableShapeSharedPtr& rShape,
const ShapeAttributeLayerSharedPtr& rAttrLayer )
{
ENSURE_AND_THROW( rShape, "Invalid shape" );
ENSURE_AND_THROW( rAttrLayer, "Invalid attribute layer" );
mpShape = rShape;
mpAttributeLayer = rAttrLayer;
}
private:
AnimationSharedPtrT mpAnimation;
AnimatableShapeSharedPtr mpShape;
ShapeAttributeLayerSharedPtr mpAttributeLayer;
EventSharedPtr mpEndEvent;
EventQueue& mrEventQueue;
ValueT maToValue;
bool mbIsActive;
};
template <class AnimationT> AnimationActivitySharedPtr makeSetActivity(
const ActivitiesFactory::CommonParameters& rParms,
const ::boost::shared_ptr< AnimationT >& rAnimation,
const typename AnimationT::ValueType& rToValue )
{
return AnimationActivitySharedPtr(
new SetActivity<AnimationT>(rParms,rAnimation,rToValue) );
}
} // namespace internal
} // namespace presentation
#endif /* INCLUDED_SLIDESHOW_SETACTIVITY_HXX */