LibreOffice Module slideshow (master) 1
Public Member Functions | Private Member Functions | Private Attributes | List of all members
slideshow::internal::UserEventQueue Class Reference

This class schedules user-activated events. More...

#include <usereventqueue.hxx>

Collaboration diagram for slideshow::internal::UserEventQueue:
[legend]

Public Member Functions

 UserEventQueue (EventMultiplexer &rMultiplexer, EventQueue &rEventQueue, CursorManager &rCursorManager)
 Create a user event queue. More...
 
 ~UserEventQueue ()
 
 UserEventQueue (const UserEventQueue &)=delete
 
UserEventQueueoperator= (const UserEventQueue &)=delete
 
void clear ()
 Clear all registered events. More...
 
void setAdvanceOnClick (bool bAdvanceOnClick)
 Set advance on click behaviour. More...
 
void registerAnimationStartEvent (const EventSharedPtr &rEvent, const css::uno::Reference< css::animations::XAnimationNode > &xNode)
 Register an event that will be fired when the given animation node starts. More...
 
void registerAnimationEndEvent (const EventSharedPtr &rEvent, const css::uno::Reference< css::animations::XAnimationNode > &xNode)
 Register an event that will be fired when the given animation node ends its active duration. More...
 
void registerAudioStoppedEvent (const EventSharedPtr &rEvent, const css::uno::Reference< css::animations::XAnimationNode > &xNode)
 Register an event that will be fired when audio output stopped for the given animation node. More...
 
void registerShapeClickEvent (const EventSharedPtr &rEvent, const ShapeSharedPtr &rShape)
 Register an event that is fired when a shape is clicked. More...
 
void registerSkipEffectEvent (EventSharedPtr const &pEvent, const bool bSkipTriggersNextEffect)
 Registers an event that is fired when the current effects(s) are skipped, .e.g. More...
 
void registerNextEffectEvent (const EventSharedPtr &rEvent)
 Register an event that is fired to show the next event. More...
 
void registerShapeDoubleClickEvent (const EventSharedPtr &rEvent, const ShapeSharedPtr &rShape)
 Register an event that is fired on a double mouse click on a shape. More...
 
void registerMouseEnterEvent (const EventSharedPtr &rEvent, const ShapeSharedPtr &rShape)
 Register an event that is fired when the mouse enters the area of the given shape. More...
 
void registerMouseLeaveEvent (const EventSharedPtr &rEvent, const ShapeSharedPtr &rShape)
 Register an event that is fired when the mouse leaves the area of the given shape. More...
 
void callSkipEffectEventHandler ()
 Typically skipping the current effect is triggered by mouse clicks or key presses that trigger the next effect. More...
 
template<typename Handler , typename Functor >
void registerEvent (std::shared_ptr< Handler > &rHandler, const EventSharedPtr &rEvent, const Functor &rRegistrationFunctor)
 
template<typename Handler , typename Arg , typename Functor >
void registerEvent (std::shared_ptr< Handler > &rHandler, const EventSharedPtr &rEvent, const Arg &rArg, const Functor &rRegistrationFunctor)
 

Private Member Functions

template<typename Handler , typename Functor >
void registerEvent (::std::shared_ptr< Handler > &rHandler, const EventSharedPtr &rEvent, const Functor &rRegistrationFunctor)
 Generically register an event on one of the handlers. More...
 
template<typename Handler , typename Arg , typename Functor >
void registerEvent (::std::shared_ptr< Handler > &rHandler, const EventSharedPtr &rEvent, const Arg &rArg, const Functor &rRegistrationFunctor)
 Generically register an event on one of the handlers. More...
 

Private Attributes

EventMultiplexermrMultiplexer
 
EventQueuemrEventQueue
 
CursorManager & mrCursorManager
 
::std::shared_ptr< AllAnimationEventHandlermpAnimationStartEventHandler
 
::std::shared_ptr< AllAnimationEventHandlermpAnimationEndEventHandler
 
::std::shared_ptr< AllAnimationEventHandlermpAudioStoppedEventHandler
 
::std::shared_ptr< ShapeClickEventHandlermpShapeClickEventHandler
 
::std::shared_ptr< ClickEventHandlermpClickEventHandler
 
::std::shared_ptr< SkipEffectEventHandlermpSkipEffectEventHandler
 
::std::shared_ptr< ShapeClickEventHandlermpShapeDoubleClickEventHandler
 
::std::shared_ptr< MouseEnterHandlermpMouseEnterHandler
 
::std::shared_ptr< MouseLeaveHandlermpMouseLeaveHandler
 
bool mbAdvanceOnClick
 

Detailed Description

This class schedules user-activated events.

This class registers at the EventMultiplexer and fires events registered for certain user actions. Note that all events will not be fired immediately after the user action occurred, but always added to the EventQueue (and fired the next time that queue is processed). Which is actually a feature.

Conceptually, an event is an object that typically is fired only once. After that, the event is exhausted, and should be discarded. Therefore, all events registered on this object are fired and then all references to them are removed.

Definition at line 57 of file usereventqueue.hxx.

Constructor & Destructor Documentation

◆ UserEventQueue() [1/2]

slideshow::internal::UserEventQueue::UserEventQueue ( EventMultiplexer rMultiplexer,
EventQueue rEventQueue,
CursorManager &  rCursorManager 
)

Create a user event queue.

Parameters
rEventMultiplexerThe slideshow-global event source, where this class registers its event handlers.
rEventQueueReference 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 UserEventQueue 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.

Definition at line 527 of file usereventqueue.cxx.

◆ ~UserEventQueue()

slideshow::internal::UserEventQueue::~UserEventQueue ( )

Definition at line 544 of file usereventqueue.cxx.

References clear(), and TOOLS_WARN_EXCEPTION.

◆ UserEventQueue() [2/2]

slideshow::internal::UserEventQueue::UserEventQueue ( const UserEventQueue )
delete

Member Function Documentation

◆ callSkipEffectEventHandler()

void slideshow::internal::UserEventQueue::callSkipEffectEventHandler ( )

Typically skipping the current effect is triggered by mouse clicks or key presses that trigger the next effect.

This method allows the skipping of effects to be triggered programmatically.

Definition at line 781 of file usereventqueue.cxx.

References mpSkipEffectEventHandler.

Referenced by slideshow::internal::EffectRewinder::asynchronousRewind(), slideshow::internal::EffectRewinder::rewind(), and slideshow::internal::EffectRewinder::skipSingleMainSequenceEffects().

◆ clear()

void slideshow::internal::UserEventQueue::clear ( )

◆ operator=()

UserEventQueue & slideshow::internal::UserEventQueue::operator= ( const UserEventQueue )
delete

◆ registerAnimationEndEvent()

void slideshow::internal::UserEventQueue::registerAnimationEndEvent ( const EventSharedPtr rEvent,
const css::uno::Reference< css::animations::XAnimationNode > &  xNode 
)

Register an event that will be fired when the given animation node ends its active duration.

Note that all registered events will be fired when the animation end occurs. This is in contrast to the mouse events below.

Definition at line 624 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addAnimationEndHandler(), mpAnimationEndEventHandler, mrMultiplexer, and registerEvent().

Referenced by slideshow::internal::generateEvent().

◆ registerAnimationStartEvent()

void slideshow::internal::UserEventQueue::registerAnimationStartEvent ( const EventSharedPtr rEvent,
const css::uno::Reference< css::animations::XAnimationNode > &  xNode 
)

Register an event that will be fired when the given animation node starts.

Note that all registered events will be fired when the animation start occurs. This is in contrast to the mouse events below.

Definition at line 613 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addAnimationStartHandler(), mpAnimationStartEventHandler, mrMultiplexer, and registerEvent().

Referenced by slideshow::internal::generateEvent().

◆ registerAudioStoppedEvent()

void slideshow::internal::UserEventQueue::registerAudioStoppedEvent ( const EventSharedPtr rEvent,
const css::uno::Reference< css::animations::XAnimationNode > &  xNode 
)

Register an event that will be fired when audio output stopped for the given animation node.

Note that all registered events will be fired when the audio stopping occurs. This is in contrast to the mouse events below.

Definition at line 635 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addAudioStoppedHandler(), mpAudioStoppedEventHandler, mrMultiplexer, and registerEvent().

Referenced by slideshow::internal::generateEvent().

◆ registerEvent() [1/4]

template<typename Handler , typename Arg , typename Functor >
void slideshow::internal::UserEventQueue::registerEvent ( ::std::shared_ptr< Handler > &  rHandler,
const EventSharedPtr rEvent,
const Arg &  rArg,
const Functor &  rRegistrationFunctor 
)
private

Generically register an event on one of the handlers.

If the handler is not yet created, do that and register it via the Functor. This version of the registerEvent method takes an additional parameter rArg, which is passed as the second argument to rHandler's addEvent() method.

◆ registerEvent() [2/4]

template<typename Handler , typename Functor >
void slideshow::internal::UserEventQueue::registerEvent ( ::std::shared_ptr< Handler > &  rHandler,
const EventSharedPtr rEvent,
const Functor &  rRegistrationFunctor 
)
private

Generically register an event on one of the handlers.

If the handler is not yet created, do that and register it via the Functor

Referenced by registerAnimationEndEvent(), registerAnimationStartEvent(), registerAudioStoppedEvent(), registerMouseEnterEvent(), registerMouseLeaveEvent(), and registerNextEffectEvent().

◆ registerEvent() [3/4]

template<typename Handler , typename Arg , typename Functor >
void slideshow::internal::UserEventQueue::registerEvent ( std::shared_ptr< Handler > &  rHandler,
const EventSharedPtr rEvent,
const Arg &  rArg,
const Functor &  rRegistrationFunctor 
)

Definition at line 506 of file usereventqueue.cxx.

References ENSURE_OR_THROW, and mrEventQueue.

◆ registerEvent() [4/4]

template<typename Handler , typename Functor >
void slideshow::internal::UserEventQueue::registerEvent ( std::shared_ptr< Handler > &  rHandler,
const EventSharedPtr rEvent,
const Functor &  rRegistrationFunctor 
)

Definition at line 487 of file usereventqueue.cxx.

References ENSURE_OR_THROW, and mrEventQueue.

◆ registerMouseEnterEvent()

void slideshow::internal::UserEventQueue::registerMouseEnterEvent ( const EventSharedPtr rEvent,
const ShapeSharedPtr rShape 
)

Register an event that is fired when the mouse enters the area of the given shape.

For every enter, only one of the events registered here is fired. The order of fired events is the order of registration, i.e. the first event registered will be the one fired for the first time the mouse enters the given shape.

Definition at line 761 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addMouseMoveHandler(), mpMouseEnterHandler, mrMultiplexer, and registerEvent().

Referenced by slideshow::internal::generateEvent().

◆ registerMouseLeaveEvent()

void slideshow::internal::UserEventQueue::registerMouseLeaveEvent ( const EventSharedPtr rEvent,
const ShapeSharedPtr rShape 
)

Register an event that is fired when the mouse leaves the area of the given shape.

For every leave, only one of the events registered here is fired. The order of fired events is the order of registration, i.e. the first event registered will be the one fired for the first time the mouse leaves the given shape area.

Definition at line 771 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addMouseMoveHandler(), mpMouseLeaveHandler, mrMultiplexer, and registerEvent().

Referenced by slideshow::internal::generateEvent().

◆ registerNextEffectEvent()

void slideshow::internal::UserEventQueue::registerNextEffectEvent ( const EventSharedPtr rEvent)

Register an event that is fired to show the next event.

For every next effect event, only one of the events registered here is fired. The order of fired events is the order of registration, i.e. the first event registered will be the one fired for the first mouse click. When advance-on-click (see method setAdvanceOnClick()) is enabled, a mouse click somewhere on the slide will also generate a next effect event. In this case, it is irrelevant where on the slide the mouse is clicked, i.e. the shape need not be hit by the mouse.

Definition at line 699 of file usereventqueue.cxx.

References mbAdvanceOnClick, mpClickEventHandler, mrMultiplexer, and registerEvent().

Referenced by slideshow::internal::generateEvent().

◆ registerShapeClickEvent()

void slideshow::internal::UserEventQueue::registerShapeClickEvent ( const EventSharedPtr rEvent,
const ShapeSharedPtr rShape 
)

Register an event that is fired when a shape is clicked.

For every mouse click, only one of the events registered here is fired. The order of fired events is the order of registration, i.e. the first event registered will be the one fired for the first mouse click on the given shape.

Definition at line 646 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addClickHandler(), slideshow::internal::EventMultiplexer::addMouseMoveHandler(), ENSURE_OR_THROW, mpShapeClickEventHandler, mrCursorManager, mrEventQueue, and mrMultiplexer.

Referenced by slideshow::internal::generateEvent().

◆ registerShapeDoubleClickEvent()

void slideshow::internal::UserEventQueue::registerShapeDoubleClickEvent ( const EventSharedPtr rEvent,
const ShapeSharedPtr rShape 
)

Register an event that is fired on a double mouse click on a shape.

For every mouse double click, only one of the events registered here is fired. The order of fired events is the order of registration, i.e. the first event registered will be the one fired for the first mouse double click. It is irrelevant where on the slide the mouse is clicked, i.e. the shape need not be hit by the mouse.

Definition at line 736 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addDoubleClickHandler(), slideshow::internal::EventMultiplexer::addMouseMoveHandler(), ENSURE_OR_THROW, mpShapeDoubleClickEventHandler, mrCursorManager, mrEventQueue, and mrMultiplexer.

Referenced by slideshow::internal::generateEvent().

◆ registerSkipEffectEvent()

void slideshow::internal::UserEventQueue::registerSkipEffectEvent ( EventSharedPtr const &  pEvent,
const bool  bSkipTriggersNextEffect 
)

Registers an event that is fired when the current effects(s) are skipped, .e.g.

when the left mouse button is pressed. Then, all registered events are fired and removed from this queue. After firing, a next effect event is issued to this queue to start the next effect.

Parameters
pEventThe event to execute when skipping the current effect.
bSkipTriggersNextEffectWhen <TRUE> then after skipping the current effect the next effect is triggered. When <FALSE> then the next effect is not triggered.

Definition at line 713 of file usereventqueue.cxx.

References slideshow::internal::EventMultiplexer::addClickHandler(), slideshow::internal::EventMultiplexer::addNextEffectHandler(), mbAdvanceOnClick, mpSkipEffectEventHandler, mrEventQueue, and mrMultiplexer.

Referenced by slideshow::internal::SequentialTimeContainer::resolveChild().

◆ setAdvanceOnClick()

void slideshow::internal::UserEventQueue::setAdvanceOnClick ( bool  bAdvanceOnClick)

Set advance on click behaviour.

Parameters
bAdvanceOnClickWhen true, a click somewhere on the slide will also generate next effect event. In this case, it is irrelevant where on the slide the mouse is clicked, i.e. the shape need not be hit by the mouse.

Definition at line 603 of file usereventqueue.cxx.

References mbAdvanceOnClick, and mpClickEventHandler.

Member Data Documentation

◆ mbAdvanceOnClick

bool slideshow::internal::UserEventQueue::mbAdvanceOnClick
private

◆ mpAnimationEndEventHandler

::std::shared_ptr<AllAnimationEventHandler> slideshow::internal::UserEventQueue::mpAnimationEndEventHandler
private

Definition at line 253 of file usereventqueue.hxx.

Referenced by clear(), and registerAnimationEndEvent().

◆ mpAnimationStartEventHandler

::std::shared_ptr<AllAnimationEventHandler> slideshow::internal::UserEventQueue::mpAnimationStartEventHandler
private

Definition at line 252 of file usereventqueue.hxx.

Referenced by clear(), and registerAnimationStartEvent().

◆ mpAudioStoppedEventHandler

::std::shared_ptr<AllAnimationEventHandler> slideshow::internal::UserEventQueue::mpAudioStoppedEventHandler
private

Definition at line 254 of file usereventqueue.hxx.

Referenced by clear(), and registerAudioStoppedEvent().

◆ mpClickEventHandler

::std::shared_ptr<ClickEventHandler> slideshow::internal::UserEventQueue::mpClickEventHandler
private

Definition at line 256 of file usereventqueue.hxx.

Referenced by clear(), registerNextEffectEvent(), and setAdvanceOnClick().

◆ mpMouseEnterHandler

::std::shared_ptr<MouseEnterHandler> slideshow::internal::UserEventQueue::mpMouseEnterHandler
private

Definition at line 259 of file usereventqueue.hxx.

Referenced by clear(), and registerMouseEnterEvent().

◆ mpMouseLeaveHandler

::std::shared_ptr<MouseLeaveHandler> slideshow::internal::UserEventQueue::mpMouseLeaveHandler
private

Definition at line 260 of file usereventqueue.hxx.

Referenced by clear(), and registerMouseLeaveEvent().

◆ mpShapeClickEventHandler

::std::shared_ptr<ShapeClickEventHandler> slideshow::internal::UserEventQueue::mpShapeClickEventHandler
private

Definition at line 255 of file usereventqueue.hxx.

Referenced by clear(), and registerShapeClickEvent().

◆ mpShapeDoubleClickEventHandler

::std::shared_ptr<ShapeClickEventHandler> slideshow::internal::UserEventQueue::mpShapeDoubleClickEventHandler
private

Definition at line 258 of file usereventqueue.hxx.

Referenced by clear(), and registerShapeDoubleClickEvent().

◆ mpSkipEffectEventHandler

::std::shared_ptr<SkipEffectEventHandler> slideshow::internal::UserEventQueue::mpSkipEffectEventHandler
private

Definition at line 257 of file usereventqueue.hxx.

Referenced by callSkipEffectEventHandler(), clear(), and registerSkipEffectEvent().

◆ mrCursorManager

CursorManager& slideshow::internal::UserEventQueue::mrCursorManager
private

Definition at line 250 of file usereventqueue.hxx.

Referenced by registerShapeClickEvent(), and registerShapeDoubleClickEvent().

◆ mrEventQueue

EventQueue& slideshow::internal::UserEventQueue::mrEventQueue
private

◆ mrMultiplexer

EventMultiplexer& slideshow::internal::UserEventQueue::mrMultiplexer
private

The documentation for this class was generated from the following files: