1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.cosylab.gui.components;
21
22 import java.util.ArrayList;
23
24
25
26
27
28
29
30
31
32 public abstract class AbstractProgressTask extends Thread
33 implements ProgressMonitor
34 {
35 private final ArrayList<ProgressListener> listeners = new ArrayList<ProgressListener>();
36
37
38
39
40 public AbstractProgressTask()
41 {
42 super();
43 }
44
45
46
47
48
49
50 public void addProgressListener(ProgressListener listener)
51 {
52 listeners.add(listener);
53 }
54
55
56
57
58
59
60
61
62
63 protected void fireProgressEvent(String status, int current, int total)
64 {
65 yield();
66
67 ProgressEvent e = new ProgressEvent(this, status, current, total);
68
69 for (int i = 0; i < listeners.size(); i++) {
70 listeners.get(i).progress(e);
71 }
72
73 yield();
74 }
75
76
77
78
79 protected void fireTaskComplete()
80 {
81 yield();
82
83 ProgressEvent e = new ProgressEvent(this, getStatus(), getCurrent(),
84 getTotal());
85
86 for (int i = 0; i < listeners.size(); i++) {
87 listeners.get(i).taskComplete(e);
88 }
89
90 yield();
91 }
92
93
94
95
96
97
98 protected void fireTaskInterrupted(String reason)
99 {
100 yield();
101
102 ProgressEvent e = new ProgressEvent(this, reason, 0, -1);
103
104 for (int i = 0; i < listeners.size(); i++) {
105 listeners.get(i).taskInterruped(e);
106 }
107
108 yield();
109 }
110
111
112
113
114 protected void fireTaskStarted()
115 {
116 yield();
117
118 ProgressEvent e = new ProgressEvent(this, getStatus(), getCurrent(),
119 getTotal());
120
121 for (int i = 0; i < listeners.size(); i++) {
122 listeners.get(i).taskStarted(e);
123 }
124
125 yield();
126 }
127
128
129
130
131 protected void immediateUpdate()
132 {
133 fireProgressEvent(getStatus(), getCurrent(), getTotal());
134 }
135
136
137
138
139
140
141 public void removeProgressListener(ProgressListener listener)
142 {
143 listeners.remove(listener);
144 }
145 }
146
147