12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //
- // EventDispatcher.h
- //
- // Library: XML
- // Package: DOM
- // Module: DOMEvents
- //
- // Definition of the EventDispatcher class.
- //
- // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef DOM_EventDispatcher_INCLUDED
- #define DOM_EventDispatcher_INCLUDED
- #include "Poco/XML/XML.h"
- #include "Poco/XML/XMLString.h"
- #include <list>
- namespace Poco {
- namespace XML {
- class Event;
- class EventListener;
- class XML_API EventDispatcher
- /// This helper class manages event listener subscriptions
- /// and event dispatching for AbstractNode.
- ///
- /// The EventListener list is managed in such a way that
- /// event listeners can be added and removed even
- /// from within an EventListener, while events are being
- /// dispatched.
- {
- public:
- EventDispatcher();
- /// Creates the EventDispatcher.
-
- ~EventDispatcher();
- /// Destroys the EventDispatcher.
-
- void addEventListener(const XMLString& type, EventListener* listener, bool useCapture);
- /// Adds an EventListener to the internal list.
-
- void removeEventListener(const XMLString& type, EventListener* listener, bool useCapture);
- /// Removes an EventListener from the internal list.
- ///
- /// If a dispatch is currently in progress, the list
- /// entry is only marked for deletion.
- /// If no dispatch is currently in progress, all EventListeners
- /// marked for deletion are removed from the list.
- void dispatchEvent(Event* evt);
- /// Dispatches the event.
- ///
- /// Also removes all EventListeners marked for deletion from the
- /// event dispatcher list.
-
- void captureEvent(Event* evt);
- /// Dispatches the event in its capturing phase.
- ///
- /// Also removes all EventListeners marked for deletion from the
- /// event dispatcher list.
-
- void bubbleEvent(Event* evt);
- /// Dispatches the event in its bubbling phase.
- ///
- /// Also removes all EventListeners marked for deletion from the
- /// event dispatcher list.
- private:
- struct EventListenerItem
- {
- XMLString type;
- EventListener* pListener;
- bool useCapture;
- };
- typedef std::list<EventListenerItem> EventListenerList;
-
- int _inDispatch;
- EventListenerList _listeners;
- };
- } } // namespace Poco::XML
- #endif // DOM_EventDispatcher_INCLUDED
|