NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/Chameleon/trunk/Chameleon/js/cwc_events.js

Revision 13 (checked in by jcleary, 17 years ago)

Latest Chameleon code checkout from previous repository

Line 
1 /**
2  * Application: Chameleon
3  * Revision:    $Id: cwc_events.js,v 1.3 2005/01/07 16:49:06 pspencer Exp $
4  * Purpose:     Generic event manager for Chameleon components
5  * Author:      DM Solutions Group Inc. (jfournier@dmsolutions.ca)
6  * Copyright:   
7  *
8  * Widgets can create events for other widgets or user-applications
9  * to use by registering events with the event manager:
10  *
11  * var gnSomeEventID = goEventManager.registerEventID( 'SOME_EVENT' );
12  *
13  * multiple widgets can register the same event name, the ID will be reused.
14  *
15  * Widgets can trigger an event using a previously registered event id
16  * or event name:
17  *
18  * goEventManager.triggerEvent( gnSomeEventID );
19  * goEventManager.triggerEvent( 'SOME_EVENT' );
20  *
21  * Widgets or user code that wishes to 'listen' for events use the
22  * registerForEvent function by eventID or event name:
23  *
24  * goEventManager.registerForEvent( gnSomeEventID, 'myEventHandler()' );
25  * goEventManager.registerForEvent( 'SOME_EVENT', 'myEventHandler()' );
26  *
27  * Widgets or user code that does not want to receive events any more can
28  * 'deregister' for an event by id or name:
29  *
30  * goEventManager.deregisterForEvent( gnSomeEventID, 'myEventHandler()' );
31  * goEventManager.deregisterForEvent( 'SOME_EVENT', 'myEventHandler()' );
32  */
33 goEventManager = new CWCEventManager();
34
35 function CWCEventManager( )
36 {
37     this.eventIDs = new Array();
38     this.events = new Array();
39     this.lastEventID = 0;
40    
41     this.registerEventID = CWCEventManager_RegisterEventID;
42     this.findEventID = CWCEventManager_FindEventID;
43     this.registerForEvent = CWCEventManager_RegisterForEvent;
44     this.deregisterForEvent = CWCEventManager_DeregisterForEvent;
45     this.triggerEvent = CWCEventManager_TriggerEvent;
46 }
47
48 function CWCEventManager_RegisterEventID( eventName )
49 {
50     var eventID = -1;
51     for( i=0; i<this.lastEventID; i++)
52     {
53         if (this.eventIDs[i] == eventName)
54             eventID = i;
55     }
56    
57     if (eventID == -1)
58     {
59         eventID = this.lastEventID;
60         this.eventIDs[eventID] = eventName;
61         this.events[eventID] = new Array();
62         this.lastEventID ++;
63     }
64     return eventID;
65 }
66
67 function CWCEventManager_FindEventID( eventName )
68 {
69     var i;
70     for( i=0; i<this.lastEventID; i++)
71         if (this.eventIDs[i] == eventName)
72             return i;
73     return -1;
74 }
75
76 function CWCEventManager_RegisterForEvent(eventID, function_name)
77 {
78     var rx = /\d+/i;
79     if (!rx.test( eventID ))
80     {
81         eventID = this.findEventID( eventID );
82     }
83    
84     if (eventID >= 0 && eventID <= this.lastEventID)
85     {
86         var lastEvent = (this.events[eventID]).length;
87         this.events[ eventID ][ lastEvent ] = function_name;
88         return true;
89     }
90     else
91     {
92         return false;
93     }
94 }
95
96 function CWCEventManager_DeregisterForEvent( eventID, function_name )
97 {
98     var rx = /\d+/i;
99     var bFound = false
100    
101     if (!rx.test( eventID ))
102     {
103         eventID = this.findEventID( eventID );
104     }
105    
106     if (eventID >= 0 && eventID <= this.lastEventID)
107     {
108         var events = this.events[eventID];
109         for( i=0; i<events.length; i++ )
110         {
111             if (this.events[i] == function_name )
112             {
113                 this.events[i] = "";
114                 bFound = true;
115             }
116         }
117     }
118     return  bFound;
119 }
120
121 function CWCEventManager_TriggerEvent( eventID /* additional args are passed to the event handler */ )
122 {
123     var rx = /\d+/i;
124     var i = 0;
125     if (!rx.test( eventID ))
126     {
127         eventID = this.findEventID( eventID );
128     }
129    
130     if (eventID >= 0 && eventID <= this.lastEventID)
131     {
132         var args = "(";
133         var sep = "";
134         for(i=1; i<arguments.length; i++)
135         {
136             args = args + sep + "'" + arguments[i] + "'";
137             sep = ",";
138         }
139        
140         args = args + ")";
141        
142         var events = this.events[eventID];
143         var nEvents = events.length;
144         for (i=0; i<nEvents; i++)
145         {
146             var szFunction =  events[ i ];
147             if (szFunction != "")
148             {
149                 var rx_params = /\(.*\)/i;
150                 if (!rx_params.test( szFunction ))
151                 {
152                     szFunction = szFunction + args;
153                 }
154                 eval(szFunction);
155             }
156         }
157         return true;
158     }
159     else
160         return false;
161 }
Note: See TracBrowser for help on using the browser.