EventDispatcher.as

Go to the documentation of this file.
00001 import gugga.collections.HashTable;
00002 import gugga.common.IEventDispatcher;
00003 import gugga.utils.DebugUtils;
00004 import gugga.utils.DoLaterUtil;
00005 
00009 class gugga.events.EventDispatcher implements IEventDispatcher 
00010 {
00011         private static var mEventDispatcher : EventDispatcher;
00012         
00013         private var mBroadcasters : HashTable;
00014                                 
00015         public function dispatchEventLater(aEventObject : Object) : Void 
00016         {
00017                 DoLaterUtil.doLater(this, dispatchEvent, [aEventObject], 1);
00018         }
00019 
00020         public function dispatchEvent(aEventObject : Object) : Void 
00021         {
00022                 var eventType : String = aEventObject["type"];
00023                 mBroadcasters[eventType].broadcastMessage("handler", aEventObject);
00024         }
00025 
00026         public function addEventListener(aEventName:String, aHandler) : Void 
00027         {       
00028                 if(!mBroadcasters)
00029                 {
00030                         mBroadcasters = new HashTable();
00031                 }
00032                 
00033                 if(!mBroadcasters[aEventName])
00034                 {
00035                         mBroadcasters[aEventName] = new Object();
00036                         AsBroadcaster.initialize(mBroadcasters[aEventName]);
00037                 }
00038                 
00039                 var handlerWrapper : Object = { handler: aHandler };
00040                 aHandler.handlerWrapper = handlerWrapper;
00041                 
00042                 mBroadcasters[aEventName].addListener(handlerWrapper);
00043         }
00044 
00045         public function removeEventListener(aEventName:String, aHandler) : Void 
00046         {
00047                 var handlerWrapper : Function = aHandler.handlerWrapper;
00048                 handlerWrapper.handler = null;
00049                 
00050                 mBroadcasters[aEventName].removeListener(handlerWrapper);
00051         }
00052         
00053         private function removeAllEventListeners() : Void
00054         {
00055                 delete mBroadcasters;
00056         }
00057 
00058         public static function initialize(object:Object):Void
00059         {
00060                 if (!mEventDispatcher)
00061                 {
00062                         mEventDispatcher = new EventDispatcher();
00063                 }
00064                 
00065                 object.addEventListener = mEventDispatcher.addEventListener;
00066                 object.removeEventListener = mEventDispatcher.removeEventListener;
00067                 object.dispatchEvent = mEventDispatcher.dispatchEvent;
00068                 object.dispatchEventLater = mEventDispatcher.dispatchEventLater;
00069         }
00070 }

Generated on Fri May 11 17:12:42 2007 for GuggaFramework by  doxygen 1.5.2