VERSION update
[fanfix.git] / src / be / nikiroo / utils / ui / ProgressBar.java
CommitLineData
b3aad1f9
NR
1package be.nikiroo.utils.ui;
2
3import java.awt.BorderLayout;
4import java.awt.event.ActionEvent;
5import java.awt.event.ActionListener;
6import java.util.ArrayList;
7import java.util.List;
8
9import javax.swing.JLabel;
10import javax.swing.JPanel;
11import javax.swing.JProgressBar;
12import javax.swing.SwingUtilities;
13
14import be.nikiroo.utils.Progress;
15
16public class ProgressBar extends JPanel {
17 private static final long serialVersionUID = 1L;
18
19 private JProgressBar bar;
20 private JLabel label;
21 private List<ActionListener> listeners;
22
23 public ProgressBar() {
24 bar = new JProgressBar();
25 label = new JLabel();
26 listeners = new ArrayList<ActionListener>();
27
28 setLayout(new BorderLayout());
29 }
30
31 public void setProgress(Progress pg) {
32 if (pg == null) {
33 setPresent(false);
34 } else {
35 label.setText(pg.getName());
36 bar.setMinimum(pg.getMin());
37 bar.setMaximum(pg.getMax());
38 bar.setValue(pg.getProgress());
39
40 pg.addProgressListener(new Progress.ProgressListener() {
41 public void progress(final Progress progress, final String name) {
42 SwingUtilities.invokeLater(new Runnable() {
43 public void run() {
44 label.setText(name);
45 bar.setValue(progress.getProgress());
46
47 if (progress.isDone()) {
48 for (ActionListener listener : listeners) {
49 listener.actionPerformed(new ActionEvent(
50 ProgressBar.this, 0, "done"));
51 }
52 }
53 }
54 });
55 }
56 });
57
58 setPresent(true);
59 }
60 }
61
62 public void addActioListener(ActionListener l) {
63 listeners.add(l);
64 }
65
66 public void clearActionListeners() {
67 listeners.clear();
68 }
69
70 private void setPresent(boolean present) {
71 removeAll();
72
73 if (present) {
74 add(label, BorderLayout.NORTH);
75 add(bar, BorderLayout.CENTER);
76 }
77
78 validate();
79 repaint();
80 }
81}