6e1e7cef151c5fd561c953a58bf3bf7565667e1e
1 package be
.nikiroo
.utils
.ui
;
3 import java
.awt
.GridLayout
;
4 import java
.awt
.event
.ActionEvent
;
5 import java
.awt
.event
.ActionListener
;
6 import java
.util
.ArrayList
;
7 import java
.util
.HashMap
;
11 import javax
.swing
.JPanel
;
12 import javax
.swing
.JProgressBar
;
13 import javax
.swing
.SwingUtilities
;
15 import be
.nikiroo
.utils
.Progress
;
17 public class ProgressBar
extends JPanel
{
18 private static final long serialVersionUID
= 1L;
20 private Map
<Progress
, JProgressBar
> bars
;
21 private List
<ActionListener
> listeners
;
24 public ProgressBar() {
25 bars
= new HashMap
<Progress
, JProgressBar
>();
26 listeners
= new ArrayList
<ActionListener
>();
29 public void setProgress(final Progress pg
) {
35 final JProgressBar bar
= new JProgressBar();
36 bar
.setStringPainted(true);
41 bar
.setMinimum(pg
.getMin());
42 bar
.setMaximum(pg
.getMax());
43 bar
.setValue(pg
.getProgress());
44 bar
.setString(pg
.getName());
46 pg
.addProgressListener(new Progress
.ProgressListener() {
47 public void progress(Progress progress
, String name
) {
49 SwingUtilities
.invokeLater(new Runnable() {
51 Map
<Progress
, JProgressBar
> newBars
= new HashMap
<Progress
, JProgressBar
>();
54 bar
.setMinimum(pg
.getMin());
55 bar
.setMaximum(pg
.getMax());
56 bar
.setValue(pg
.getProgress());
57 bar
.setString(pg
.getName());
59 for (Progress pg
: getChildrenAsOrderedList(pg
)) {
60 JProgressBar bar
= bars
.get(pg
);
62 bar
= new JProgressBar();
63 bar
.setStringPainted(true);
68 bar
.setMinimum(pg
.getMin());
69 bar
.setMaximum(pg
.getMax());
70 bar
.setValue(pg
.getProgress());
71 bar
.setString(pg
.getName());
77 for (ActionListener listener
: listeners
) {
78 listener
.actionPerformed(new ActionEvent(
79 ProgressBar
.this, 0, "done"));
93 public void addActioListener(ActionListener l
) {
97 public void clearActionListeners() {
101 private List
<Progress
> getChildrenAsOrderedList(Progress pg
) {
102 List
<Progress
> children
= new ArrayList
<Progress
>();
103 for (Progress child
: pg
.getChildren()) {
105 children
.addAll(getChildrenAsOrderedList(child
));
111 private void setPresent(boolean present
) {
115 setLayout(new GridLayout(bars
.size(), 1));
116 add(bars
.get(pg
), 0);
117 for (Progress child
: getChildrenAsOrderedList(pg
)) {
118 add(bars
.get(child
));