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