LCOV - code coverage report
Current view: top level - sdext/source/presenter - PresenterProtocolHandler.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 18 251 7.2 %
Date: 2015-06-13 12:38:46 Functions: 9 71 12.7 %
Legend: Lines: hit not hit

          Line data    Source code
       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 "PresenterProtocolHandler.hxx"
      21             : #include "PresenterConfigurationAccess.hxx"
      22             : #include "PresenterController.hxx"
      23             : #include "PresenterHelper.hxx"
      24             : #include "PresenterNotesView.hxx"
      25             : #include "PresenterPaneContainer.hxx"
      26             : #include "PresenterPaneFactory.hxx"
      27             : #include "PresenterViewFactory.hxx"
      28             : #include "PresenterWindowManager.hxx"
      29             : #include <com/sun/star/frame/XController.hpp>
      30             : #include <com/sun/star/drawing/SlideSorter.hpp>
      31             : #include <com/sun/star/drawing/framework/Configuration.hpp>
      32             : #include <com/sun/star/drawing/framework/XControllerManager.hpp>
      33             : #include <com/sun/star/drawing/framework/ResourceId.hpp>
      34             : #include <com/sun/star/drawing/framework/ResourceActivationMode.hpp>
      35             : #include <com/sun/star/presentation/XSlideShow.hpp>
      36             : #include <com/sun/star/presentation/XSlideShowView.hpp>
      37             : #include <com/sun/star/presentation/XPresentationSupplier.hpp>
      38             : #include <cppuhelper/compbase2.hxx>
      39             : #include <cppuhelper/supportsservice.hxx>
      40             : 
      41             : using namespace ::com::sun::star;
      42             : using namespace ::com::sun::star::uno;
      43             : using namespace ::com::sun::star::drawing::framework;
      44             : 
      45             : namespace sdext { namespace presenter {
      46             : 
      47             : namespace {
      48           0 :     class Command
      49             :     {
      50             :     public:
      51           0 :         virtual ~Command() {}
      52             :         virtual void Execute() = 0;
      53           0 :         virtual bool IsEnabled() const { return true; }
      54           0 :         virtual Any GetState() const { return Any(sal_False); }
      55             :     };
      56             : 
      57             :     class GotoPreviousSlideCommand : public Command
      58             :     {
      59             :     public:
      60             :         GotoPreviousSlideCommand (
      61             :             const rtl::Reference<PresenterController>& rpPresenterController);
      62           0 :         virtual ~GotoPreviousSlideCommand() {}
      63             :         virtual void Execute() SAL_OVERRIDE;
      64             :         virtual bool IsEnabled() const SAL_OVERRIDE;
      65             :     private:
      66             :         rtl::Reference<PresenterController> mpPresenterController;
      67             :     };
      68             : 
      69             :     class GotoNextSlideCommand : public Command
      70             :     {
      71             :     public:
      72             :         GotoNextSlideCommand (
      73             :             const rtl::Reference<PresenterController>& rpPresenterController);
      74           0 :         virtual ~GotoNextSlideCommand() {}
      75             :         virtual void Execute() SAL_OVERRIDE;
      76             :         // The next slide command is always enabled, even when the current slide
      77             :         // is the last slide:  from the last slide it goes to the pause slide,
      78             :         // and from there it ends the slide show.
      79           0 :         virtual bool IsEnabled() const SAL_OVERRIDE { return true; }
      80             :     private:
      81             :         rtl::Reference<PresenterController> mpPresenterController;
      82             :     };
      83             : 
      84             :     class GotoNextEffectCommand : public Command
      85             :     {
      86             :     public:
      87             :         GotoNextEffectCommand (
      88             :             const rtl::Reference<PresenterController>& rpPresenterController);
      89           0 :         virtual ~GotoNextEffectCommand() {}
      90             :         virtual void Execute() SAL_OVERRIDE;
      91             :     private:
      92             :         rtl::Reference<PresenterController> mpPresenterController;
      93             :     };
      94             : 
      95             :     class SwitchMonitorCommand : public Command
      96             :     {
      97             :     public:
      98             :         SwitchMonitorCommand (
      99             :             const rtl::Reference<PresenterController>& rpPresenterController);
     100           0 :         virtual ~SwitchMonitorCommand() {}
     101             :         virtual void Execute() SAL_OVERRIDE;
     102             :     private:
     103             :         rtl::Reference<PresenterController> mpPresenterController;
     104             :     };
     105             : 
     106             :     class SetNotesViewCommand : public Command
     107             :     {
     108             :     public:
     109             :         SetNotesViewCommand (
     110             :             const bool bOn,
     111             :             const rtl::Reference<PresenterController>& rpPresenterController);
     112           0 :         virtual ~SetNotesViewCommand() {}
     113             :         virtual void Execute() SAL_OVERRIDE;
     114             :         virtual Any GetState() const SAL_OVERRIDE;
     115             :     private:
     116             :         bool mbOn;
     117             :         rtl::Reference<PresenterController> mpPresenterController;
     118             :         static bool IsActive (const ::rtl::Reference<PresenterWindowManager>& rpWindowManager);
     119             :     };
     120             : 
     121             :     class SetSlideSorterCommand : public Command
     122             :     {
     123             :     public:
     124             :         SetSlideSorterCommand (
     125             :             const bool bOn,
     126             :             const rtl::Reference<PresenterController>& rpPresenterController);
     127           0 :         virtual ~SetSlideSorterCommand() {}
     128             :         virtual void Execute() SAL_OVERRIDE;
     129             :         virtual Any GetState() const SAL_OVERRIDE;
     130             :     private:
     131             :         bool mbOn;
     132             :         rtl::Reference<PresenterController> mpPresenterController;
     133             :     };
     134             : 
     135             :     class SetHelpViewCommand : public Command
     136             :     {
     137             :     public:
     138             :         SetHelpViewCommand (
     139             :             const bool bOn,
     140             :             const rtl::Reference<PresenterController>& rpPresenterController);
     141           0 :         virtual ~SetHelpViewCommand() {}
     142             :         virtual void Execute() SAL_OVERRIDE;
     143             :         virtual Any GetState() const SAL_OVERRIDE;
     144             :     private:
     145             :         bool mbOn;
     146             :         rtl::Reference<PresenterController> mpPresenterController;
     147             :     };
     148             : 
     149             :     class NotesFontSizeCommand : public Command
     150             :     {
     151             :     public:
     152             :         NotesFontSizeCommand(
     153             :             const rtl::Reference<PresenterController>& rpPresenterController,
     154             :             const sal_Int32 nSizeChange);
     155           0 :         virtual ~NotesFontSizeCommand() {}
     156             :         virtual void Execute() SAL_OVERRIDE;
     157             :         virtual Any GetState() const SAL_OVERRIDE;
     158             :     protected:
     159             :         ::rtl::Reference<PresenterNotesView> GetNotesView() const;
     160             :     private:
     161             :         rtl::Reference<PresenterController> mpPresenterController;
     162             :         const sal_Int32 mnSizeChange;
     163             :     };
     164             : 
     165             : } // end of anonymous namespace
     166             : 
     167             : namespace {
     168             :     typedef ::cppu::WeakComponentImplHelper2 <
     169             :         css::frame::XDispatch,
     170             :         css::document::XEventListener
     171             :         > PresenterDispatchInterfaceBase;
     172             : }
     173             : 
     174             : class PresenterProtocolHandler::Dispatch
     175             :     : protected ::cppu::BaseMutex,
     176             :       public PresenterDispatchInterfaceBase
     177             : {
     178             : public:
     179             :     typedef void (PresenterProtocolHandler::Dispatch::* Action)(void);
     180             : 
     181             :     /** Create a new Dispatch object.  When the given command name
     182             :         (rsURLPath) is not known then an empty reference is returned.
     183             :     */
     184             :     static Reference<frame::XDispatch> Create (
     185             :         const OUString& rsURLPath,
     186             :         const ::rtl::Reference<PresenterController>& rpPresenterController);
     187             : 
     188             :     void SAL_CALL disposing() SAL_OVERRIDE;
     189             :     static Command* CreateCommand (
     190             :         const OUString& rsURLPath,
     191             :         const ::rtl::Reference<PresenterController>& rpPresenterController);
     192             : 
     193             :     // XDispatch
     194             :     virtual void SAL_CALL dispatch(
     195             :         const css::util::URL& aURL,
     196             :         const css::uno::Sequence<css::beans::PropertyValue>& rArguments)
     197             :         throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
     198             : 
     199             :     virtual void SAL_CALL addStatusListener(
     200             :         const css::uno::Reference<css::frame::XStatusListener>& rxListener,
     201             :         const css::util::URL& rURL)
     202             :         throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
     203             : 
     204             :     virtual void SAL_CALL removeStatusListener (
     205             :         const css::uno::Reference<css::frame::XStatusListener>& rxListener,
     206             :         const css::util::URL& rURL)
     207             :         throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
     208             : 
     209             :     // document::XEventListener
     210             : 
     211             :     virtual void SAL_CALL notifyEvent (const css::document::EventObject& rEvent)
     212             :         throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
     213             : 
     214             :     // lang::XEventListener
     215             : 
     216             :     virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent)
     217             :         throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
     218             : 
     219             : private:
     220             :     OUString msURLPath;
     221             :     ::boost::scoped_ptr<Command> mpCommand;
     222             :     ::rtl::Reference<PresenterController> mpPresenterController;
     223             :     typedef ::std::vector<Reference<frame::XStatusListener> > StatusListenerContainer;
     224             :     StatusListenerContainer maStatusListenerContainer;
     225             :     bool mbIsListeningToWindowManager;
     226             : 
     227             :     Dispatch (
     228             :         const OUString& rsURLPath,
     229             :         const ::rtl::Reference<PresenterController>& rpPresenterController);
     230             :     virtual ~Dispatch();
     231             : 
     232             :     void ThrowIfDisposed() const throw (css::lang::DisposedException);
     233             : };
     234             : 
     235             : //----- Service ---------------------------------------------------------------
     236             : 
     237           7 : OUString PresenterProtocolHandler::getImplementationName_static()
     238             : {
     239           7 :     return OUString("org.libreoffice.comp.PresenterScreenProtocolHandler");
     240             : }
     241             : 
     242           2 : Sequence<OUString> PresenterProtocolHandler::getSupportedServiceNames_static()
     243             : {
     244           2 :     static const OUString sServiceName("com.sun.star.frame.ProtocolHandler");
     245           2 :     return Sequence<OUString>(&sServiceName, 1);
     246             : }
     247             : 
     248           1 : Reference<XInterface> PresenterProtocolHandler::Create (
     249             :     const Reference<uno::XComponentContext>& rxContext)
     250             : {
     251           1 :     return Reference<XInterface>(static_cast<XWeak*>(new PresenterProtocolHandler(rxContext)));
     252             : }
     253             : 
     254             : //===== PresenterProtocolHandler =========================================================
     255             : 
     256           1 : PresenterProtocolHandler::PresenterProtocolHandler (const Reference<XComponentContext>& rxContext)
     257           1 :     : PresenterProtocolHandlerInterfaceBase(m_aMutex)
     258             : {
     259             :     (void)rxContext;
     260           1 : }
     261             : 
     262           2 : PresenterProtocolHandler::~PresenterProtocolHandler()
     263             : {
     264           2 : }
     265             : 
     266           1 : void SAL_CALL PresenterProtocolHandler::disposing()
     267             : {
     268           1 : }
     269             : 
     270             : //----- XInitialize -----------------------------------------------------------
     271             : 
     272           0 : void SAL_CALL PresenterProtocolHandler::initialize (const Sequence<Any>& aArguments)
     273             :     throw (Exception, RuntimeException, std::exception)
     274             : {
     275           0 :     ThrowIfDisposed();
     276           0 :     if (aArguments.getLength() > 0)
     277             :     {
     278             :         try
     279             :         {
     280           0 :             Reference<frame::XFrame> xFrame;
     281           0 :             if (aArguments[0] >>= xFrame)
     282             :             {
     283           0 :                 mpPresenterController = PresenterController::Instance(xFrame);
     284           0 :             }
     285             :         }
     286           0 :         catch (RuntimeException&)
     287             :         {
     288             :             OSL_ASSERT(false);
     289             :         }
     290             :     }
     291           0 : }
     292             : 
     293           1 : OUString PresenterProtocolHandler::getImplementationName()
     294             :     throw (css::uno::RuntimeException, std::exception)
     295             : {
     296           1 :     return getImplementationName_static();
     297             : }
     298             : 
     299           0 : sal_Bool PresenterProtocolHandler::supportsService(OUString const & ServiceName)
     300             :     throw (css::uno::RuntimeException, std::exception)
     301             : {
     302           0 :     return cppu::supportsService(this, ServiceName);
     303             : }
     304             : 
     305             : css::uno::Sequence<OUString>
     306           1 : PresenterProtocolHandler::getSupportedServiceNames()
     307             :     throw (css::uno::RuntimeException, std::exception)
     308             : {
     309           1 :     return getSupportedServiceNames_static();
     310             : }
     311             : 
     312             : //----- XDispatchProvider -----------------------------------------------------
     313             : 
     314           0 : Reference<frame::XDispatch> SAL_CALL PresenterProtocolHandler::queryDispatch (
     315             :     const css::util::URL& rURL,
     316             :     const OUString& rsTargetFrameName,
     317             :     sal_Int32 nSearchFlags)
     318             :     throw(RuntimeException, std::exception)
     319             : {
     320             :     (void)rsTargetFrameName;
     321             :     (void)nSearchFlags;
     322           0 :     ThrowIfDisposed();
     323             : 
     324           0 :     Reference<frame::XDispatch> xDispatch;
     325             : 
     326           0 :     if (rURL.Protocol == "vnd.org.libreoffice.presenterscreen:")
     327             :     {
     328           0 :         xDispatch.set(Dispatch::Create(rURL.Path, mpPresenterController));
     329             :     }
     330             : 
     331           0 :     return xDispatch;
     332             : }
     333             : 
     334           0 : Sequence<Reference<frame::XDispatch> > SAL_CALL PresenterProtocolHandler::queryDispatches(
     335             :     const Sequence<frame::DispatchDescriptor>& rDescriptors)
     336             :     throw(RuntimeException, std::exception)
     337             : {
     338             :     (void)rDescriptors;
     339           0 :     ThrowIfDisposed();
     340           0 :     return Sequence<Reference<frame::XDispatch> >();
     341             : }
     342             : 
     343             : 
     344             : 
     345           0 : void PresenterProtocolHandler::ThrowIfDisposed() const
     346             :     throw (::com::sun::star::lang::DisposedException)
     347             : {
     348           0 :     if (rBHelper.bDisposed || rBHelper.bInDispose)
     349             :     {
     350             :         throw lang::DisposedException (
     351             :             OUString(
     352             :                 "PresenterProtocolHandler object has already been disposed"),
     353           0 :             const_cast<uno::XWeak*>(static_cast<const uno::XWeak*>(this)));
     354             :     }
     355           0 : }
     356             : 
     357             : //===== PresenterProtocolHandler::Dispatch ====================================
     358             : 
     359           0 : Reference<frame::XDispatch> PresenterProtocolHandler::Dispatch::Create (
     360             :     const OUString& rsURLPath,
     361             :     const ::rtl::Reference<PresenterController>& rpPresenterController)
     362             : {
     363           0 :     ::rtl::Reference<Dispatch> pDispatch (new Dispatch (rsURLPath, rpPresenterController));
     364           0 :     if (pDispatch->mpCommand.get() != NULL)
     365           0 :         return Reference<frame::XDispatch>(pDispatch.get());
     366             :     else
     367           0 :         return NULL;
     368             : }
     369             : 
     370           0 : PresenterProtocolHandler::Dispatch::Dispatch (
     371             :     const OUString& rsURLPath,
     372             :     const ::rtl::Reference<PresenterController>& rpPresenterController)
     373             :     : PresenterDispatchInterfaceBase(m_aMutex),
     374             :       msURLPath(rsURLPath),
     375             :       mpCommand(CreateCommand(rsURLPath, rpPresenterController)),
     376             :       mpPresenterController(rpPresenterController),
     377             :       maStatusListenerContainer(),
     378           0 :       mbIsListeningToWindowManager(false)
     379             : {
     380           0 :     if (mpCommand.get() != NULL)
     381             :     {
     382           0 :         mpPresenterController->GetWindowManager()->AddLayoutListener(this);
     383           0 :         mbIsListeningToWindowManager = true;
     384             :     }
     385           0 : }
     386             : 
     387           0 : Command* PresenterProtocolHandler::Dispatch::CreateCommand (
     388             :     const OUString& rsURLPath,
     389             :     const ::rtl::Reference<PresenterController>& rpPresenterController)
     390             : {
     391           0 :     if (rsURLPath.getLength() <= 5)
     392           0 :         return NULL;
     393             : 
     394           0 :     if (rsURLPath == "CloseNotes")
     395           0 :         return new SetNotesViewCommand(false, rpPresenterController);
     396           0 :     if (rsURLPath == "CloseSlideSorter")
     397           0 :         return new SetSlideSorterCommand(false, rpPresenterController);
     398           0 :     if (rsURLPath == "CloseHelp")
     399           0 :         return new SetHelpViewCommand(false, rpPresenterController);
     400           0 :     if (rsURLPath == "GrowNotesFont")
     401           0 :         return new NotesFontSizeCommand(rpPresenterController, +1);
     402           0 :     if (rsURLPath == "NextEffect")
     403           0 :         return new GotoNextEffectCommand(rpPresenterController);
     404           0 :     if (rsURLPath == "NextSlide")
     405           0 :         return new GotoNextSlideCommand(rpPresenterController);
     406           0 :     if (rsURLPath == "PrevSlide")
     407           0 :         return new GotoPreviousSlideCommand(rpPresenterController);
     408           0 :     if (rsURLPath == "SwitchMonitor")
     409           0 :         return new SwitchMonitorCommand(rpPresenterController);
     410           0 :     if (rsURLPath == "ShowNotes")
     411           0 :         return new SetNotesViewCommand(true, rpPresenterController);
     412           0 :     if (rsURLPath == "ShowSlideSorter")
     413           0 :         return new SetSlideSorterCommand(true, rpPresenterController);
     414           0 :     if (rsURLPath == "ShowHelp")
     415           0 :         return new SetHelpViewCommand(true, rpPresenterController);
     416           0 :     if (rsURLPath == "ShrinkNotesFont")
     417           0 :         return new NotesFontSizeCommand(rpPresenterController, -1);
     418             : 
     419           0 :     return NULL;
     420             : }
     421             : 
     422           0 : PresenterProtocolHandler::Dispatch::~Dispatch()
     423             : {
     424           0 : }
     425             : 
     426           0 : void PresenterProtocolHandler::Dispatch::disposing()
     427             : {
     428           0 :     if (mbIsListeningToWindowManager)
     429             :     {
     430           0 :         if (mpPresenterController.get() != NULL)
     431           0 :             mpPresenterController->GetWindowManager()->RemoveLayoutListener(this);
     432           0 :         mbIsListeningToWindowManager = false;
     433             :     }
     434             : 
     435           0 :     msURLPath.clear();
     436           0 :     mpCommand.reset();
     437           0 : }
     438             : 
     439             : //----- XDispatch -------------------------------------------------------------
     440             : 
     441           0 : void SAL_CALL PresenterProtocolHandler::Dispatch::dispatch(
     442             :     const css::util::URL& rURL,
     443             :     const css::uno::Sequence<css::beans::PropertyValue>& rArguments)
     444             :     throw(css::uno::RuntimeException, std::exception)
     445             : {
     446             :     (void)rArguments;
     447           0 :     ThrowIfDisposed();
     448             : 
     449           0 :     if (rURL.Protocol == "vnd.org.libreoffice.presenterscreen:"
     450           0 :         && rURL.Path == msURLPath)
     451             :     {
     452           0 :         if (mpCommand.get() != NULL)
     453           0 :             mpCommand->Execute();
     454             :     }
     455             :     else
     456             :     {
     457             :         // We can not throw an IllegalArgumentException
     458           0 :         throw RuntimeException();
     459             :     }
     460           0 : }
     461             : 
     462           0 : void SAL_CALL PresenterProtocolHandler::Dispatch::addStatusListener(
     463             :     const css::uno::Reference<css::frame::XStatusListener>& rxListener,
     464             :     const css::util::URL& rURL)
     465             :     throw(css::uno::RuntimeException, std::exception)
     466             : {
     467           0 :     if (rURL.Path == msURLPath)
     468             :     {
     469           0 :         maStatusListenerContainer.push_back(rxListener);
     470             : 
     471           0 :         frame::FeatureStateEvent aEvent;
     472           0 :         aEvent.FeatureURL = rURL;
     473           0 :         aEvent.IsEnabled = mpCommand->IsEnabled();
     474           0 :         aEvent.Requery = sal_False;
     475           0 :         aEvent.State = mpCommand->GetState();
     476           0 :         rxListener->statusChanged(aEvent);
     477             :     }
     478             :     else
     479           0 :         throw RuntimeException();
     480           0 : }
     481             : 
     482           0 : void SAL_CALL PresenterProtocolHandler::Dispatch::removeStatusListener (
     483             :     const css::uno::Reference<css::frame::XStatusListener>& rxListener,
     484             :     const css::util::URL& rURL)
     485             :     throw(css::uno::RuntimeException, std::exception)
     486             : {
     487           0 :     if (rURL.Path == msURLPath)
     488             :     {
     489             :         StatusListenerContainer::iterator iListener (
     490             :             ::std::find(
     491             :                 maStatusListenerContainer.begin(),
     492             :                 maStatusListenerContainer.end(),
     493           0 :                 rxListener));
     494           0 :         if (iListener != maStatusListenerContainer.end())
     495           0 :             maStatusListenerContainer.erase(iListener);
     496             :     }
     497             :     else
     498           0 :         throw RuntimeException();
     499           0 : }
     500             : 
     501           0 : void PresenterProtocolHandler::Dispatch::ThrowIfDisposed() const
     502             :     throw (::com::sun::star::lang::DisposedException)
     503             : {
     504           0 :     if (rBHelper.bDisposed || rBHelper.bInDispose)
     505             :     {
     506             :         throw lang::DisposedException (
     507             :             OUString(
     508             :                 "PresenterProtocolHandler::Dispatch object has already been disposed"),
     509           0 :             const_cast<uno::XWeak*>(static_cast<const uno::XWeak*>(this)));
     510             :     }
     511           0 : }
     512             : 
     513             : //----- document::XEventListener ----------------------------------------------
     514             : 
     515           0 : void SAL_CALL PresenterProtocolHandler::Dispatch::notifyEvent (
     516             :     const css::document::EventObject& rEvent)
     517             :     throw(css::uno::RuntimeException, std::exception)
     518             : {
     519             :     (void)rEvent;
     520             : 
     521           0 :     mpCommand->GetState();
     522           0 : }
     523             : 
     524             : //----- lang::XEventListener --------------------------------------------------
     525             : 
     526           0 : void SAL_CALL PresenterProtocolHandler::Dispatch::disposing (const css::lang::EventObject& rEvent)
     527             :     throw(css::uno::RuntimeException, std::exception)
     528             : {
     529             :     (void)rEvent;
     530           0 :     mbIsListeningToWindowManager = false;
     531           0 : }
     532             : 
     533             : //===== GotoPreviousSlideCommand ==============================================
     534             : 
     535           0 : GotoPreviousSlideCommand::GotoPreviousSlideCommand (
     536             :     const rtl::Reference<PresenterController>& rpPresenterController)
     537           0 :     : mpPresenterController(rpPresenterController)
     538             : {
     539           0 : }
     540             : 
     541           0 : void GotoPreviousSlideCommand::Execute()
     542             : {
     543           0 :     if ( ! mpPresenterController.is())
     544           0 :         return;
     545             : 
     546           0 :     if ( ! mpPresenterController->GetSlideShowController().is())
     547           0 :         return;
     548             : 
     549           0 :     mpPresenterController->GetSlideShowController()->gotoPreviousSlide();
     550             : }
     551             : 
     552           0 : bool GotoPreviousSlideCommand::IsEnabled() const
     553             : {
     554           0 :     if ( ! mpPresenterController.is())
     555           0 :         return false;
     556             : 
     557           0 :     if ( ! mpPresenterController->GetSlideShowController().is())
     558           0 :         return false;
     559             : 
     560           0 :     return mpPresenterController->GetSlideShowController()->getCurrentSlideIndex()>0;
     561             : }
     562             : 
     563             : //===== GotoNextEffect ========================================================
     564             : 
     565           0 : GotoNextEffectCommand::GotoNextEffectCommand (
     566             :     const rtl::Reference<PresenterController>& rpPresenterController)
     567           0 :     : mpPresenterController(rpPresenterController)
     568             : {
     569           0 : }
     570             : 
     571           0 : void GotoNextEffectCommand::Execute()
     572             : {
     573           0 :     if ( ! mpPresenterController.is())
     574           0 :         return;
     575             : 
     576           0 :     if ( ! mpPresenterController->GetSlideShowController().is())
     577           0 :         return;
     578             : 
     579           0 :     mpPresenterController->GetSlideShowController()->gotoNextEffect();
     580             : }
     581             : 
     582             : //===== GotoNextSlide =========================================================
     583             : 
     584           0 : GotoNextSlideCommand::GotoNextSlideCommand (
     585             :     const rtl::Reference<PresenterController>& rpPresenterController)
     586           0 :     : mpPresenterController(rpPresenterController)
     587             : {
     588           0 : }
     589             : 
     590           0 : void GotoNextSlideCommand::Execute()
     591             : {
     592           0 :     if ( ! mpPresenterController.is())
     593           0 :         return;
     594             : 
     595           0 :     if ( ! mpPresenterController->GetSlideShowController().is())
     596           0 :         return;
     597             : 
     598           0 :     mpPresenterController->GetSlideShowController()->gotoNextSlide();
     599             : }
     600             : 
     601             : //===== SwitchMonitorCommand ==============================================
     602             : 
     603           0 : SwitchMonitorCommand::SwitchMonitorCommand (
     604             :     const rtl::Reference<PresenterController>& rpPresenterController)
     605           0 :     : mpPresenterController(rpPresenterController)
     606             : {
     607           0 : }
     608             : 
     609           0 : void SwitchMonitorCommand::Execute()
     610             : {
     611           0 :     mpPresenterController->SwitchMonitors();
     612           0 : }
     613             : 
     614             : //===== SetNotesViewCommand ===================================================
     615             : 
     616           0 : SetNotesViewCommand::SetNotesViewCommand (
     617             :     const bool bOn,
     618             :     const rtl::Reference<PresenterController>& rpPresenterController)
     619             :     : mbOn(bOn),
     620           0 :       mpPresenterController(rpPresenterController)
     621             : {
     622           0 : }
     623             : 
     624           0 : void SetNotesViewCommand::Execute()
     625             : {
     626           0 :     if ( ! mpPresenterController.is())
     627           0 :         return;
     628             : 
     629             :     ::rtl::Reference<PresenterWindowManager> pWindowManager (
     630           0 :         mpPresenterController->GetWindowManager());
     631           0 :     if ( ! pWindowManager.is())
     632           0 :         return;
     633             : 
     634           0 :     if (mbOn)
     635           0 :         pWindowManager->SetViewMode(PresenterWindowManager::VM_Notes);
     636             :     else
     637           0 :         pWindowManager->SetViewMode(PresenterWindowManager::VM_Standard);
     638             : }
     639             : 
     640           0 : Any SetNotesViewCommand::GetState() const
     641             : {
     642           0 :     if ( ! mpPresenterController.is())
     643           0 :         return Any(false);
     644             : 
     645             :     ::rtl::Reference<PresenterWindowManager> pWindowManager (
     646           0 :         mpPresenterController->GetWindowManager());
     647           0 :     if ( ! pWindowManager.is())
     648           0 :         return Any(false);
     649             : 
     650           0 :     return Any(IsActive(pWindowManager));
     651             : }
     652             : 
     653           0 : bool SetNotesViewCommand::IsActive (
     654             :     const ::rtl::Reference<PresenterWindowManager>& rpWindowManager)
     655             : {
     656           0 :     return rpWindowManager->GetViewMode() == PresenterWindowManager::VM_Notes;
     657             : }
     658             : 
     659             : //===== SetSlideSorterCommand =================================================
     660             : 
     661           0 : SetSlideSorterCommand::SetSlideSorterCommand (
     662             :     const bool bOn,
     663             :     const rtl::Reference<PresenterController>& rpPresenterController)
     664             :     : mbOn(bOn),
     665           0 :       mpPresenterController(rpPresenterController)
     666             : {
     667           0 : }
     668             : 
     669           0 : void SetSlideSorterCommand::Execute()
     670             : {
     671           0 :     if ( ! mpPresenterController.is())
     672           0 :         return;
     673             : 
     674             :     ::rtl::Reference<PresenterWindowManager> pWindowManager (
     675           0 :         mpPresenterController->GetWindowManager());
     676           0 :     if ( ! pWindowManager.is())
     677           0 :         return;
     678             : 
     679           0 :     pWindowManager->SetSlideSorterState(mbOn);
     680             : }
     681             : 
     682           0 : Any SetSlideSorterCommand::GetState() const
     683             : {
     684           0 :     if ( ! mpPresenterController.is())
     685           0 :         return Any(false);
     686             : 
     687             :     ::rtl::Reference<PresenterWindowManager> pWindowManager (
     688           0 :         mpPresenterController->GetWindowManager());
     689           0 :     if ( ! pWindowManager.is())
     690           0 :         return Any(false);
     691             : 
     692           0 :     return Any(pWindowManager->GetViewMode()==PresenterWindowManager::VM_SlideOverview);
     693             : }
     694             : 
     695             : //===== SetHelpViewCommand ===================================================
     696             : 
     697           0 : SetHelpViewCommand::SetHelpViewCommand (
     698             :     const bool bOn,
     699             :     const rtl::Reference<PresenterController>& rpPresenterController)
     700             :     : mbOn(bOn),
     701           0 :       mpPresenterController(rpPresenterController)
     702             : {
     703           0 : }
     704             : 
     705           0 : void SetHelpViewCommand::Execute()
     706             : {
     707           0 :     if ( ! mpPresenterController.is())
     708           0 :         return;
     709             : 
     710             :     ::rtl::Reference<PresenterWindowManager> pWindowManager (
     711           0 :         mpPresenterController->GetWindowManager());
     712           0 :     if ( ! pWindowManager.is())
     713           0 :         return;
     714             : 
     715           0 :     pWindowManager->SetHelpViewState(mbOn);
     716             : }
     717             : 
     718           0 : Any SetHelpViewCommand::GetState() const
     719             : {
     720           0 :     if ( ! mpPresenterController.is())
     721           0 :         return Any(false);
     722             : 
     723             :     ::rtl::Reference<PresenterWindowManager> pWindowManager (
     724           0 :         mpPresenterController->GetWindowManager());
     725           0 :     if ( ! pWindowManager.is())
     726           0 :         return Any(false);
     727             : 
     728           0 :     return Any(pWindowManager->GetViewMode()==PresenterWindowManager::VM_Help);
     729             : }
     730             : 
     731             : //===== NotesFontSizeCommand ==================================================
     732             : 
     733           0 : NotesFontSizeCommand::NotesFontSizeCommand(
     734             :     const rtl::Reference<PresenterController>& rpPresenterController,
     735             :     const sal_Int32 nSizeChange)
     736             :     : mpPresenterController(rpPresenterController),
     737           0 :       mnSizeChange(nSizeChange)
     738             : {
     739           0 : }
     740             : 
     741           0 : ::rtl::Reference<PresenterNotesView> NotesFontSizeCommand::GetNotesView() const
     742             : {
     743           0 :     if (mpPresenterController.get() == NULL)
     744           0 :         return NULL;
     745             : 
     746             :     PresenterPaneContainer::SharedPaneDescriptor pDescriptor (
     747             :         mpPresenterController->GetPaneContainer()->FindViewURL(
     748           0 :             PresenterViewFactory::msNotesViewURL));
     749           0 :     if (pDescriptor.get() == NULL)
     750           0 :         return NULL;
     751             : 
     752           0 :     return dynamic_cast<PresenterNotesView*>(pDescriptor->mxView.get());
     753             : }
     754             : 
     755           0 : void NotesFontSizeCommand::Execute()
     756             : {
     757           0 :     ::rtl::Reference<PresenterNotesView> pView (GetNotesView());
     758           0 :     if (pView.is())
     759           0 :         pView->ChangeFontSize(mnSizeChange);
     760           0 : }
     761             : 
     762           0 : Any NotesFontSizeCommand::GetState() const
     763             : {
     764           0 :     return Any();
     765             : }
     766             : 
     767             : } } // end of namespace ::sdext::presenter
     768             : 
     769             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11