diff options
Diffstat (limited to 'slideshow/source/inc/eventmultiplexer.hxx')
-rw-r--r-- | slideshow/source/inc/eventmultiplexer.hxx | 663 |
1 files changed, 0 insertions, 663 deletions
diff --git a/slideshow/source/inc/eventmultiplexer.hxx b/slideshow/source/inc/eventmultiplexer.hxx deleted file mode 100644 index aae1c4024..000000000 --- a/slideshow/source/inc/eventmultiplexer.hxx +++ /dev/null @@ -1,663 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef INCLUDED_SLIDESHOW_EVENTMULTIPLEXER_HXX -#define INCLUDED_SLIDESHOW_EVENTMULTIPLEXER_HXX - -#include "eventhandler.hxx" -#include "hyperlinkhandler.hxx" -#include "mouseeventhandler.hxx" -#include "animationeventhandler.hxx" -#include "pauseeventhandler.hxx" -#include "shapelistenereventhandler.hxx" -#include "shapecursoreventhandler.hxx" -#include "userpainteventhandler.hxx" -#include "vieweventhandler.hxx" -#include "viewrepainthandler.hxx" - -#include <boost/scoped_ptr.hpp> -#include <boost/noncopyable.hpp> - - -namespace slideshow { -namespace internal { - -class EventQueue; -class UnoViewContainer; -class AnimationNode; - -struct EventMultiplexerImpl; - -/** 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 occurred, but only after the given - timeout. Which is actually a feature. -*/ -class EventMultiplexer : 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. - - @param rViewContainer - Globally managed list of all registered views. Used to - determine event sources, and for registering view listeners - at. - */ - EventMultiplexer( EventQueue& rEventQueue, - UnoViewContainer const& rViewContainer ); - ~EventMultiplexer(); - - - // Management methods - // ========================================================= - - /** Clear all registered handlers. - */ - void clear(); - - - // 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 ); - void removeViewHandler( const ViewEventHandlerWeakPtr& rHandler ); - - /** Register an event handler that will be called when a view gets - clobbered. - - Note that <em>all</em> registered handlers will be called when - the event. This is in contrast to the mouse events below. - - @param rHandler - Handler to call when a view needs a repaint - */ - void addViewRepaintHandler( const ViewRepaintHandlerSharedPtr& rHandler ); - void removeViewRepaintHandler( const ViewRepaintHandlerSharedPtr& rHandler ); - - /** Register an event handler that will be called when - XShapeListeners are changed. - - @param rHandler - Handler to call when a shape listener changes - */ - void addShapeListenerHandler( const ShapeListenerEventHandlerSharedPtr& rHandler ); - void removeShapeListenerHandler( const ShapeListenerEventHandlerSharedPtr& rHandler ); - - /** Register an event handler that will be called when - XShapeListeners are changed. - - @param rHandler - Handler to call when a shape listener changes - */ - void addShapeCursorHandler( const ShapeCursorEventHandlerSharedPtr& rHandler ); - void removeShapeCursorHandler( const ShapeCursorEventHandlerSharedPtr& rHandler ); - - /** Register an event handler that will be called when - user paint parameters change. - - @param rHandler - Handler to call when a shape listener changes - */ - void addUserPaintHandler( const UserPaintEventHandlerSharedPtr& rHandler ); - void removeUserPaintHandler( const UserPaintEventHandlerSharedPtr& 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 ); - - - /** Registers a hyperlink click handler. - - For every hyperlink 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. - - @param rHandler - @param nPriority - */ - void addHyperlinkHandler( const HyperlinkHandlerSharedPtr& rHandler, - double nPriority ); - void removeHyperlinkHandler( const HyperlinkHandlerSharedPtr& rHandler ); - - - // 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. - - @param rView - View that has changed - */ - bool notifyViewChanged( const UnoViewSharedPtr& rView ); - - /** View changed - - This method announces a changed view to all view - listeners. View changes include size and transformation. - - @param xView - View that has changed - */ - bool notifyViewChanged( const ::com::sun::star::uno::Reference< - ::com::sun::star::presentation::XSlideShowView>& xView ); - - /** 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(); - - /** View clobbered - - This method announces that the given view has been clobbered - by something external to the slideshow, and needs an update. - - @param xView - View that has been clobbered - */ - bool notifyViewClobbered( const ::com::sun::star::uno::Reference< - ::com::sun::star::presentation::XSlideShowView>& xView ); - - /** New shape event listener added - - This method announces that the given listener was added for - the specified shape. - - @return true, if at least one handler successfully processed - the notification. - */ - bool notifyShapeListenerAdded( const ::com::sun::star::uno::Reference< - ::com::sun::star::presentation::XShapeEventListener>& xListener, - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShape>& xShape ); - - /** A shape event listener was removed - - This method announces that the given listener was removed for - the specified shape. - - @return true, if at least one handler successfully processed - the notification. - */ - bool notifyShapeListenerRemoved( const ::com::sun::star::uno::Reference< - ::com::sun::star::presentation::XShapeEventListener>& xListener, - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShape>& xShape ); - - /** A new shape cursor was set - - This method announces that the given cursor was set for the - specified shape. - - @return true, if at least one handler successfully processed - the notification. - */ - bool notifyShapeCursorChange( const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShape>& xShape, - sal_Int16 nPointerShape ); - - /** Notify a new user paint color - - Sending this notification also implies that user paint is - enabled. User paint denotes the feature to draw colored lines - on top of the slide content. - - @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 notifyUserPaintColor( RGBColor const& rUserColor ); - - /** Notify a new user paint width - - Sending this notification also implies that user paint is - enabled. . - - @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 notifyUserPaintStrokeWidth( double rUserStrokeWidth ); - - - /** Notify a new user paint erase all ink mode - - Sending this notification also implies that user paint is - enabled. User paint denotes the feature to draw colored lines - on top of the slide content. - - @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 notifyEraseAllInk( bool const& rEraseAllInk ); - bool notifySwitchPenMode(); - bool notifySwitchEraserMode(); - bool notifyEraseInkWidth( sal_Int32 rEraseInkSize ); - - /** Notify that user paint is disabled - - User paint denotes the feature to draw colored lines on top of - the slide content. - - @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 notifyUserPaintDisabled(); - - /** 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 is about to be displayed - */ - bool notifySlideTransitionStarted(); - - /** 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 boost::shared_ptr<AnimationNode>& 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 boost::shared_ptr<AnimationNode>& 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 boost::shared_ptr<AnimationNode>& 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 boost::shared_ptr<AnimationNode>& 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: - boost::scoped_ptr<EventMultiplexerImpl> mpImpl; -}; - -} // namespace internal -} // namespace Presentation - -#endif /* INCLUDED_SLIDESHOW_EVENTMULTIPLEXER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |