1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include "PresenterCurrentSlideObserver.hxx"
21 
22 using namespace ::com::sun::star;
23 using namespace ::com::sun::star::uno;
24 
25 namespace sdext::presenter {
26 
27 //===== PresenterCurrentSlideObserver =========================================
28 
PresenterCurrentSlideObserver(const::rtl::Reference<PresenterController> & rxPresenterController,const Reference<presentation::XSlideShowController> & rxSlideShowController)29 PresenterCurrentSlideObserver::PresenterCurrentSlideObserver (
30     const ::rtl::Reference<PresenterController>& rxPresenterController,
31     const Reference<presentation::XSlideShowController>& rxSlideShowController)
32     : PresenterCurrentSlideObserverInterfaceBase(m_aMutex),
33       mpPresenterController(rxPresenterController),
34       mxSlideShowController(rxSlideShowController)
35 {
36     if( mpPresenterController.is() )
37     {
38         mpPresenterController->addEventListener(this);
39     }
40 
41     if( mxSlideShowController.is() )
42     {
43         // Listen for events from the slide show controller.
44         mxSlideShowController->addSlideShowListener(static_cast<XSlideShowListener*>(this));
45     }
46 }
47 
~PresenterCurrentSlideObserver()48 PresenterCurrentSlideObserver::~PresenterCurrentSlideObserver()
49 {
50 }
51 
disposing()52 void SAL_CALL PresenterCurrentSlideObserver::disposing()
53 {
54     // Disconnect form the slide show controller.
55     if(mxSlideShowController.is())
56     {
57         mxSlideShowController->removeSlideShowListener(static_cast<XSlideShowListener*>(this));
58         mxSlideShowController = nullptr;
59     }
60 
61     if (mpPresenterController.is())
62         mpPresenterController->removeEventListener(this);
63 }
64 
65 //----- XSlideShowListener ----------------------------------------------------
66 
beginEvent(const Reference<animations::XAnimationNode> &)67 void SAL_CALL PresenterCurrentSlideObserver::beginEvent (
68     const Reference<animations::XAnimationNode>&)
69 {}
70 
endEvent(const Reference<animations::XAnimationNode> &)71 void SAL_CALL PresenterCurrentSlideObserver::endEvent (
72     const Reference<animations::XAnimationNode>&)
73 {}
74 
repeat(const css::uno::Reference<css::animations::XAnimationNode> &,sal_Int32)75 void SAL_CALL PresenterCurrentSlideObserver::repeat (
76     const css::uno::Reference<css::animations::XAnimationNode>&,
77     sal_Int32)
78 {}
79 
paused()80 void SAL_CALL PresenterCurrentSlideObserver::paused()
81 {
82 }
83 
resumed()84 void SAL_CALL PresenterCurrentSlideObserver::resumed()
85 {
86 }
87 
slideEnded(sal_Bool bReverse)88 void SAL_CALL PresenterCurrentSlideObserver::slideEnded (sal_Bool bReverse)
89 {
90     // Determine whether the new current slide (the one after the one that
91     // just ended) is the slide past the last slide in the presentation,
92     // i.e. the one that says something like "click to end presentation...".
93     if (mxSlideShowController.is() && !bReverse)
94         if (mxSlideShowController->getNextSlideIndex() < 0)
95             if( mpPresenterController.is() )
96                 mpPresenterController->UpdateCurrentSlide(+1);
97 }
98 
hyperLinkClicked(const OUString &)99 void SAL_CALL PresenterCurrentSlideObserver::hyperLinkClicked (const OUString &)
100 {
101 }
102 
slideTransitionStarted()103 void SAL_CALL PresenterCurrentSlideObserver::slideTransitionStarted()
104 {
105     if( mpPresenterController.is() )
106         mpPresenterController->UpdateCurrentSlide(0);
107 }
108 
slideTransitionEnded()109 void SAL_CALL PresenterCurrentSlideObserver::slideTransitionEnded()
110 {
111 }
112 
slideAnimationsEnded()113 void SAL_CALL PresenterCurrentSlideObserver::slideAnimationsEnded()
114 {
115 }
116 
117 //----- XEventListener --------------------------------------------------------
118 
disposing(const lang::EventObject & rEvent)119 void SAL_CALL PresenterCurrentSlideObserver::disposing (
120     const lang::EventObject& rEvent)
121 {
122     if (rEvent.Source == Reference<XInterface>(static_cast<XWeak*>(mpPresenterController.get())))
123         dispose();
124     else if (rEvent.Source == mxSlideShowController)
125         mxSlideShowController = nullptr;
126 }
127 
128 } // end of namespace ::sdext::presenter
129 
130 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
131