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

Generated by: LCOV version 1.10