//********************************************************** // ACK Event Engine Object // Branden J. Hall - Fig Leaf Software // August 16, 2001 //********************************************************** if (Object.ACK == null){ Object.ACK = new Object(); } Object.ACK.eventEngine = function(){ this.IDcounter = 0; this.IDlist = new Object(); this.events = new Object(); // specialized event code for system events // enterframe this.addEventHandler("enterFrame", "onAdd", function(){ if (this.count == null){ this.count = 0; } if (this.count == 0){ this.eventObj.onEnterFrame = function(obj){ this.sendEvent("enterframe", obj); } } ++this.count; }); this.addEventHandler("enterFrame", "onRemove", function(){ if (this.count == 1){ this.eventObj.onEnterFrame = null } --this.count; }); // mouseButton this.addEventHandler("mouseButton", "onAdd", function(){ if (this.count == null){ this.count = 0; } if (this.count == 0){ this.eventObj.onMouseButton = function(obj){ this.sendEvent("mouseButton", obj); } } ++this.count; }); this.addEventHandler("mouseButton", "onRemove", function(){ if (this.count == 1){ this.eventObj.onMouseButton = null } --this.count; }); // mouseMove this.addEventHandler("mouseMove", "onAdd", function(){ if (this.count == null){ this.count = 0; } if (this.count == 0){ this.eventObj.onmouseMove = function(obj){ this.sendEvent("mouseMove", obj); } } ++this.count; }); this.addEventHandler("mouseMove", "onRemove", function(){ if (this.count == 1){ this.eventObj.onMouseMove = null } --this.count; }); // key this.addEventHandler("key", "onAdd", function(){ if (this.count == null){ this.count = 0; } if (this.count == 0){ this.eventObj.onKey = function(obj){ this.sendEvent("key", obj); } } ++this.count; }); this.addEventHandler("key", "onRemove", function(){ if (this.count == 1){ this.eventObj.onKey = null } --this.count; }); } Object.ACK.eventEngine.prototype.addEventHandler = function(event, action, fnPtr){ if (this.events[event] == null){ this.events[event] = new Object(); this.events[event].eventObj = this; } this.events[event][action] = fnPtr; } Object.ACK.eventEngine.prototype.addEventListener = function(event, obj, method, localData){ if (this.events[event] == null){ this.events[event] = new Object(); } if (this.events[event].subscribers == null){ this.events[event].subscribers = new Object(); } var id = this.IDcounter++; // create object to hold this listener this.events[event].subscribers[id] = new Object(); this.events[event].subscribers[id].obj = obj; this.events[event].subscribers[id].method = method; this.events[event].subscribers[id].localData = localData; // create flat look-up table for event IDs this.IDlist[id] = this.events[event].subscribers; this.events[event].onAdd(); return id; } Object.ACK.eventEngine.prototype.removeEventListener = function(id){ if (this.IDlist[id] == null){ return false; }else{ delete (this.IDlist[id][id]); this.events[event].onRemove(); return true; } } Object.ACK.eventEngine.prototype.sendEvent = function(event, eventData){ // send up event object to be passed to listener if (eventData == null){ eventData = new Object(); } eventData.type = event; // send the event to all subscribed event listeners var list = this.events[event].subscribers; for (var i in list){ list[i].obj[list[i].method](eventData, list[i].localData); } this.events[event].onEvent(); }