mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
				synced 2025-11-04 04:28:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
// 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
 |