/*
 * matecomponent-listener.idl: Generic listener handling interfaces
 *
 * Copyright (C) 2000,  Helix Code, Inc.
 *
 * Authors:
 *      Alex Graveley (alex@helixcode.com)
 *	Michael Meeks (michael@helixcode.com)
 */

#ifndef MATECOMPONENT_LISTENER_IDL
#define MATECOMPONENT_LISTENER_IDL

#include "MateComponent_Unknown.idl"

module MateComponent {
  
	interface Listener : MateComponent::Unknown {
  		/**
  		 * event:   Invokes a named event on this listener object,
  		 * thus a single MateComponent / CORBA object can multiplex
  		 * many event requests without the overhead of an
  		 * object per type of event we want to listen to.
  		 * @event_name: the name of the event
 		 * @args: A CORBA Any argument.
  		 */
 		oneway void event (in string event_name, in any args);

		void unImplemented  ();
		void unImplemented2 ();
  	};
  
  	interface EventSource : MateComponent::Unknown {
		exception UnknownListener {};
  
  		/**
 		 * addListener: Adds a listener to all events being
 		 * emitted by this object.
  		 * @l: the listener implementation.
		 *
		 * Adds a listener to this event source.
  		 */
 		void addListener (in Listener l);
  		
  		/**
 		 * addListenerWithMask: Adds a listener to certain events
 		 * emitted by this object.
 		 * @l: the listener implementation.
 		 * @event_mask: a comma-separated list of event names this listener 
		 * is interested in recieving. If this listener is already 
 		 * receiving events from this EventSource, only the 
 		 * events listed here will be delivered.
		 *
		 * Adds a listener to this event source with the given mask.
 		 */
 		void addListenerWithMask (in Listener l,
					  in string   event_mask);
 
 		/**
  		 * removeListener: Removes a listener
  		 * @l: the listener implementation
		 *
		 * Removes the listener from the notification list.
  		 */
 		void removeListener (in Listener l)
  			raises (UnknownListener);

		void unImplemented  ();
		void unImplemented2 ();
  	};
};

#endif /* MATECOMPONENT_LISTENER_IDL */

