158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpackage junit.awtui;
258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.awt.Canvas;
458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.awt.Color;
558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.awt.Graphics;
658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.awt.Rectangle;
758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.awt.SystemColor;
858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpublic class ProgressBar extends Canvas {
1058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public boolean fError= false;
1158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public int fTotal= 0;
1258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public int fProgress= 0;
1358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public int fProgressX= 0;
1458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
1558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public ProgressBar() {
1658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		super();
1758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		setSize(20, 30);
1858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
1958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
2058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	private Color getStatusColor() {
2158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		if (fError)
2258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot			return Color.red;
2358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		return Color.green;
2458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
2558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
2658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void paint(Graphics g) {
2758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		paintBackground(g);
2858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		paintStatus(g);
2958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
3058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
3158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void paintBackground(Graphics g) {
3258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.setColor(SystemColor.control);
3358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		Rectangle r= getBounds();
3458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.fillRect(0, 0, r.width, r.height);
3558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.setColor(Color.darkGray);
3658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.drawLine(0, 0, r.width-1, 0);
3758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.drawLine(0, 0, 0, r.height-1);
3858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.setColor(Color.white);
3958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.drawLine(r.width-1, 0, r.width-1, r.height-1);
4058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.drawLine(0, r.height-1, r.width-1, r.height-1);
4158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
4258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
4358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void paintStatus(Graphics g) {
4458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.setColor(getStatusColor());
4558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		Rectangle r= new Rectangle(0, 0, fProgressX, getBounds().height);
4658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		g.fillRect(1, 1, r.width-1, r.height-2);
4758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
4858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
4958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	private void paintStep(int startX, int endX) {
5058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		repaint(startX, 1, endX-startX, getBounds().height-2);
5158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
5258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
5358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void reset() {
5458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fProgressX= 1;
5558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fProgress= 0;
5658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fError= false;
5758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		paint(getGraphics());
5858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
5958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
6058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public int scale(int value) {
6158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		if (fTotal > 0)
6258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot			return Math.max(1, value*(getBounds().width-1)/fTotal);
6358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		return value;
6458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
6558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
6658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void setBounds(int x, int y, int w, int h) {
6758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		super.setBounds(x, y, w, h);
6858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fProgressX= scale(fProgress);
6958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
7058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
7158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void start(int total) {
7258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fTotal= total;
7358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		reset();
7458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
7558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
7658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	public void step(boolean successful) {
7758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fProgress++;
7858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		int x= fProgressX;
7958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
8058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		fProgressX= scale(fProgress);
8158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot
8258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		if (!fError && !successful) {
8358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot			fError= true;
8458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot			x= 1;
8558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		}
8658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot		paintStep(x, fProgressX);
8758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot	}
8858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot}