blob: d96f43dbf0a1af194cb9c18d3e358ad8f522d321 [file] [log] [blame]
package junit.swingui;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
/**
* A simple progress bar showing the green/red status
*/
class ProgressBar extends JPanel {
boolean fError= false;
int fTotal= 0;
int fProgress= 0;
int fProgressX= 0;
public ProgressBar() {
super();
setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
}
private Color getStatusColor() {
if (fError)
return Color.red;
return Color.green;
}
public void paintBackground(Graphics g) {
g.setColor(getBackground());
g.fillRect(0,0,getWidth(),getHeight());
}
public void paintComponent(Graphics g) {
paintBackground(g);
paintStatus(g);
}
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;
repaint();
}
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);
}
}