Commit | Line | Data |
---|---|---|
b3aad1f9 NR |
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 | } |