import mx.core.UIObject; import mx.utils.Delegate; class DoubleClickDispatcher { public static var DOUBLECLICK_DELAY:Number = 500; private static var instance:DoubleClickDispatcher; private var timer:Number; private var lastObject:UIObject; private var lastIndex:Number; private var delgateObj; private function DoubleClickDispatcher() { timer = 0; } public static function addObject(object:UIObject, evtname:String):Void { if (instance == undefined) { instance = new DoubleClickDispatcher(); } instance.addObjectListener(object, evtname); } public static function removeObject(object:UIObject, evtname:String):Void { if (instance != undefined) { instance.removeObjectListener(object,evtname); } } private function addObjectListener(object:UIObject, evtname:String):Void { if (object instanceof UIObject) { delgateObj = Delegate.create(this, onMouseDown); object.addEventListener(evtname, delgateObj); } } private function removeObjectListener(object:UIObject, evtname:String):Void { object.removeEventListener(evtname, delgateObj); } private function onMouseDown(evt:Object):Void { if (getTimer()-timer>DOUBLECLICK_DELAY) { timer = getTimer(); lastObject = evt.target; lastIndex = evt.target.selectedIndex; } else { if (lastObject == evt.target && lastIndex == evt.target.selectedIndex) { evt.target.dispatchEvent({type:"doubleClick"}); timer = 0; delete lastObject; } } } }