blob: 5374298949023834a623319ac7ada2174eb342e0 [file] [log] [blame]
package junit.awtui;
import java.awt.*;
public class ProgressBar extends Canvas {
public boolean fError= false;
public int fTotal= 0;
public int fProgress= 0;
public int fProgressX= 0;
public ProgressBar() {
super();
setSize(20, 30);
}
private Color getStatusColor() {
if (fError)
return Color.red;
return Color.green;
}
public void paint(Graphics g) {
paintBackground(g);
paintStatus(g);
}
public void paintBackground(Graphics g) {
g.setColor(SystemColor.control);
Rectangle r= getBounds();
g.fillRect(0, 0, r.width, r.height);
g.setColor(Color.darkGray);
g.drawLine(0, 0, r.width-1, 0);
g.drawLine(0, 0, 0, r.height-1);
g.setColor(Color.white);
g.drawLine(r.width-1, 0, r.width-1, r.height-1);
g.drawLine(0, r.height-1, r.width-1, r.height-1);
}
public void paintStatus(Graphics g) {
g.setColor(getStatusColor());
Rectangle r= new Rectangle(0, 0, fProgressX, getBounds().height);
g.fillRect(1, 1, r.width-1, r.height-2);
}
private void paintStep(int startX, int endX) {
repaint(startX, 1, endX-startX, getBounds().height-2);
}
public void reset() {
fProgressX= 1;
fProgress= 0;
fError= false;
paint(getGraphics());
}
public int scale(int value) {
if (fTotal > 0)
return Math.max(1, value*(getBounds().width-1)/fTotal);
return value;
}
public void setBounds(int x, int y, int w, int h) {
super.setBounds(x, y, w, h);
fProgressX= scale(fProgress);
}
public void start(int total) {
fTotal= total;
reset();
}
public void step(boolean successful) {
fProgress++;
int x= fProgressX;
fProgressX= scale(fProgress);
if (!fError && !successful) {
fError= true;
x= 1;
}
paintStep(x, fProgressX);
}
}