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