// Copyright 2007. Adobe Systems Incorporated. All Rights Reserved.
package fl.controls.progressBarClasses {
import fl.controls.ProgressBar;
import fl.core.UIComponent;
import fl.core.InvalidationType;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
//--------------------------------------
// Styles
//--------------------------------------
/**
* @copy fl.controls.ProgressBar#style:indeterminateSkin
*
* @default ProgressBar_indeterminateSkin
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
[Style(name="indeterminateSkin", type="Class")]
//--------------------------------------
// Class description
//--------------------------------------
/**
* The IndeterminateBar class handles the drawing of the progress bar component when the
* size of the source that is being loaded is unknown. This class can be replaced with any
* other UIComponent class to render the bar differently. The default implementation uses
* the drawing API create a striped fill to indicate the progress of the load operation.
*
* @includeExample examples/IndeterminateBarExample.as
*
* @see fl.controls.ProgressBar
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
public class IndeterminateBar extends UIComponent {
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected var animationCount:uint = 0;
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected var bar:Sprite;
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected var barMask:Sprite;
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected var patternBmp:BitmapData
/**
* @private
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
private static var defaultStyles:Object = {indeterminateSkin:"ProgressBar_indeterminateSkin"};
/**
* @copy fl.core.UIComponent#getStyleDefinition()
*
* @includeExample ../../core/examples/UIComponent.getStyleDefinition.1.as -noswf
*
* @see fl.core.UIComponent#getStyle()
* @see fl.core.UIComponent#setStyle()
* @see fl.managers.StyleManager
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
public static function getStyleDefinition():Object { return defaultStyles; }
/**
* Creates a new instance of the IndeterminateBar component.
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
public function IndeterminateBar() {
super();
setSize(0,0);
startAnimation();
}
/**
* Gets or sets a Boolean value that indicates whether the indeterminate bar is visible.
* A value of true
indicates that the indeterminate bar is visible; a value
* of false
indicates that it is not.
*
* @default true
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
override public function get visible():Boolean {
return super.visible;
}
/**
* @private (setter)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
override public function set visible(value:Boolean):void {
if (value) {
startAnimation();
} else {
stopAnimation();
}
super.visible = value;
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function startAnimation():void {
addEventListener(Event.ENTER_FRAME,handleEnterFrame,false,0,true);
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function stopAnimation():void {
removeEventListener(Event.ENTER_FRAME,handleEnterFrame);
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function handleEnterFrame(event:Event):void {
if (patternBmp == null) { return; }
animationCount = (animationCount+2)%patternBmp.width;
bar.x = -animationCount;
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
override protected function configUI():void {
bar = new Sprite();
addChild(bar);
barMask = new Sprite();
addChild(barMask);
bar.mask = barMask;
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
override protected function draw():void {
if (isInvalid(InvalidationType.STYLES)) {
drawPattern();
invalidate(InvalidationType.SIZE,false);
}
if (isInvalid(InvalidationType.SIZE)) {
drawBar();
drawMask();
}
super.draw();
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function drawPattern():void {
var skin:DisplayObject = getDisplayObjectInstance(getStyleValue("indeterminateSkin"));
if (patternBmp) {
patternBmp.dispose();
}
patternBmp = new BitmapData(skin.width<<0,skin.height<<0,true,0);
patternBmp.draw(skin);
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function drawMask():void {
var g:Graphics = barMask.graphics;
g.clear();
g.beginFill(0,0);
g.drawRect(0,0,_width,_height);
g.endFill();
}
/**
* @private (protected)
*
* @langversion 3.0
* @playerversion Flash 9.0.28.0
*/
protected function drawBar():void {
if (patternBmp == null) { return; }
var g:Graphics = bar.graphics;
g.clear();
g.beginBitmapFill(patternBmp);
g.drawRect(0,0,_width+patternBmp.width,_height);
g.endFill();
}
}
}