2abd2b7dc25d1a868a781e5ce9fbcae55fb585e2
[nikiroo-utils.git] / src / be / nikiroo / utils / ui / ProgressBar.java
1 package be.nikiroo.utils.ui;
2
3 import java.awt.BorderLayout;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import javax.swing.JLabel;
10 import javax.swing.JPanel;
11 import javax.swing.JProgressBar;
12 import javax.swing.SwingUtilities;
13
14 import be.nikiroo.utils.Progress;
15
16 public 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 }