1  /*
     2   Copyright aswing.org, see the LICENCE.txt.
     3  */
     4   
     5  import org.aswing.ASColor;
     6  import org.aswing.Component;
     7  import org.aswing.geom.Rectangle;
     8  import org.aswing.graphices.Graphics;
     9  import org.aswing.graphices.SolidBrush;
    10  import org.aswing.Icon;
    11  import org.aswing.JProgressBar;
    12  import org.aswing.plaf.UIResource;
    13  import org.aswing.UIManager;
    14  
    15  /**
    16   * @author iiley
    17   */
    18  class org.aswing.plaf.basic.icon.ProgressBarIcon implements Icon, UIResource {
    19  	
    20  	private var indeterminatePercent:Number;
    21  	private var color:ASColor;
    22  	
    23  	public function ProgressBarIcon(){
    24  		indeterminatePercent = 0;
    25  		color = UIManager.getColor("ProgressBar.progressColor");
    26  	}
    27  	
    28  	public function getIconWidth() : Number {
    29  		return 0;
    30  	}
    31  
    32  	public function getIconHeight() : Number {
    33  		return 0;
    34  	}
    35  
    36  	public function paintIcon(com : Component, g : Graphics, x : Number, y : Number) : Void {
    37  		var pb:JProgressBar = JProgressBar(com);
    38  		if(pb == null){
    39  			return;
    40  		}
    41  		
    42  		var percent:Number;
    43  		if(pb.isIndeterminate()){
    44  			percent = indeterminatePercent;
    45  			indeterminatePercent += 0.1;
    46  			if(indeterminatePercent > 1){
    47  				indeterminatePercent = 0;
    48  			}
    49  		}else{
    50  			percent = pb.getPercentComplete();
    51  		}
    52  		
    53  		var b:Rectangle = com.getPaintBounds();
    54  		var box:Rectangle = new Rectangle(b);
    55  		var boxWidth:Number = 5;
    56  		var gap:Number = 1;
    57  		g.beginFill(new SolidBrush(color));
    58  		
    59  		if(pb.getOrientation() == JProgressBar.VERTICAL){
    60  			box.height = boxWidth;
    61  			var minY:Number = b.y + b.height - b.height * percent;
    62  			for(box.y = b.y+b.height-boxWidth; box.y >= minY; box.y -= (boxWidth+gap)){
    63  				g.rectangle(box.x, box.y, box.width, box.height);
    64  			}
    65  			if(box.y < minY && box.y + boxWidth > minY){
    66  				box.height = boxWidth - (minY - box.y);
    67  				box.y = minY;
    68  				g.rectangle(box.x, box.y, box.width, box.height);
    69  			}
    70  		}else{
    71  			box.width = boxWidth;
    72  			var maxX:Number = b.x + b.width * percent;
    73  			for(;box.x <= maxX - boxWidth; box.x += (boxWidth+gap)){
    74  				g.rectangle(box.x, box.y, box.width, box.height);
    75  			}
    76  			box.width = maxX - box.x;
    77  			if(box.width > 0){
    78  				g.rectangle(box.x, box.y, box.width, box.height);
    79  			}
    80  		}
    81  		g.endFill();
    82  	}
    83  
    84  	public function uninstallIcon(com : Component) : Void {
    85  	}
    86  
    87  }
    88