import java.awt.*;
import java.applet.*;

// This code can test either the version of AMDProgressBar which
// subclasses Canvas, or the version which runs embedded in
// another AWT component (AMDProgressBarEmbed).
//
// Code labeled [embed] should be included ONLY to test only
// the embedded version. Code labeled [canvas] should be
// included to test only the Canvas version.

public class ProgressTest extends Applet implements Runnable {
    final static String MESSAGES[] = {
	"Revitalizing cortex...", "Subdividing keys...",
	"Extracting vice parts...", "Eradicating remnants..."};
    final static Font FONT = new Font("Helvetica", Font.PLAIN, 14);
    final static Color COLOR = Color.black;

    // [embed]
    AMDProgressBarEmbed progress1_, progress2_;
    
    // [canvas]
    //AMDProgressBar progress1_, progress2_;

    Thread kicker_;
    boolean blank_ = false;
    int index_ = 0;
    String text_;
    
    public void init() {
	setBackground(Color.white);
	setLayout(null);

	// [embed]
	progress1_ = new AMDProgressBarEmbed(this);
	progress2_ = new AMDProgressBarEmbed(this);
	
	// [canvas]
        // progress1_ = new AMDProgressBar();
        // add(progress1_);
        // progress2_ = new AMDProgressBar();
        // add(progress2_);
	
	progress1_.reshape(13, 30, 150, 21);
	progress2_.reshape(13, 57, 150, 25);
	
	progress2_.setBoxColors(new Color(11, 31, 223),
				new Color(125, 175, 251));
	progress2_.setBarColor(new Color(203, 143, 251));
	progress2_.setTextColors(Color.white, Color.black);
	progress2_.setText("% Complete");
	
	text_ = MESSAGES[index_];
	
	repaint();
    }
    
    public void start() {
	kicker_ = new Thread(this);
	kicker_.start();
    }

    public void stop() {
	kicker_.stop();
    }
    
    public void update(Graphics g) {
	paint(g);
    }
    
    public void paint(Graphics g) {
	if (blank_) {
	    g.setColor(getBackground());
	    g.fillRect(0, 0, 200, 29);
	    blank_ = false;
	}
	
	g.setColor(COLOR);
	g.setFont(FONT);
	g.drawString(text_, 13, 20);

	// [embed]
	// embedded bars need to be repainted
        progress1_.paint(g);
        progress2_.paint(g);
    }

    int loop1_ = 1;
    int loop2_ = 0;
    
    public void run() {
	try {
	    while (true) {
		for (; loop1_ <= 100; ++loop1_) {
		    progress1_.setPercent((double)loop1_ / (double)100);
		    if (loop1_ % MESSAGES.length == 0) {
			++loop2_;
			if (loop2_ > 100)
			    loop2_ = 1;
			progress2_.setPercent((double)loop2_ / (double)100);
		    }
		    
		    if (loop1_ % 100 == 0)
			Thread.sleep(1000);
		    else
			Thread.sleep(100);
		}
		loop1_ = 1;
		
		index_ = (index_ + 1) % MESSAGES.length;
		text_ = MESSAGES[index_];
		blank_ = true;
		
		repaint();
	    }
	} catch (Exception e) { ;
	}
    }
}

