xref: /trunk/main/sdext/source/presenter/PresenterCurrentSlideObserver.cxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sdext.hxx"
26 
27 #include "PresenterCurrentSlideObserver.hxx"
28 
29 using namespace ::com::sun::star;
30 using namespace ::com::sun::star::uno;
31 using ::rtl::OUString;
32 
33 namespace sdext { namespace presenter {
34 
35 //===== PresenterCurrentSlideObserver =========================================
36 
PresenterCurrentSlideObserver(const::rtl::Reference<PresenterController> & rxPresenterController,const Reference<presentation::XSlideShowController> & rxSlideShowController)37 PresenterCurrentSlideObserver::PresenterCurrentSlideObserver (
38     const ::rtl::Reference<PresenterController>& rxPresenterController,
39     const Reference<presentation::XSlideShowController>& rxSlideShowController)
40     : PresenterCurrentSlideObserverInterfaceBase(m_aMutex),
41       mpPresenterController(rxPresenterController),
42       mxSlideShowController(rxSlideShowController)
43 {
44     if( mpPresenterController.is() )
45     {
46         mpPresenterController->addEventListener(this);
47     }
48 
49     if( mxSlideShowController.is() )
50     {
51         // Listen for events from the slide show controller.
52         mxSlideShowController->addSlideShowListener(static_cast<XSlideShowListener*>(this));
53     }
54 }
55 
~PresenterCurrentSlideObserver(void)56 PresenterCurrentSlideObserver::~PresenterCurrentSlideObserver (void)
57 {
58 }
59 
disposing(void)60 void SAL_CALL PresenterCurrentSlideObserver::disposing (void)
61 {
62     // Disconnect form the slide show controller.
63     if(mxSlideShowController.is())
64     {
65         mxSlideShowController->removeSlideShowListener(static_cast<XSlideShowListener*>(this));
66         mxSlideShowController = NULL;
67     }
68 }
69 
70 //----- XSlideShowListener ----------------------------------------------------
71 
beginEvent(const Reference<animations::XAnimationNode> & rNode)72 void SAL_CALL PresenterCurrentSlideObserver::beginEvent (
73     const Reference<animations::XAnimationNode>& rNode)
74 {
75     (void)rNode;
76 }
77 
endEvent(const Reference<animations::XAnimationNode> & rNode)78 void SAL_CALL PresenterCurrentSlideObserver::endEvent (
79     const Reference<animations::XAnimationNode>& rNode)
80 {
81     (void)rNode;
82 }
83 
repeat(const css::uno::Reference<css::animations::XAnimationNode> & rNode,sal_Int32)84 void SAL_CALL PresenterCurrentSlideObserver::repeat (
85     const css::uno::Reference<css::animations::XAnimationNode>& rNode,
86     sal_Int32)
87 {
88     (void)rNode;
89 }
90 
paused(void)91 void SAL_CALL PresenterCurrentSlideObserver::paused (void)
92 {
93 }
94 
resumed(void)95 void SAL_CALL PresenterCurrentSlideObserver::resumed (void)
96 {
97 }
98 
slideEnded(sal_Bool bReverse)99 void SAL_CALL PresenterCurrentSlideObserver::slideEnded (sal_Bool bReverse)
100 {
101     // Determine whether the new current slide (the one after the one that
102     // just ended) is the slide past the last slide in the presentation,
103     // i.e. the one that says something like "click to end presentation...".
104     if (mxSlideShowController.is() && !bReverse)
105         if (mxSlideShowController->getNextSlideIndex() < 0)
106             if( mpPresenterController.is() )
107                 mpPresenterController->UpdateCurrentSlide(+1);
108 }
109 
hyperLinkClicked(const rtl::OUString &)110 void SAL_CALL PresenterCurrentSlideObserver::hyperLinkClicked (const rtl::OUString &)
111 {
112 }
113 
slideTransitionStarted(void)114 void SAL_CALL PresenterCurrentSlideObserver::slideTransitionStarted (void)
115 {
116     if( mpPresenterController.is() )
117         mpPresenterController->UpdateCurrentSlide(0);
118 }
119 
slideTransitionEnded(void)120 void SAL_CALL PresenterCurrentSlideObserver::slideTransitionEnded (void)
121 {
122 }
123 
slideAnimationsEnded(void)124 void SAL_CALL PresenterCurrentSlideObserver::slideAnimationsEnded (void)
125 {
126 }
127 
128 //----- XEventListener --------------------------------------------------------
129 
disposing(const lang::EventObject & rEvent)130 void SAL_CALL PresenterCurrentSlideObserver::disposing (
131     const lang::EventObject& rEvent)
132 {
133     if (rEvent.Source == Reference<XInterface>(static_cast<XWeak*>(mpPresenterController.get())))
134         dispose();
135     else if (rEvent.Source == mxSlideShowController)
136         mxSlideShowController = NULL;
137 }
138 
139 } } // end of namespace ::sdext::presenter
140