1*aaef562fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*aaef562fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*aaef562fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*aaef562fSAndrew Rist  * distributed with this work for additional information
6*aaef562fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*aaef562fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*aaef562fSAndrew Rist  * "License"); you may not use this file except in compliance
9*aaef562fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*aaef562fSAndrew Rist  *
11*aaef562fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*aaef562fSAndrew Rist  *
13*aaef562fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*aaef562fSAndrew Rist  * software distributed under the License is distributed on an
15*aaef562fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*aaef562fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*aaef562fSAndrew Rist  * specific language governing permissions and limitations
18*aaef562fSAndrew Rist  * under the License.
19*aaef562fSAndrew Rist  *
20*aaef562fSAndrew Rist  *************************************************************/
21*aaef562fSAndrew Rist 
22*aaef562fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef INCLUDED_SLIDESHOW_REHEARSETIMINGSACTIVITY_HXX
25cdf0e10cSrcweir #define INCLUDED_SLIDESHOW_REHEARSETIMINGSACTIVITY_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "activity.hxx"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <basegfx/range/b2drange.hxx>
30cdf0e10cSrcweir #include <boost/shared_ptr.hpp>
31cdf0e10cSrcweir #include <boost/enable_shared_from_this.hpp>
32cdf0e10cSrcweir #include <boost/noncopyable.hpp>
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include <vector>
35cdf0e10cSrcweir #include <utility>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir class Font;
38cdf0e10cSrcweir namespace canvas{ namespace tools{ class ElapsedTime; }}
39cdf0e10cSrcweir namespace cppcanvas{ class CustomSprite; }
40cdf0e10cSrcweir namespace basegfx
41cdf0e10cSrcweir {
42cdf0e10cSrcweir     class B2IVector;
43cdf0e10cSrcweir     class B2DRange;
44cdf0e10cSrcweir }
45cdf0e10cSrcweir 
46cdf0e10cSrcweir namespace slideshow {
47cdf0e10cSrcweir namespace internal {
48cdf0e10cSrcweir 
49cdf0e10cSrcweir struct SlideShowContext;
50cdf0e10cSrcweir class EventMultiplexer;
51cdf0e10cSrcweir class ScreenUpdater;
52cdf0e10cSrcweir class RehearseTimingsActivity : public Activity,
53cdf0e10cSrcweir                                 public ViewEventHandler,
54cdf0e10cSrcweir                                 public boost::enable_shared_from_this<RehearseTimingsActivity>,
55cdf0e10cSrcweir                                 private ::boost::noncopyable
56cdf0e10cSrcweir {
57cdf0e10cSrcweir public:
58cdf0e10cSrcweir     /** Creates the activity.
59cdf0e10cSrcweir      */
60cdf0e10cSrcweir     static boost::shared_ptr<RehearseTimingsActivity> create(
61cdf0e10cSrcweir         const SlideShowContext& rContext );
62cdf0e10cSrcweir 
63cdf0e10cSrcweir     virtual ~RehearseTimingsActivity();
64cdf0e10cSrcweir 
65cdf0e10cSrcweir     /** Starts and shows the timer; adds to activity queue.
66cdf0e10cSrcweir      */
67cdf0e10cSrcweir     void start();
68cdf0e10cSrcweir 
69cdf0e10cSrcweir     /** Stops and hides the timer.
70cdf0e10cSrcweir         @return elapsed time
71cdf0e10cSrcweir      */
72cdf0e10cSrcweir     double stop();
73cdf0e10cSrcweir 
74cdf0e10cSrcweir     /** Determines whether the timer button has been clicked.
75cdf0e10cSrcweir      */
76cdf0e10cSrcweir     bool hasBeenClicked() const;
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     // ViewEventHandler interface
79cdf0e10cSrcweir     virtual void viewAdded( const UnoViewSharedPtr& rView );
80cdf0e10cSrcweir     virtual void viewRemoved( const UnoViewSharedPtr& rView );
81cdf0e10cSrcweir     virtual void viewChanged( const UnoViewSharedPtr& rView );
82cdf0e10cSrcweir     virtual void viewsChanged();
83cdf0e10cSrcweir 
84cdf0e10cSrcweir     // Disposable:
85cdf0e10cSrcweir     virtual void dispose();
86cdf0e10cSrcweir     // Activity:
87cdf0e10cSrcweir     virtual double calcTimeLag() const;
88cdf0e10cSrcweir     virtual bool perform();
89cdf0e10cSrcweir     virtual bool isActive() const;
90cdf0e10cSrcweir     virtual void dequeued();
91cdf0e10cSrcweir     virtual void end();
92cdf0e10cSrcweir 
93cdf0e10cSrcweir private:
94cdf0e10cSrcweir     class WakeupEvent;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir     explicit RehearseTimingsActivity( const SlideShowContext& rContext );
97cdf0e10cSrcweir 
98cdf0e10cSrcweir     void paint( ::cppcanvas::CanvasSharedPtr const & canvas ) const;
99cdf0e10cSrcweir     void paintAllSprites() const;
100cdf0e10cSrcweir 
101cdf0e10cSrcweir     class MouseHandler;
102cdf0e10cSrcweir     friend class MouseHandler;
103cdf0e10cSrcweir 
104cdf0e10cSrcweir     typedef ::std::vector<
105cdf0e10cSrcweir         ::std::pair<UnoViewSharedPtr,
106cdf0e10cSrcweir                     boost::shared_ptr<cppcanvas::CustomSprite> > > ViewsVecT;
107cdf0e10cSrcweir 
108cdf0e10cSrcweir     template <typename func_type>
for_each_sprite(func_type const & func) const109cdf0e10cSrcweir     void for_each_sprite( func_type const & func ) const
110cdf0e10cSrcweir     {
111cdf0e10cSrcweir         ViewsVecT::const_iterator iPos( maViews.begin() );
112cdf0e10cSrcweir         const ViewsVecT::const_iterator iEnd( maViews.end() );
113cdf0e10cSrcweir         for ( ; iPos != iEnd; ++iPos )
114cdf0e10cSrcweir             func( iPos->second );
115cdf0e10cSrcweir     }
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     ::basegfx::B2DRange calcSpriteRectangle(
118cdf0e10cSrcweir         UnoViewSharedPtr const & rView ) const;
119cdf0e10cSrcweir 
120cdf0e10cSrcweir     EventQueue&                     mrEventQueue;
121cdf0e10cSrcweir     ScreenUpdater&                  mrScreenUpdater;
122cdf0e10cSrcweir     EventMultiplexer&               mrEventMultiplexer;
123cdf0e10cSrcweir     ActivitiesQueue&                mrActivitiesQueue;
124cdf0e10cSrcweir     canvas::tools::ElapsedTime      maElapsedTime;
125cdf0e10cSrcweir 
126cdf0e10cSrcweir     ViewsVecT                       maViews;
127cdf0e10cSrcweir 
128cdf0e10cSrcweir     /// screen rect of sprite (in view coordinates!)
129cdf0e10cSrcweir     ::basegfx::B2DRange             maSpriteRectangle;
130cdf0e10cSrcweir 
131cdf0e10cSrcweir     Font                            maFont;
132cdf0e10cSrcweir     boost::shared_ptr<WakeupEvent>  mpWakeUpEvent;
133cdf0e10cSrcweir     boost::shared_ptr<MouseHandler> mpMouseHandler;
134cdf0e10cSrcweir     ::basegfx::B2IVector            maSpriteSizePixel;
135cdf0e10cSrcweir     sal_Int32                       mnYOffset;
136cdf0e10cSrcweir     bool                            mbActive;
137cdf0e10cSrcweir     bool                            mbDrawPressed;
138cdf0e10cSrcweir };
139cdf0e10cSrcweir 
140cdf0e10cSrcweir } // namespace internal
141cdf0e10cSrcweir } // namespace presentation
142cdf0e10cSrcweir 
143cdf0e10cSrcweir #endif /* INCLUDED_SLIDESHOW_REHEARSETIMINGSACTIVITY_HXX */
144