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: */
|