diff options
Diffstat (limited to 'slideshow/source/engine/usereventqueue.cxx')
-rw-r--r-- | slideshow/source/engine/usereventqueue.cxx | 220 |
1 files changed, 110 insertions, 110 deletions
diff --git a/slideshow/source/engine/usereventqueue.cxx b/slideshow/source/engine/usereventqueue.cxx index b1791a47b9a3..48b588a73c32 100644 --- a/slideshow/source/engine/usereventqueue.cxx +++ b/slideshow/source/engine/usereventqueue.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -92,7 +92,7 @@ bool fireSingleEvent( ContainerT & rQueue, EventQueue & rEventQueue ) { EventSharedPtr const pEvent(rQueue.front()); rQueue.pop(); - + // skip all inactive events (as the purpose of // nextEventFromQueue() is to activate the next // event, and events which return false on @@ -118,25 +118,25 @@ bool fireAllEvents( ContainerT & rQueue, EventQueue & rEventQueue ) class EventContainer { public: - EventContainer() : - maEvents() + EventContainer() : + maEvents() {} - + void clearContainer() { maEvents = ImpEventQueue(); } - + void addEvent( const EventSharedPtr& rEvent ) { maEvents.push( rEvent ); } - + bool isEmpty() { return maEvents.empty(); } - + protected: ImpEventQueue maEvents; }; @@ -149,17 +149,17 @@ class PlainEventHandler : public EventHandler, public: PlainEventHandler( EventQueue & rEventQueue ) : EventContainer(), mrEventQueue(rEventQueue) {} - + virtual void dispose() { clearContainer(); } - + virtual bool handleEvent() { return fireAllEvents( maEvents, mrEventQueue ); } - + private: EventQueue & mrEventQueue; }; @@ -169,41 +169,41 @@ class AllAnimationEventHandler : public AnimationEventHandler public: AllAnimationEventHandler( EventQueue& rEventQueue ) : mrEventQueue( rEventQueue ), - maAnimationEventMap() + maAnimationEventMap() {} - + virtual void dispose() { maAnimationEventMap.clear(); } - + virtual bool handleAnimationEvent( const AnimationNodeSharedPtr& rNode ) { ENSURE_OR_RETURN_FALSE( rNode, "AllAnimationEventHandler::handleAnimationEvent(): Invalid node" ); - + bool bRet( false ); - + ImpAnimationEventMap::iterator aIter; - if( (aIter=maAnimationEventMap.find( + if( (aIter=maAnimationEventMap.find( rNode->getXAnimationNode() )) != maAnimationEventMap.end() ) { ImpEventVector& rVec( aIter->second ); - + bRet = !rVec.empty(); - + // registered node found -> fire all events in the vector std::for_each( rVec.begin(), rVec.end(), boost::bind( &EventQueue::addEvent, boost::ref( mrEventQueue ), _1 ) ); - + rVec.clear(); } - + return bRet; } - + void addEvent( const EventSharedPtr& rEvent, const uno::Reference< animations::XAnimationNode >& xNode ) { @@ -216,11 +216,11 @@ public: ImpAnimationEventMap::value_type( xNode, ImpEventVector() ) ).first; } - + // add new event to queue aIter->second.push_back( rEvent ); } - + bool isEmpty() { // find at least one animation with a non-empty vector @@ -230,13 +230,13 @@ public: { if( !aCurr->second.empty() ) return false; // at least one non-empty entry found - + ++aCurr; } - + return true; // not a single non-empty entry found } - + private: EventQueue& mrEventQueue; ImpAnimationEventMap maAnimationEventMap; @@ -250,14 +250,14 @@ public: ClickEventHandler( EventQueue& rEventQueue ) : EventContainer(), mrEventQueue( rEventQueue ), - mbAdvanceOnClick( true ) + mbAdvanceOnClick( true ) {} - + void setAdvanceOnClick( bool bAdvanceOnClick ) { mbAdvanceOnClick = bAdvanceOnClick; } - + private: virtual void dispose() { @@ -269,13 +269,13 @@ private: { return handleEvent_impl(); } - + // triggered by mouse release: virtual bool handleMouseReleased( const awt::MouseEvent& evt ) { if(evt.Buttons != awt::MouseButton::LEFT) return false; - + if( mbAdvanceOnClick ) { // fire next event return handleEvent_impl(); @@ -284,14 +284,14 @@ private: return false; // advance-on-click disabled } } - + // triggered by both: virtual bool handleEvent_impl() { // fire next event: return fireSingleEvent( maEvents, mrEventQueue ); } - + private: EventQueue& mrEventQueue; bool mbAdvanceOnClick; @@ -315,7 +315,7 @@ public: /// Skip the current effect but do not triggere the next effect. void skipEffect (void) { handleEvent_impl(false); } - + private: virtual bool handleEvent_impl() { @@ -326,7 +326,7 @@ private: { // fire all events, so animation nodes can register their // next effect listeners: - if(fireAllEvents( maEvents, mrEventQueue )) + if(fireAllEvents( maEvents, mrEventQueue )) { if (mbSkipTriggersNextEffect && bNotifyNextEffect) { @@ -346,7 +346,7 @@ private: } return false; } - + private: EventQueue & mrEventQueue; EventMultiplexer & mrEventMultiplexer; @@ -359,28 +359,28 @@ class RewindEffectEventHandler : public MouseEventHandler_, public: RewindEffectEventHandler( EventQueue & rEventQueue ) : EventContainer(), mrEventQueue(rEventQueue) {} - + private: virtual void dispose() { clearContainer(); } - + virtual bool handleMouseReleased( awt::MouseEvent const& evt ) { if(evt.Buttons != awt::MouseButton::RIGHT) return false; - + return fireAllEvents( maEvents, mrEventQueue ); } - + private: EventQueue & mrEventQueue; }; /** Base class to share some common code between ShapeClickEventHandler and MouseMoveHandler - + @derive override necessary MouseEventHandler interface methods, call sendEvent() method to actually process the event. */ @@ -389,16 +389,16 @@ class MouseHandlerBase : public MouseEventHandler_ public: MouseHandlerBase( EventQueue& rEventQueue ) : mrEventQueue( rEventQueue ), - maShapeEventMap() + maShapeEventMap() {} - + virtual void dispose() { - // TODO(Q1): Check whether plain vector with swap idiom is + // TODO(Q1): Check whether plain vector with swap idiom is // okay here maShapeEventMap = ImpShapeEventMap(); } - + void addEvent( const EventSharedPtr& rEvent, const ShapeSharedPtr& rShape ) { @@ -410,11 +410,11 @@ public: ImpShapeEventMap::value_type( rShape, ImpEventQueue() ) ).first; } - + // add new event to queue aIter->second.push( rEvent ); } - + bool isEmpty() { // find at least one shape with a non-empty queue @@ -424,20 +424,20 @@ public: { if( !aCurrShape->second.empty() ) return false; // at least one non-empty entry found - + ++aCurrShape; } - + return true; // not a single non-empty entry found } - + protected: bool hitTest( const awt::MouseEvent& e, ImpShapeEventMap::reverse_iterator& o_rHitShape ) { // find hit shape in map const basegfx::B2DPoint aPosition( e.X, e.Y ); - + // find matching shape (scan reversely, to coarsely match // paint order) ImpShapeEventMap::reverse_iterator aCurrShape(maShapeEventMap.rbegin()); @@ -455,19 +455,19 @@ protected: o_rHitShape = aCurrShape; return true; } - + ++aCurrShape; } - + return false; // nothing hit } - + bool sendEvent( ImpShapeEventMap::reverse_iterator& io_rHitShape ) { // take next event from queue const bool bRet( fireSingleEvent( io_rHitShape->second, mrEventQueue ) ); - + // clear shape entry, if its queue is // empty. This is important, since the shapes // are held by shared ptr, and might otherwise @@ -483,20 +483,20 @@ protected: // orthogonality, eh?) maShapeEventMap.erase( io_rHitShape->first ); } - + return bRet; } - + bool processEvent( const awt::MouseEvent& e ) { ImpShapeEventMap::reverse_iterator aCurrShape; - + if( hitTest( e, aCurrShape ) ) return sendEvent( aCurrShape ); - + return false; // did not handle the event } - + private: EventQueue& mrEventQueue; ImpShapeEventMap maShapeEventMap; @@ -508,20 +508,20 @@ public: ShapeClickEventHandler( CursorManager& rCursorManager, EventQueue& rEventQueue ) : MouseHandlerBase( rEventQueue ), - mrCursorManager( rCursorManager ) + mrCursorManager( rCursorManager ) {} - + virtual bool handleMouseReleased( const awt::MouseEvent& e ) { if(e.Buttons != awt::MouseButton::LEFT) return false; return processEvent( e ); } - + virtual bool handleMouseMoved( const awt::MouseEvent& e ) { // TODO(P2): Maybe buffer last shape touched - + // if we have a shape click event, and the mouse // hovers over this shape, change cursor to hand ImpShapeEventMap::reverse_iterator aDummy; @@ -531,7 +531,7 @@ public: return false; // we don't /eat/ this event. Lower prio // handler should see it, too. } - + private: CursorManager& mrCursorManager; }; @@ -542,12 +542,12 @@ public: MouseEnterHandler( EventQueue& rEventQueue ) : MouseHandlerBase( rEventQueue ), mpLastShape() {} - + virtual bool handleMouseMoved( const awt::MouseEvent& e ) { // TODO(P2): Maybe buffer last shape touched, and // check against that _first_ - + ImpShapeEventMap::reverse_iterator aCurr; if( hitTest( e, aCurr ) ) { @@ -565,11 +565,11 @@ public: // don't hit no shape - thus, last shape is NULL mpLastShape.reset(); } - + return false; // we don't /eat/ this event. Lower prio // handler should see it, too. } - + private: ShapeSharedPtr mpLastShape; }; @@ -580,12 +580,12 @@ public: MouseLeaveHandler( EventQueue& rEventQueue ) : MouseHandlerBase( rEventQueue ), maLastIter() {} - + virtual bool handleMouseMoved( const awt::MouseEvent& e ) { // TODO(P2): Maybe buffer last shape touched, and // check against that _first_ - + ImpShapeEventMap::reverse_iterator aCurr; if( hitTest( e, aCurr ) ) { @@ -600,21 +600,21 @@ public: // event sendEvent( maLastIter ); } - + // in any case, when we hit this else-branch: no // shape hit, thus have to clear maLastIter maLastIter = ImpShapeEventMap::reverse_iterator(); } - + return false; // we don't /eat/ this event. Lower prio // handler should see it, too. } - + private: ImpShapeEventMap::reverse_iterator maLastIter; }; -template< typename Handler, typename Functor > +template< typename Handler, typename Functor > void UserEventQueue::registerEvent( boost::shared_ptr< Handler >& rHandler, const EventSharedPtr& rEvent, @@ -622,18 +622,18 @@ void UserEventQueue::registerEvent( { ENSURE_OR_THROW( rEvent, "UserEventQueue::registerEvent(): Invalid event" ); - + if( !rHandler ) { // create handler - rHandler.reset( new Handler( mrEventQueue ) ); + rHandler.reset( new Handler( mrEventQueue ) ); // register handler on EventMultiplexer rRegistrationFunctor( rHandler ); } - + rHandler->addEvent( rEvent ); } -template< typename Handler, typename Arg, typename Functor > +template< typename Handler, typename Arg, typename Functor > void UserEventQueue::registerEvent( boost::shared_ptr< Handler >& rHandler, const EventSharedPtr& rEvent, @@ -642,15 +642,15 @@ void UserEventQueue::registerEvent( { ENSURE_OR_THROW( rEvent, "UserEventQueue::registerEvent(): Invalid event" ); - + if( !rHandler ) { // create handler rHandler.reset( new Handler( mrEventQueue ) ); - + // register handler on EventMultiplexer rRegistrationFunctor( rHandler ); } - + rHandler->addEvent( rEvent, rArg ); } @@ -674,7 +674,7 @@ UserEventQueue::UserEventQueue( EventMultiplexer& rMultiplexer, mpRewindEffectEventHandler(), mpDoubleClickEventHandler(), mpMouseEnterHandler(), - mpMouseLeaveHandler(), + mpMouseLeaveHandler(), mbAdvanceOnClick( true ) { } @@ -683,7 +683,7 @@ UserEventQueue::~UserEventQueue() { try { - // unregister all handlers + // unregister all handlers clear(); } catch (uno::Exception &) { @@ -693,16 +693,16 @@ UserEventQueue::~UserEventQueue() RTL_TEXTENCODING_UTF8 ).getStr() ); } } - + bool UserEventQueue::isEmpty() const { - // TODO(T2): This is not thread safe, the handlers are all - // only separately synchronized. This poses the danger of + // TODO(T2): This is not thread safe, the handlers are all + // only separately synchronized. This poses the danger of // generating false empty status on XSlideShow::update(), such // that the last events of a slide are not triggered. - + // we're empty iff all handler queues are empty - return + return (mpStartEventHandler ? mpStartEventHandler->isEmpty() : true) && (mpEndEventHandler ? mpEndEventHandler->isEmpty() : true) && (mpAnimationStartEventHandler ? mpAnimationStartEventHandler->isEmpty() : true) && @@ -783,7 +783,7 @@ void UserEventQueue::clear() void UserEventQueue::setAdvanceOnClick( bool bAdvanceOnClick ) { mbAdvanceOnClick = bAdvanceOnClick; - + // forward to handler, if existing. Otherwise, the handler // creation will do the forwarding. if( mpClickEventHandler ) @@ -793,7 +793,7 @@ void UserEventQueue::setAdvanceOnClick( bool bAdvanceOnClick ) void UserEventQueue::registerSlideStartEvent( const EventSharedPtr& rEvent ) { - registerEvent( mpStartEventHandler, + registerEvent( mpStartEventHandler, rEvent, boost::bind( &EventMultiplexer::addSlideStartHandler, boost::ref( mrMultiplexer ), _1 ) ); @@ -801,7 +801,7 @@ void UserEventQueue::registerSlideStartEvent( const EventSharedPtr& rEvent ) void UserEventQueue::registerSlideEndEvent( const EventSharedPtr& rEvent ) { - registerEvent( mpEndEventHandler, + registerEvent( mpEndEventHandler, rEvent, boost::bind( &EventMultiplexer::addSlideEndHandler, boost::ref( mrMultiplexer ), _1 ) ); @@ -811,7 +811,7 @@ void UserEventQueue::registerAnimationStartEvent( const EventSharedPtr& rEvent, const uno::Reference< animations::XAnimationNode>& xNode ) { - registerEvent( mpAnimationStartEventHandler, + registerEvent( mpAnimationStartEventHandler, rEvent, xNode, boost::bind( &EventMultiplexer::addAnimationStartHandler, @@ -822,7 +822,7 @@ void UserEventQueue::registerAnimationEndEvent( const EventSharedPtr& rEvent, const uno::Reference<animations::XAnimationNode>& xNode ) { - registerEvent( mpAnimationEndEventHandler, + registerEvent( mpAnimationEndEventHandler, rEvent, xNode, boost::bind( &EventMultiplexer::addAnimationEndHandler, @@ -833,7 +833,7 @@ void UserEventQueue::registerAudioStoppedEvent( const EventSharedPtr& rEvent, const uno::Reference<animations::XAnimationNode>& xNode ) { - registerEvent( mpAudioStoppedEventHandler, + registerEvent( mpAudioStoppedEventHandler, rEvent, xNode, boost::bind( &EventMultiplexer::addAudioStoppedHandler, @@ -846,19 +846,19 @@ void UserEventQueue::registerShapeClickEvent( const EventSharedPtr& rEvent, ENSURE_OR_THROW( rEvent, "UserEventQueue::registerShapeClickEvent(): Invalid event" ); - + if( !mpShapeClickEventHandler ) { // create handler mpShapeClickEventHandler.reset( new ShapeClickEventHandler(mrCursorManager, mrEventQueue) ); - + // register handler on EventMultiplexer mrMultiplexer.addClickHandler( mpShapeClickEventHandler, 1.0 ); mrMultiplexer.addMouseMoveHandler( mpShapeClickEventHandler, 1.0 ); } - + mpShapeClickEventHandler->addEvent( rEvent, rShape ); } @@ -872,20 +872,20 @@ public: : mrMultiplexer( rMultiplexer ), mnPrio(nPrio), mbAdvanceOnClick( bAdvanceOnClick ) {} - + void operator()( const boost::shared_ptr<ClickEventHandler>& rHandler )const { // register the handler on _two_ sources: we want the // nextEffect events, e.g. space bar, to trigger clicks, as well! mrMultiplexer.addClickHandler( rHandler, mnPrio ); mrMultiplexer.addNextEffectHandler( rHandler, mnPrio ); - + // forward advance-on-click state to newly // generated handler (that's the only reason why // we're called here) rHandler->setAdvanceOnClick( mbAdvanceOnClick ); } - + private: EventMultiplexer& mrMultiplexer; double const mnPrio; @@ -900,7 +900,7 @@ void UserEventQueue::registerNextEffectEvent( const EventSharedPtr& rEvent ) // skip effect (skipping the currently running one) // rewind effect (rewinding back running one and waiting (again) // to be started) - registerEvent( mpClickEventHandler, + registerEvent( mpClickEventHandler, rEvent, ClickEventRegistrationFunctor( mrMultiplexer, 0.0 /* default prio */, @@ -911,7 +911,7 @@ void UserEventQueue::registerSkipEffectEvent( EventSharedPtr const & pEvent, const bool bSkipTriggersNextEffect) { - if(!mpSkipEffectEventHandler) + if(!mpSkipEffectEventHandler) { mpSkipEffectEventHandler.reset( new SkipEffectEventHandler( mrEventQueue, mrMultiplexer ) ); @@ -946,27 +946,27 @@ void UserEventQueue::registerShapeDoubleClickEvent( ENSURE_OR_THROW( rEvent, "UserEventQueue::registerShapeDoubleClickEvent(): Invalid event" ); - + if( !mpShapeDoubleClickEventHandler ) { // create handler mpShapeDoubleClickEventHandler.reset( new ShapeClickEventHandler(mrCursorManager, mrEventQueue) ); - + // register handler on EventMultiplexer mrMultiplexer.addDoubleClickHandler( mpShapeDoubleClickEventHandler, 1.0 ); mrMultiplexer.addMouseMoveHandler( mpShapeDoubleClickEventHandler, 1.0 ); } - + mpShapeDoubleClickEventHandler->addEvent( rEvent, rShape ); } void UserEventQueue::registerDoubleClickEvent( const EventSharedPtr& rEvent ) { - registerEvent( mpDoubleClickEventHandler, + registerEvent( mpDoubleClickEventHandler, rEvent, boost::bind( &EventMultiplexer::addDoubleClickHandler, boost::ref( mrMultiplexer ), _1, @@ -976,7 +976,7 @@ void UserEventQueue::registerDoubleClickEvent( const EventSharedPtr& rEvent ) void UserEventQueue::registerMouseEnterEvent( const EventSharedPtr& rEvent, const ShapeSharedPtr& rShape ) { - registerEvent( mpMouseEnterHandler, + registerEvent( mpMouseEnterHandler, rEvent, rShape, boost::bind( &EventMultiplexer::addMouseMoveHandler, @@ -987,7 +987,7 @@ void UserEventQueue::registerMouseEnterEvent( const EventSharedPtr& rEvent, void UserEventQueue::registerMouseLeaveEvent( const EventSharedPtr& rEvent, const ShapeSharedPtr& rShape ) { - registerEvent( mpMouseLeaveHandler, + registerEvent( mpMouseLeaveHandler, rEvent, rShape, boost::bind( &EventMultiplexer::addMouseMoveHandler, |