/* BulkLoader: manage multiple loadings in Actioncript 3. * * * @author Arthur Debert * @version 0.4 */ /* * Licensed under the MIT License * * Copyright (c) 2006-2007 Arthur Debert * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * http://code.google.com/p/bulk-loader/ * http://www.opensource.org/licenses/mit-license.php * */ package br.com.stimuli.loading { import flash.events.*; /** * An event that holds information about the status of a BulkLoader. * * As this event subclasses ProgressEvent, you can choose to listen to BulkProgressEvent or ProgressEvent instances, but this class provides more useful information about loading status. * * @langversion ActionScript 3.0 * @playerversion Flash 9.0 * * @author Arthur Debert * @since 15.09.2007 */ public class BulkProgressEvent extends ProgressEvent { /* The name of this event */ public static const PROGRESS : String = "progress"; public static const COMPLETE : String = "complete"; /** How many bytes have loaded so far.*/ public var bytesTotalCurrent : int; /** @private */ public var _ratioLoaded : Number; /** @private */ public var _percentLoaded : Number; /** @private */ public var _weightPercent : Number; /** Number of items already loaded */ public var itemsLoaded : int; /** Number of items to be loaded */ public var itemsTotal : int; public var name : String; public function BulkProgressEvent( name : String, bubbles:Boolean=true, cancelable:Boolean=false ){ super(name, bubbles, cancelable); this.name = name; } /** Sets loading information.*/ public function setInfo( bytesLoaded : int , bytesTotal : int, bytesTotalCurrent : int, itemsLoaded : int , itemsTotal : int, weightPercent : Number ): void{ this.bytesLoaded = bytesLoaded; this.bytesTotal = bytesTotal; this.bytesTotalCurrent = bytesTotalCurrent; this.itemsLoaded = itemsLoaded; this.itemsTotal = itemsTotal; this.weightPercent = weightPercent; this.percentLoaded = bytesTotal > 0 ? (bytesLoaded / bytesTotal) : 0; ratioLoaded = itemsTotal == 0 ? 0 : itemsLoaded / itemsTotal; } /* Returns an identical copy of this object * @return A cloned instance of this object. */ override public function clone() : Event { var b : BulkProgressEvent = new BulkProgressEvent(name, bubbles, cancelable); b.setInfo(bytesLoaded, bytesTotal, bytesTotalCurrent, itemsLoaded, itemsTotal, weightPercent); return b; } /** Returns a String will all available information for this event. * @return A String will loading information. */ public function loadingStatus () : String{ var names : Array = []; names.push("bytesLoaded: " + bytesLoaded); names.push("bytesTotal: " + bytesTotal); names.push("itemsLoaded: " + itemsLoaded); names.push("itemsTotal: " + itemsTotal); names.push("bytesTotalCurrent: " + bytesTotalCurrent); names.push("percentLoaded: " + BulkLoader.truncateNumber(percentLoaded)); names.push("weightPercent: " + BulkLoader.truncateNumber(weightPercent)); names.push("ratioLoaded: " + BulkLoader.truncateNumber(ratioLoaded)); return "BulkProgressEvent " + names.join(", ") + ";"; } /** A number between 0 - 1 that indicates progress regarding weights */ public function get weightPercent() : Number { return truncateToRange(_weightPercent); } public function set weightPercent(value:Number) : void { if (isNaN(value) || !isFinite(value)) { value = 0; } _weightPercent = value; } /** A number between 0 - 1 that indicates progress regarding bytes */ public function get percentLoaded() : Number { return truncateToRange(_percentLoaded); } public function set percentLoaded(value:Number) : void { if (isNaN(value) || !isFinite(value)) value = 0; _percentLoaded = value; } /** The ratio (0-1) loaded (number of items loaded / number of items total) */ public function get ratioLoaded() : Number { return truncateToRange(_ratioLoaded); } public function set ratioLoaded(value:Number) : void { if (isNaN(value) || !isFinite(value)) value = 0; _ratioLoaded = value; } public function truncateToRange(value:Number):Number{ if(value < 0){ value = 0; }else if (value > 1){ value = 1 }else if (isNaN(value) || !isFinite(value)){ value = 0; } return value; } override public function toString() : String{ return super.toString(); } } }