MediaLoader.as

Go to the documentation of this file.
00001 import mx.controls.MediaDisplay;
00002 import gugga.events.EventDispatcher;
00003 import mx.utils.Delegate;
00004 
00005 import gugga.common.IProgressiveTask;
00006 import gugga.common.MediaTypes;
00007 import gugga.common.ProgressEventInfo;
00008 
00009  
00010 [Event("start")]
00011 [Event("progress")]
00012 [Event("interrupted")]
00013 [Event("completed")]
00014 
00018 class gugga.components.MediaLoader extends EventDispatcher implements IProgressiveTask 
00019 {
00020         private var mIsRunning:Boolean;
00021         private var mInterrupted:Boolean;
00022         
00023         private var mPercentsLoaded:Number;
00024         
00025         private var mProgressDelegate:Function;
00026         
00027         private var mMedia:MediaDisplay;
00028         
00029         private var mMediaPath:String;
00030         public function get MediaPath():String { return mMediaPath; }
00031         public function set MediaPath(aValue:String):Void { mMediaPath = aValue; }
00032                 
00033         private var mMediaType:MediaTypes; 
00034         public function get MediaType():MediaTypes { return mMediaType; }
00035         public function set MediaType(aValue:MediaTypes):Void { mMediaType = aValue; }
00036         
00037         private var mUnloadMediaAfterLoad:Boolean;
00038         public function get UnloadMediaAfterLoad():Boolean { return mUnloadMediaAfterLoad; }
00039         public function set UnloadMediaAfterLoad(aValue:Boolean):Void { mUnloadMediaAfterLoad = aValue; }
00040         
00041         
00042         public function MediaLoader(aMedia:MediaDisplay, aMediaPath:String, aMediaType:MediaTypes)
00043         {
00044                 mMedia = aMedia;
00045                 mMediaPath = aMediaPath;
00046                 mMediaType = aMediaType;
00047                 
00048                 mIsRunning = false;
00049                 mUnloadMediaAfterLoad = false;
00050                 
00051                 mPercentsLoaded = 0;
00052                 
00053                 mProgressDelegate = Delegate.create(this, onMediaProgress);
00054         }
00055         
00056         public function start() : Void 
00057         {
00058                 
00059                 unloadData();
00060                 mMedia.addEventListener("progress", mProgressDelegate);
00061                 mIsRunning = true;
00062                 mInterrupted = false;
00063                 mPercentsLoaded = 0;
00064                 
00065                 dispatchEvent({type:"start", target:this});
00066                                 
00067                 mMedia.setMedia(mMediaPath, mMediaType.toString());             
00068         }
00069 
00070         public function isImmediatelyInterruptable() : Boolean
00071         {
00072                 return false;
00073         }
00074         
00075         public function interrupt() : Void
00076         {
00077                 unloadData();
00078                 mInterrupted = true;
00079         }
00080         
00081         public function unloadData() : Void
00082         {
00083                 mMedia.stop();
00084                 mMedia.setMedia("");
00085         }
00086         
00087         private function onMediaProgress(ev) : Void 
00088         {
00089                 mPercentsLoaded  = (mMedia.bytesLoaded / mMedia.bytesTotal) * 100;
00090                                 
00091                 dispatchEvent(new ProgressEventInfo(this, mMedia.bytesTotal, mMedia.bytesLoaded, mPercentsLoaded));
00092                                 
00093                 if (mMedia.bytesLoaded == mMedia.bytesTotal)
00094                 {
00095                         mediaLoaded();
00096                 }
00097         }
00098         
00099         private function mediaLoaded() : Void 
00100         {
00101                 mMedia.removeEventListener("progress", mProgressDelegate);
00102                 mPercentsLoaded = 100;
00103                 
00104                 if (mUnloadMediaAfterLoad)
00105                 {
00106                         unloadData();
00107                 }
00108                 
00109                 mIsRunning = false;
00110                 
00111                 if(mInterrupted)
00112                 {
00113                         dispatchEvent({type:"interrupted", target:this});
00114                 }
00115                 else
00116                 {
00117                         dispatchEvent({type:"completed", target:this});
00118                 }
00119         }
00120 
00121         public function getProgress() : Number 
00122         {
00123                 return mPercentsLoaded;
00124         }
00125 
00126         public function isRunning() : Boolean 
00127         {
00128                 return mIsRunning;
00129         }
00130 
00131 }

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