/** * Application: Chameleon * Revision: $Id: cwc_events.js,v 1.3 2005/01/07 16:49:06 pspencer Exp $ * Purpose: Generic event manager for Chameleon components * Author: DM Solutions Group Inc. (jfournier@dmsolutions.ca) * Copyright: * * Widgets can create events for other widgets or user-applications * to use by registering events with the event manager: * * var gnSomeEventID = goEventManager.registerEventID( 'SOME_EVENT' ); * * multiple widgets can register the same event name, the ID will be reused. * * Widgets can trigger an event using a previously registered event id * or event name: * * goEventManager.triggerEvent( gnSomeEventID ); * goEventManager.triggerEvent( 'SOME_EVENT' ); * * Widgets or user code that wishes to 'listen' for events use the * registerForEvent function by eventID or event name: * * goEventManager.registerForEvent( gnSomeEventID, 'myEventHandler()' ); * goEventManager.registerForEvent( 'SOME_EVENT', 'myEventHandler()' ); * * Widgets or user code that does not want to receive events any more can * 'deregister' for an event by id or name: * * goEventManager.deregisterForEvent( gnSomeEventID, 'myEventHandler()' ); * goEventManager.deregisterForEvent( 'SOME_EVENT', 'myEventHandler()' ); */ goEventManager = new CWCEventManager(); function CWCEventManager( ) { this.eventIDs = new Array(); this.events = new Array(); this.lastEventID = 0; this.registerEventID = CWCEventManager_RegisterEventID; this.findEventID = CWCEventManager_FindEventID; this.registerForEvent = CWCEventManager_RegisterForEvent; this.deregisterForEvent = CWCEventManager_DeregisterForEvent; this.triggerEvent = CWCEventManager_TriggerEvent; } function CWCEventManager_RegisterEventID( eventName ) { var eventID = -1; for( i=0; i= 0 && eventID <= this.lastEventID) { var lastEvent = (this.events[eventID]).length; this.events[ eventID ][ lastEvent ] = function_name; return true; } else { return false; } } function CWCEventManager_DeregisterForEvent( eventID, function_name ) { var rx = /\d+/i; var bFound = false if (!rx.test( eventID )) { eventID = this.findEventID( eventID ); } if (eventID >= 0 && eventID <= this.lastEventID) { var events = this.events[eventID]; for( i=0; i= 0 && eventID <= this.lastEventID) { var args = "("; var sep = ""; for(i=1; i