I've got a class here that manages intervals as well. It can be used to
create intervals that fire off once (after a delay), continuously or a
specified number of times. The events can then be applied to the parent
object or another target object.

Cheers,
Karina



/**
 * Delay class - executes callbacks, broadcasts messages and events the
parent (or a passed target) after a set delay.
 *
 * @author  Karina Steffens
 * @version 1.0
 * @usage
 * @class
 */
class com.neoarchaic.util.Delay {
        public var parent:Object;
        private var events:Object;
        private var index:Number;
        function Delay (aparent:Object) {
                parent = aparent;
                index = 0;
                events = new Object ();
        }
        /**Broadcast the message to the parent after the delay.
         * @param   target Object
         * @param   evt String
         * @param   delay Number
         */
        public function doLater ():String {
                //target:Object, evt:String, delay:Number
                //_global.tt ("doLater", arguments)
                return storeMessage ("doLater", arguments);
        }
        /**Broadcast the message to the parent after the delay.
         * @param   target Object
         * @param   evt String
         * @param   delay Number
         */
        public function doLoop ():String {
                return storeMessage ("doLoop", arguments);
        }
        /**Broadcast the message to the parent after the delay.
         * @param   target Object
         * @param   evt String
         * @param   delay Number
         * @param   times Number
         */
        public function doRepeat ():String {
                return storeMessage ("doRepeat", arguments);
        }
        /**Broadcast the EventListener to listeners after the delay.
         * @param   target Object
         * @param   evt String
         * @param   delay Number
         */
        public function dispatchEvent ():String {
                return storeMessage ("dispatchEvent", arguments);
        }
        /**Broadcast the EventListener to listeners after the delay.
         * @param   target Object
         * @param   evt String
         * @param   delay Number
         */
        public function broadcastEvent ():String {
                return storeMessage ("broadcastEvent", arguments);
        }
        /**Broadcast the message to listeners after the delay.
         * @param   target Object
         * @param   evt String
         * @param   delay Number
         */
        public function broadcastMessage ():String {
                return storeMessage ("broadcastMessage", arguments);
        }
        /**Interrupt the event before the interval.
         * @param   id String
         */
        public function interrupt (id:String) {
                var myEvent:Object;
                if (id == "all") {
                        for (var i in events) {
                                myEvent = events[i];
                                clearInterval (myEvent.interval);
                        }
                        events = new Object ();
                        return;
                }
                myEvent = events[id];
                if (myEvent == undefined) {
                        for (var i in events) {
                                if (events[i].evt == id || events[i].evtType
== id) {
                                        myEvent = events[i];
                                        break;
                                }
                        }
                }
                clearInterval (myEvent.interval);
                delete events[id];
        }
        private function storeMessage (evtType:String, args:Array):String {
                //_global.tt ("storeMessage", evtType, args, typeof
(args[0]))
                var myEvent:Object = new Object ();
                if (typeof (args[0]) != "string") {
                        var target:Object = args.shift ();
                        myEvent.target = target;
                } else {
                        myEvent.target = parent;
                }
                var id:String = evtType + index++;
                var evt:String = String (args.shift ());
                var delay:Number = Number (args.shift ());
                switch (evtType){
                        case "doRepeat":
                                myEvent.times = args.shift ();
                                break;
                        case "doLoop":
                                myEvent.times = "unlimited";
                                break;
                        default: 
                                myEvent.times = 1;                      
                }
                if (evtType.indexOf ("do") == -1) {
                        //AbstractBroadcaster or EventDispatcher methods
                        myEvent.evt = evtType;
                        args.unshift (evt);
                } else {
                        myEvent.evt = evt;
                }
                myEvent.id = id;
                myEvent.evtType = evtType;
                myEvent.args = args;
                myEvent.delay = delay;
                events[id] = myEvent;
                myEvent.interval = setInterval (this, "sendMessage", delay,
myEvent);
                return id;
        }
        private function sendMessage (myEvent:Object) {
                //_global.tt ("sendMessage", myEvent)
                var evtType:String = myEvent.evtType;
                var target = myEvent.target;
                var evt:String = myEvent.evt;
                var args:Array = myEvent.args;
                target[evt].apply (target, args);
                if (typeof (myEvent.times) == "number") {
                        myEvent.times--;
                        if (!myEvent.times) {
                                clearInterval (myEvent.interval);
                                delete events[myEvent.id];
                        }
                }
        }
}

_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

Reply via email to