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); | |
} | |
} |