Lines 167-178
Link Here
|
167 |
* The JobMonitor is the inner class that handles the IProgressMonitor |
167 |
* The JobMonitor is the inner class that handles the IProgressMonitor |
168 |
* integration with the ProgressMonitor. |
168 |
* integration with the ProgressMonitor. |
169 |
*/ |
169 |
*/ |
170 |
class JobMonitor implements IProgressMonitorWithBlocking { |
170 |
public class JobMonitor implements IProgressMonitorWithBlocking { |
171 |
Job job; |
171 |
Job job; |
172 |
|
172 |
|
173 |
String currentTaskName; |
173 |
String currentTaskName; |
174 |
|
174 |
|
175 |
IProgressMonitorWithBlocking listener; |
175 |
IProgressMonitor listener; |
176 |
|
176 |
|
177 |
/** |
177 |
/** |
178 |
* Create a monitor on the supplied job. |
178 |
* Create a monitor on the supplied job. |
Lines 188-200
Link Here
|
188 |
* |
188 |
* |
189 |
* @param monitor |
189 |
* @param monitor |
190 |
*/ |
190 |
*/ |
191 |
void addProgressListener(IProgressMonitorWithBlocking monitor) { |
191 |
public void addProgressListener(IProgressMonitor monitor) { |
192 |
listener = monitor; |
192 |
listener = monitor; |
193 |
JobInfo info = getJobInfo(job); |
193 |
JobInfo info = getJobInfo(job); |
194 |
TaskInfo currentTask = info.getTaskInfo(); |
194 |
final TaskInfo currentTask = info.getTaskInfo(); |
195 |
if (currentTask != null) { |
195 |
if (currentTask != null) { |
196 |
listener.beginTask(currentTaskName, currentTask.totalWork); |
196 |
listener.beginTask(currentTaskName, currentTask.totalWork); |
197 |
listener.internalWorked(currentTask.preWork); |
197 |
runInUIThread(new Runnable() { |
|
|
198 |
|
199 |
public void run() { |
200 |
listener.internalWorked(currentTask.preWork); |
201 |
} |
202 |
}); |
198 |
} |
203 |
} |
199 |
} |
204 |
} |
200 |
|
205 |
|
Lines 204-216
Link Here
|
204 |
* @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, |
209 |
* @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, |
205 |
* int) |
210 |
* int) |
206 |
*/ |
211 |
*/ |
207 |
public void beginTask(String taskName, int totalWork) { |
212 |
public void beginTask(final String taskName, final int totalWork) { |
208 |
JobInfo info = getJobInfo(job); |
213 |
JobInfo info = getJobInfo(job); |
209 |
info.beginTask(taskName, totalWork); |
214 |
info.beginTask(taskName, totalWork); |
210 |
refreshJobInfo(info); |
215 |
refreshJobInfo(info); |
211 |
currentTaskName = taskName; |
216 |
currentTaskName = taskName; |
212 |
if (listener != null) { |
217 |
if (listener != null) { |
213 |
listener.beginTask(taskName, totalWork); |
218 |
Display.getDefault().asyncExec(new Runnable() { |
|
|
219 |
|
220 |
public void run() { |
221 |
listener.beginTask(taskName, totalWork); |
222 |
} |
223 |
}); |
224 |
|
214 |
} |
225 |
} |
215 |
} |
226 |
} |
216 |
|
227 |
|
Lines 225-231
Link Here
|
225 |
info.clearChildren(); |
236 |
info.clearChildren(); |
226 |
runnableMonitors.remove(job); |
237 |
runnableMonitors.remove(job); |
227 |
if (listener != null) { |
238 |
if (listener != null) { |
228 |
listener.done(); |
239 |
runInUIThread(new Runnable() { |
|
|
240 |
|
241 |
public void run() { |
242 |
listener.done(); |
243 |
} |
244 |
}); |
229 |
} |
245 |
} |
230 |
} |
246 |
} |
231 |
|
247 |
|
Lines 234-247
Link Here
|
234 |
* |
250 |
* |
235 |
* @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double) |
251 |
* @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double) |
236 |
*/ |
252 |
*/ |
237 |
public void internalWorked(double work) { |
253 |
public void internalWorked(final double work) { |
238 |
JobInfo info = getJobInfo(job); |
254 |
JobInfo info = getJobInfo(job); |
239 |
if (info.hasTaskInfo()) { |
255 |
if (info.hasTaskInfo()) { |
240 |
info.addWork(work); |
256 |
info.addWork(work); |
241 |
refreshJobInfo(info); |
257 |
refreshJobInfo(info); |
242 |
} |
258 |
} |
243 |
if (listener != null) { |
259 |
if (listener != null) { |
244 |
listener.internalWorked(work); |
260 |
|
|
|
261 |
runInUIThread(new Runnable() { |
262 |
|
263 |
public void run() { |
264 |
listener.internalWorked(work); |
265 |
} |
266 |
}); |
267 |
|
245 |
} |
268 |
} |
246 |
} |
269 |
} |
247 |
|
270 |
|
Lines 333-340
Link Here
|
333 |
JobInfo info = getJobInfo(job); |
356 |
JobInfo info = getJobInfo(job); |
334 |
info.setBlockedStatus(null); |
357 |
info.setBlockedStatus(null); |
335 |
refreshJobInfo(info); |
358 |
refreshJobInfo(info); |
336 |
if (listener != null) { |
359 |
if (listener instanceof IProgressMonitorWithBlocking) { |
337 |
listener.clearBlocked(); |
360 |
((IProgressMonitorWithBlocking) listener).clearBlocked(); |
338 |
} |
361 |
} |
339 |
} |
362 |
} |
340 |
|
363 |
|
Lines 347-354
Link Here
|
347 |
JobInfo info = getJobInfo(job); |
370 |
JobInfo info = getJobInfo(job); |
348 |
info.setBlockedStatus(reason); |
371 |
info.setBlockedStatus(reason); |
349 |
refreshJobInfo(info); |
372 |
refreshJobInfo(info); |
350 |
if (listener != null) { |
373 |
if (listener instanceof IProgressMonitorWithBlocking) { |
351 |
listener.setBlocked(reason); |
374 |
((IProgressMonitorWithBlocking) listener).setBlocked(reason); |
352 |
} |
375 |
} |
353 |
} |
376 |
} |
354 |
} |
377 |
} |
Lines 641-647
Link Here
|
641 |
synchronized (runnableMonitors) { |
664 |
synchronized (runnableMonitors) { |
642 |
JobMonitor monitor = (JobMonitor) runnableMonitors.get(job); |
665 |
JobMonitor monitor = (JobMonitor) runnableMonitors.get(job); |
643 |
if (monitor == null) { |
666 |
if (monitor == null) { |
644 |
monitor = new JobMonitor(job); |
667 |
monitor = (JobMonitor) jobMonitors.get(job); |
|
|
668 |
if (monitor == null) { |
669 |
monitor = new JobMonitor(job); |
670 |
} |
645 |
runnableMonitors.put(job, monitor); |
671 |
runnableMonitors.put(job, monitor); |
646 |
} |
672 |
} |
647 |
|
673 |
|
Lines 1326-1331
Link Here
|
1326 |
|
1352 |
|
1327 |
} |
1353 |
} |
1328 |
|
1354 |
|
|
|
1355 |
private void runInUIThread(Runnable runnable) { |
1356 |
Display display = Display.getDefault(); |
1357 |
if (display.isDisposed()) |
1358 |
return; |
1359 |
if (display.getThread() == Thread.currentThread()) { |
1360 |
runnable.run(); |
1361 |
} else { |
1362 |
display.asyncExec(runnable); |
1363 |
} |
1364 |
} |
1365 |
|
1329 |
private class RunnableWithStatus implements Runnable { |
1366 |
private class RunnableWithStatus implements Runnable { |
1330 |
|
1367 |
|
1331 |
IStatus status = Status.OK_STATUS; |
1368 |
IStatus status = Status.OK_STATUS; |
Lines 1388-1391
Link Here
|
1388 |
} |
1425 |
} |
1389 |
|
1426 |
|
1390 |
} |
1427 |
} |
|
|
1428 |
|
1429 |
Map jobMonitors = new HashMap(); |
1430 |
|
1431 |
public void registerMonitorForJob(Job job, IProgressMonitor monitor) { |
1432 |
jobMonitors.put(job, monitor); |
1433 |
} |
1434 |
|
1435 |
/* |
1436 |
* (non-Javadoc) |
1437 |
* |
1438 |
* @see |
1439 |
* org.eclipse.ui.progress.IProgressService#addProgressListenerForJob(org |
1440 |
* .eclipse.core.runtime.jobs.Job, |
1441 |
* org.eclipse.core.runtime.IProgressMonitor) |
1442 |
*/ |
1443 |
public void addProgressMonitorForJob(Job job, IProgressMonitor monitor) { |
1444 |
progressFor(job).addProgressListener(monitor); |
1445 |
} |
1446 |
|
1447 |
/* |
1448 |
* (non-Javadoc) |
1449 |
* |
1450 |
* @see |
1451 |
* org.eclipse.ui.progress.IProgressService#removeProgressListenerForJob |
1452 |
* (org.eclipse.core.runtime.jobs.Job, |
1453 |
* org.eclipse.core.runtime.IProgressMonitor) |
1454 |
*/ |
1455 |
public void removeProgressMonitorForJob(Job job, IProgressMonitor monitor) { |
1456 |
// TODO |
1457 |
} |
1391 |
} |
1458 |
} |