1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: PresenterAnimation.hxx,v $
13 * This file is part of OpenOffice.org.
15 * OpenOffice.org is free software: you can redistribute it and/or modify
16 * it under the terms of the GNU Lesser General Public License version 3
17 * only, as published by the Free Software Foundation.
19 * OpenOffice.org is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU Lesser General Public License version 3 for more details
23 * (a copy is included in the LICENSE file that accompanied this code).
25 * You should have received a copy of the GNU Lesser General Public License
26 * version 3 along with OpenOffice.org. If not, see
27 * <http://www.openoffice.org/license.html>
28 * for a copy of the LGPLv3 License.
30 ************************************************************************/
32 #ifndef SDEXT_PRESENTER_ANIMATION_HXX
33 #define SDEXT_PRESENTER_ANIMATION_HXX
35 #include <sal/types.h>
36 #include <boost/function.hpp>
37 #include <boost/noncopyable.hpp>
38 #include <boost/scoped_ptr.hpp>
39 #include <boost/shared_ptr.hpp>
42 namespace sdext
{ namespace presenter
{
44 /** Base class for animations handled by a PresenterAnimator object.
45 A PresenterAnimation objects basically states when it wants to be
46 started, how long it runs, and in what steps it wants to be called back
48 When a PresenterAnimation object is active/running its Run() method is
49 called back with increasing values between 0 and 1.
51 class PresenterAnimation
52 : private ::boost::noncopyable
55 /** Create a new PresenterAnimation object.
57 The delay in ms (milliseconds) from this call until the new
58 object is to be activated.
60 The duration in ms the Run() method is to be called with
61 increasing values between 0 and 1.
63 The duration between calls to Run(). This leads to approximately
64 nTotalDuration/nStepDuration calls to Run(). The exact duration
65 of each step may vary depending on system load an other influences.
68 const sal_uInt64 nStartDelay
,
69 const sal_uInt64 nTotalDuration
,
70 const sal_uInt64 nStepDuration
);
71 virtual ~PresenterAnimation (void);
73 /** Return the absolute start time in a system dependent format.
74 At about this time the Run() method will be called with a value of 0.
76 sal_uInt64
GetStartTime (void);
78 /** Return the absolute end time in a system dependent format.
79 At about this time the Run() method will be called with a value of 1.
81 sal_uInt64
GetEndTime (void);
83 /** Return the duration of each step in ms.
85 sal_uInt64
GetStepDuration (void);
87 typedef ::boost::function
<void(void)> Callback
;
89 /** Add a callback that is executed before Run() is called for the first
92 void AddStartCallback (const Callback
& rCallback
);
94 /** Add a callback that is executed after Run() is called for the last
97 void AddEndCallback (const Callback
& rCallback
);
99 /** Called with nProgress taking on values between 0 and 1.
101 A value between 0 and 1.
103 Current time in a system dependent format.
105 virtual void Run (const double nProgress
, const sal_uInt64 nCurrentTime
) = 0;
107 /** Called just before Run() is called for the first time to trigger the
108 callbacks registered via the <method>AddStartCallback()</method>.
110 void RunStartCallbacks (void);
112 /** Called just after Run() is called for the last time to trigger the
113 callbacks registered via the <method>AddEndCallback()</method>.
115 void RunEndCallbacks (void);
118 const sal_uInt64 mnStartTime
;
119 const sal_uInt64 mnTotalDuration
;
120 const sal_uInt64 mnStepDuration
;
121 ::boost::scoped_ptr
<std::vector
<Callback
> > mpStartCallbacks
;
122 ::boost::scoped_ptr
<std::vector
<Callback
> > mpEndCallbacks
;
125 sal_uInt64
GetCurrentTime (void);
126 inline sal_uInt32
GetSeconds (const sal_uInt64 nTime
) { return sal_uInt32(nTime
/ 1000); }
127 inline sal_uInt32
GetNanoSeconds (const sal_uInt64 nTime
) { return sal_uInt32((nTime
% 1000) * 1000000); }
129 typedef ::boost::shared_ptr
<PresenterAnimation
> SharedPresenterAnimation
;
132 } } // end of namespace ::sdext::presenter