1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
|
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: eventmultiplexer.hxx,v $
*
* $Revision: 1.7 $
*
* last change: $Author: kz $ $Date: 2006-12-13 15:56:27 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
#if ! defined(INCLUDED_SLIDESHOW_EVENTMULTIPLEXER_HXX)
#define INCLUDED_SLIDESHOW_EVENTMULTIPLEXER_HXX
#include <rtl/ref.hxx>
#include <com/sun/star/awt/XMouseListener.hpp>
#include <com/sun/star/awt/XMouseMotionListener.hpp>
#include <cppuhelper/compbase2.hxx>
#include <comphelper/broadcasthelper.hxx>
#include "eventhandler.hxx"
#include "unoviewcontainer.hxx"
#include "mouseeventhandler.hxx"
#include "animationeventhandler.hxx"
#include "pauseeventhandler.hxx"
#include "vieweventhandler.hxx"
#include "layermanager.hxx"
#include "animationnode.hxx"
#include "eventqueue.hxx"
#include "unoview.hxx"
#include <boost/weak_ptr.hpp>
#include <boost/function.hpp>
#include <boost/noncopyable.hpp>
namespace slideshow {
namespace internal {
typedef cppu::WeakComponentImplHelper2<
::com::sun::star::awt::XMouseListener,
::com::sun::star::awt::XMouseMotionListener > Listener_UnoBase;
/** This class multiplexes user-activated and
slide-show-global events.
This class listens at the XSlideShowView and fires events
registered for certain user actions. Furthermore, global
slide show state changes (such as start or end of a slide)
are handled as well. Note that registered events which
have a non-zero timeout (i.e. events that return non-zero
from getActivationTime()) will not be fired immediately
after the user action occured, but only after the given
timeout. Which is actually a feature.
*/
class EventMultiplexer : private comphelper::OBaseMutex,
public Listener_UnoBase,
private ::boost::noncopyable
{
public:
/** Create an event multiplexer
@param rEventQueue
Reference to the main event queue. Since we hold this
object by plain reference, it must live longer than we
do. On the other hand, that queue must not fire events
after this object is destroyed, since we might
schedule events there which itself contain plain
references to this object. Basically, EventQueue and
EventMultiplexer should have the same lifetime, and since
this is not possible, both must be destructed in a
phased mode: first clear both of any remaining events,
then destruct them.
*/
static ::rtl::Reference<EventMultiplexer> create( EventQueue& rEventQueue,
const UnoViewContainer& rViews );
// Management methods
// =========================================================
/** Clear all registered handlers.
*/
void clear();
// TODO(Q3): This is a wart. Remove from this class!
// Probably, there should exist a separate ViewContainer,
// which would expose such a method.
/**
*/
void setMouseCursor( sal_Int16 );
// TODO(Q3): This is a wart. Remove from this class!
// Probably, there should exist a separate ViewContainer,
// which would expose such a method.
/** Set volatile mouse cursor.
A volatile mouse cursor only stays in effect, as long
as the mouse has not moved. As soon as the mouse
moves, the mouse cursor is set back to the value set
by setMouseCursor().
*/
void setVolatileMouseCursor( sal_Int16 );
/** Set a LayerManager for update() calls.
A LayerManager set via this method will receive an
update() call whenever updateScreen() is called on the
EventMultiplexer. This is handy to avoid multiple
redraws. Note that every setLayerManager() call will
overwrite any previously set.
*/
void setLayerManager( const LayerManagerSharedPtr& rMgr );
/** Update screen content
This method updates the screen content for the given view, by
first updating all layers (if setLayerManager() was called
with a valid layer manager previously), and then calling
updateScreen() on the view.
@param rView
The view to update
@param bForceUpdate
Force updateScreen() call, even if layer manager has
no updates pending. Set this parameter to true, if you
changed screen content or sprites and bypassed the
layer manager.
*/
void updateScreenContent( const UnoViewSharedPtr& rView,
bool bForceUpdate );
/** Update screen content
This method updates the screen content, by first
updating all layers (if setLayerManager() was called
with a valid layer manager previously), and then
calling updateScreen() on all registered views.
@param bForceUpdate
Force updateScreen() call, even if layer manager has
no updates pending. Set this parameter to true, if you
changed screen content or sprites and bypassed the
layer manager.
*/
void updateScreenContent( bool bForceUpdate );
// Automatic mode methods
// =========================================================
/** Change automatic mode.
@param bIsAuto
When true, events will be fired automatically, not
only triggered by UI events. When false, auto events
will quit.
*/
void setAutomaticMode( bool bIsAuto );
/** Get automatic mode setting.
*/
bool getAutomaticMode() const;
/** Set the timeout for automatic mode.
@param nTimeout
Timeout, between end of effect until start of next
effect.
*/
void setAutomaticTimeout( double nTimeout );
/** Get automatic mode timeout value.
*/
double getAutomaticTimeout() const;
// Handler registration methods
// =========================================================
/** Register an event handler that will be called when views are
changed.
For each view added, viewAdded() will be called on the
handler. For each view removed, viewRemoved() will be
called. Each modified view will cause a viewChanged() call on
each handler.
You don't need to deregister the handler, it will be
automatically removed, once the pointee becomes stale.
@param rHandler
Handler to call.
*/
void addViewHandler( const ViewEventHandlerWeakPtr& rHandler );
/** Register an event handler that will be called when the
user requests the next effect.
For every nextEffect event, only one of the handlers
registered here is called. The handlers are considered
with decreasing priority, i.e. the handler with the
currently highest priority will be called.
@param rHandler
Handler to call when the next effect should start
@param nPriority
Priority with which the handlers are called. The
higher the priority, the earlier this handler will be
tried.
*/
void addNextEffectHandler( const EventHandlerSharedPtr& rHandler,
double nPriority );
void removeNextEffectHandler( const EventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when the
slide is just shown.
Note that <em>all</em> registered handlers will be called
when the slide start occurs. This is in contrast to
the mouse events below.
@param rHandler
Handler to call when the next slide starts
*/
void addSlideStartHandler( const EventHandlerSharedPtr& rHandler );
void removeSlideStartHandler( const EventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when the
slide is about to vanish.
Note that <em>all</em> registered handlers will be
called when the slide end occurs. This is in contrast
to the mouse events below.
@param rHandler
Handler to call when the current slide ends
*/
void addSlideEndHandler( const EventHandlerSharedPtr& rHandler );
void removeSlideEndHandler( const EventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when an
XAnimationNode starts its active duration.
Note that <em>all</em> registered handlers will be called
when the animation start occurs. This is in contrast to
the mouse events below.
@param rHandler
Handler to call when the animation start
*/
void addAnimationStartHandler(
const AnimationEventHandlerSharedPtr& rHandler );
void removeAnimationStartHandler(
const AnimationEventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when an
XAnimationNode ends its active duration.
Note that <em>all</em> registered handlers will be called
when the animation end occurs. This is in contrast to
the mouse events below.
@param rHandler
Handler to call when the animation ends
*/
void addAnimationEndHandler(
const AnimationEventHandlerSharedPtr& rHandler );
void removeAnimationEndHandler(
const AnimationEventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when the
main animation sequence of a slide ends its active
duration.
Note that <em>all</em> registered handlers will be
called when the animation end occurs. This is in
contrast to the mouse events below.
@param rHandler
Handler to call when the animation ends
*/
void addSlideAnimationsEndHandler(
const EventHandlerSharedPtr& rHandler );
void removeSlideAnimationsEndHandler(
const EventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when an
XAudio node's sound stops playing.
Note that <em>all</em> registered handlers will be
called when the audio stops. This is in contrast to
the mouse events below.
@param rHandler
Handler to call when the audio stops
*/
void addAudioStoppedHandler(
const AnimationEventHandlerSharedPtr& rHandler );
void removeAudioStoppedHandler(
const AnimationEventHandlerSharedPtr& rHandler );
/** Register an event handler that will be called when an
XCommand node's with the command STOPAUDIO is activated.
Note that <em>all</em> registered handlers will be
called when the audio stops. This is in contrast to
the mouse events below.
@param rHandler
Handler to call when command is activated
*/
void addCommandStopAudioHandler(
const AnimationEventHandlerSharedPtr& rHandler );
void removeCommandStopAudioHandler(
const AnimationEventHandlerSharedPtr& rHandler );
/** Register a handler that is called when the show enters
or exits pause mode.
*/
void addPauseHandler( const PauseEventHandlerSharedPtr& rHandler );
void removePauseHandler( const PauseEventHandlerSharedPtr& rHandler );
/** Register a mouse handler that is called on mouse click
For every mouse click, only one of the handlers
registered here is called. The handlers are considered
with decreasing priority, i.e. the handler with the
currently highest priority will be called.
Since the handlers can reject down and up events
individually, handlers should expect to be called with
non-matching down and up-press counts. If your handler
cannot cope with that, it must have the highest
priority of all added handlers.
*/
void addClickHandler( const MouseEventHandlerSharedPtr& rHandler,
double nPriority );
void removeClickHandler( const MouseEventHandlerSharedPtr& rHandler );
/** Register a mouse handler that is called on a double
mouse click
For every mouse double click, only one of the handlers
registered here is called. The handlers are considered
with decreasing priority, i.e. the handler with the
currently highest priority will be called.
Since the handlers can reject down and up events
individually, handlers should expect to be called with
non-matching down and up-press counts. If your handler
cannot cope with that, it must have the highest
priority of all added handlers.
*/
void addDoubleClickHandler( const MouseEventHandlerSharedPtr& rHandler,
double nPriority );
void removeDoubleClickHandler( const MouseEventHandlerSharedPtr& rHandler );
/** Register a mouse handler that is called for mouse moves.
For every mouse move, only one of the handlers
registered here is called. The handlers are considered
with decreasing priority, i.e. the handler with the
currently highest priority will be called.
*/
void addMouseMoveHandler( const MouseEventHandlerSharedPtr& rHandler,
double nPriority );
void removeMouseMoveHandler( const MouseEventHandlerSharedPtr& rHandler );
// Hyperlink notifications
// =======================
typedef ::boost::function1<
bool /* whether event has been consumed */,
::rtl::OUString /* actual hyperlink */ > HyperLinkHandlerFunc;
/// HandlerId: usually _this_ pointer of handler instance
typedef void const* HandlerId;
/** Registers a hyperlink click handler.
@param func handler function
@param id identifier for registration
*/
void addHyperlinkHandler( HyperLinkHandlerFunc const& func, HandlerId id );
/** Removes a hyperlink click handler.
@param id identifier for registration
*/
void removeHyperlinkHandler( HandlerId id );
// External event notifications
// =========================================================
/** View added.
This method adds another view, which the show is
displayed on. On every added view, the EventMultiplexer
registers mouse and motion event listeners.
*/
bool notifyViewAdded( const UnoViewSharedPtr& rView );
/** View removed
This method removes a view. Registered mouse and
motion event listeners are revoked.
*/
bool notifyViewRemoved( const UnoViewSharedPtr& rView );
/** View changed
This method announces a changed view to all view
listeners. View changes include size and transformation.
*/
bool notifyViewChanged( const UnoViewSharedPtr& rView );
/** All Views changed
This method announces to all view listeners that
<em>every</em> known view has changed. View changes include
size and transformation.
*/
bool notifyViewsChanged();
/** Notify that the user requested the next effect.
This requests the slideshow to display the next
effect, or move to the next slide, if none are left.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyNextEffect();
/** Notify that a new slide has started
This method is to be used from the Presentation object
to signal that a new slide is starting now. This will
invoke all registered slide start handlers.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifySlideStartEvent();
/** Notify that a slide has ended
This method is to be used from the Presentation object
to signal that a slide is ending now. This will invoke
all registered slide end handlers.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifySlideEndEvent();
/** Notify that the given node enters its active duration.
This method is to be used from the AnimationNode
objects to signal that the active duration
begins. This will invoke all registered animation
start handlers.
@param rNode
Node which enters active duration.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyAnimationStart( const AnimationNodeSharedPtr& rNode );
/** Notify that the given node leaves its active duration.
This method is to be used from the AnimationNode
objects to signal that the active duration
ends now. This will invoke all registered animation
end handlers.
@param rNode
Node which leaves active duration.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyAnimationEnd( const AnimationNodeSharedPtr& rNode );
/** Notify that the slide animations sequence leaves its
active duration.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifySlideAnimationsEnd();
/** Notify that for the given node, audio output has stopped.
This method is to be used from the AnimationNode
objects to signal that audio playback has just
stopped. This will invoke all registered audio
stopped andlers.
@param rNode
Node for which audio has stopped.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyAudioStopped( const AnimationNodeSharedPtr& rNode );
/** Notify that the show has entered or exited pause mode
This method is to be used from the Presentation object
to signal that a slide is entering (bPauseShow=true)
or exiting (bPauseShow=false) pause mode. This will
invoke all registered slide end handlers.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyPauseMode( bool bPauseShow );
/** Notify that all audio has to be stoped.
This method is used by XCommand nodes and all sound
playing nodes should listen for this command and
stop theire sounds when its fired.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyCommandStopAudio( const AnimationNodeSharedPtr& rNode );
/** Botifies that a hyperlink has been clicked.
@return true, if this event was processed by
anybody. If false is returned, no handler processed
this event (and probably, nothing will happen at all)
*/
bool notifyHyperlinkClicked( ::rtl::OUString const& hyperLink );
private:
EventMultiplexer( EventQueue&,
const UnoViewContainer& );
virtual ~EventMultiplexer();
private:
// XMouseListener implementation
virtual void SAL_CALL disposing(
const ::com::sun::star::lang::EventObject& Source )
throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL mousePressed(
const ::com::sun::star::awt::MouseEvent& e )
throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL mouseReleased(
const ::com::sun::star::awt::MouseEvent& e )
throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL mouseEntered(
const ::com::sun::star::awt::MouseEvent& e )
throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL mouseExited(
const ::com::sun::star::awt::MouseEvent& e )
throw (::com::sun::star::uno::RuntimeException);
// XMouseMotionListener implementation
virtual void SAL_CALL mouseDragged(
const ::com::sun::star::awt::MouseEvent& e )
throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL mouseMoved(
const ::com::sun::star::awt::MouseEvent& e )
throw (::com::sun::star::uno::RuntimeException);
// WeakComponentImplHelperBase::disposing
virtual void SAL_CALL disposing();
private:
// actual handler implementations (the UNO interface
// overrides above are only stubs)
void implMousePressed( const ::com::sun::star::awt::MouseEvent& e );
void implMouseReleased( const ::com::sun::star::awt::MouseEvent& e );
void implMouseDragged( const ::com::sun::star::awt::MouseEvent& e );
void implMouseMoved( const ::com::sun::star::awt::MouseEvent& e );
bool isMouseListenerRegistered() const;
template <typename HandlerT>
class PrioritizedHandlerEntry;
typedef std::vector<
PrioritizedHandlerEntry<EventHandler> > ImplNextEffectHandlers;
typedef std::vector<
PrioritizedHandlerEntry<MouseEventHandler> > ImplMouseHandlers;
typedef std::vector<EventHandlerSharedPtr> ImplEventHandlers;
typedef std::vector<AnimationEventHandlerSharedPtr> ImplAnimationHandlers;
typedef std::vector<PauseEventHandlerSharedPtr> ImplPauseHandlers;
typedef std::vector<ViewEventHandlerWeakPtr> ImplViewHandlers;
template <typename ContainerT, typename HandlerT>
void addHandler( ContainerT & rContainer,
boost::shared_ptr<HandlerT> const& pHandler );
template <typename ContainerT, typename HandlerT>
void addHandler( ContainerT & rContainer,
HandlerT const& pHandler );
template <typename ContainerT, typename HandlerT>
void addPrioritizedHandler( ContainerT & rContainer,
boost::shared_ptr<HandlerT> const& pHandler,
double nPriority );
template< typename Container, typename Handler >
void removeHandler( Container& rContainer,
const ::boost::shared_ptr< Handler >& rHandler );
template< typename Container, typename Handler >
void removeHandler( Container& rContainer,
const Handler& rHandler );
template <typename XSlideShowViewFunc>
void forEachView( XSlideShowViewFunc pViewMethod );
template< typename RegisterFunction >
void addMouseHandler( ImplMouseHandlers& rHandlerContainer,
const MouseEventHandlerSharedPtr& rHandler,
double nPriority,
RegisterFunction pRegisterListener );
/** @return true: one handler returned true (iterating from begin to end)
false: no handler at all returned true
*/
template <typename ContainerT, typename FuncT>
bool notifySingleHandler( ContainerT const& rContainer, FuncT const& func,
bool bOperateOnCopy = true );
/** @return true: at least one handler returned true
false: not a single handler returned true
*/
template <typename T, typename FuncT>
bool notifyAllHandlers( std::vector< boost::shared_ptr<T> > const& rContainer, FuncT const& func );
/** @return true: at least one handler returned true
false: not a single handler returned true
*/
template <typename FuncT> bool notifyAllViewHandlers( FuncT const& func );
bool notifyAllEventHandlers( ImplEventHandlers const& rContainer ) {
return notifyAllHandlers( rContainer,
boost::mem_fn(&EventHandler::handleEvent) );
}
bool notifyAllAnimationHandlers( ImplAnimationHandlers const& rContainer,
AnimationNodeSharedPtr const& rNode ) {
return notifyAllHandlers(
rContainer,
boost::bind( &AnimationEventHandler::handleAnimationEvent,
_1, boost::cref(rNode) ) );
}
bool notifyMouseHandlers(
const ImplMouseHandlers& rQueue,
bool (MouseEventHandler::*pHandlerMethod)(
const ::com::sun::star::awt::MouseEvent& ),
const ::com::sun::star::awt::MouseEvent& e );
/// Called for automatic nextEffect
void tick();
/// Schedules a tick event
void scheduleTick();
/// Schedules tick events, if mbIsAutoMode is true
void handleTicks();
void implSetMouseCursor( sal_Int16 ) const;
EventQueue& mrEventQueue;
UnoViewVector maViewContainer;
ImplNextEffectHandlers maNextEffectHandlers;
ImplEventHandlers maSlideStartHandlers;
ImplEventHandlers maSlideEndHandlers;
ImplAnimationHandlers maAnimationStartHandlers;
ImplAnimationHandlers maAnimationEndHandlers;
ImplEventHandlers maSlideAnimationsEndHandlers;
ImplAnimationHandlers maAudioStoppedHandlers;
ImplAnimationHandlers maCommandStopAudioHandlers;
ImplPauseHandlers maPauseHandlers;
ImplViewHandlers maViewHandlers;
ImplMouseHandlers maMouseClickHandlers;
ImplMouseHandlers maMouseDoubleClickHandlers;
ImplMouseHandlers maMouseMoveHandlers;
struct AllViewNotifier;
friend struct AllViewNotifier;
typedef std::hash_map<HandlerId, HyperLinkHandlerFunc,
hash<HandlerId> > ImplHyperLinkHandlers;
ImplHyperLinkHandlers maHyperlinkHandlers;
struct HyperLinkNotifier;
friend struct HyperLinkNotifier;
LayerManagerSharedPtr mpLayerManager; // for screen updates
double mnTimeout;
/** Holds ptr to optional tick event weakly
When event queue is cleansed, the next
setAutomaticMode(true) call is then able to
regenerate the event.
*/
::boost::weak_ptr< Event > mpTickEvent;
sal_Int16 mnMouseCursor;
sal_Int16 mnVolatileMouseCursor;
sal_Int16 mnLastVolatileMouseCursor;
bool mbIsAutoMode;
};
} // namespace internal
} // namespace Presentation
#endif /* INCLUDED_SLIDESHOW_EVENTMULTIPLEXER_HXX */
|