ProgressBar.java revision 58a8b0aba2dec5695628a2bf25a3fae42c2c3533
1package junit.awtui;
2
3import java.awt.Canvas;
4import java.awt.Color;
5import java.awt.Graphics;
6import java.awt.Rectangle;
7import java.awt.SystemColor;
8
9public class ProgressBar extends Canvas {
10	public boolean fError= false;
11	public int fTotal= 0;
12	public int fProgress= 0;
13	public int fProgressX= 0;
14
15	public ProgressBar() {
16		super();
17		setSize(20, 30);
18	}
19
20	private Color getStatusColor() {
21		if (fError)
22			return Color.red;
23		return Color.green;
24	}
25
26	public void paint(Graphics g) {
27		paintBackground(g);
28		paintStatus(g);
29	}
30
31	public void paintBackground(Graphics g) {
32		g.setColor(SystemColor.control);
33		Rectangle r= getBounds();
34		g.fillRect(0, 0, r.width, r.height);
35		g.setColor(Color.darkGray);
36		g.drawLine(0, 0, r.width-1, 0);
37		g.drawLine(0, 0, 0, r.height-1);
38		g.setColor(Color.white);
39		g.drawLine(r.width-1, 0, r.width-1, r.height-1);
40		g.drawLine(0, r.height-1, r.width-1, r.height-1);
41	}
42
43	public void paintStatus(Graphics g) {
44		g.setColor(getStatusColor());
45		Rectangle r= new Rectangle(0, 0, fProgressX, getBounds().height);
46		g.fillRect(1, 1, r.width-1, r.height-2);
47	}
48
49	private void paintStep(int startX, int endX) {
50		repaint(startX, 1, endX-startX, getBounds().height-2);
51	}
52
53	public void reset() {
54		fProgressX= 1;
55		fProgress= 0;
56		fError= false;
57		paint(getGraphics());
58	}
59
60	public int scale(int value) {
61		if (fTotal > 0)
62			return Math.max(1, value*(getBounds().width-1)/fTotal);
63		return value;
64	}
65
66	public void setBounds(int x, int y, int w, int h) {
67		super.setBounds(x, y, w, h);
68		fProgressX= scale(fProgress);
69	}
70
71	public void start(int total) {
72		fTotal= total;
73		reset();
74	}
75
76	public void step(boolean successful) {
77		fProgress++;
78		int x= fProgressX;
79
80		fProgressX= scale(fProgress);
81
82		if (!fError && !successful) {
83			fError= true;
84			x= 1;
85		}
86		paintStep(x, fProgressX);
87	}
88}