001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.progress; 003 004 import java.awt.Component; 005 006 import org.openstreetmap.josm.Main; 007 import org.openstreetmap.josm.gui.util.GuiHelper; 008 import org.openstreetmap.josm.tools.CheckParameterUtil; 009 010 /** 011 * SwingRenderingProgressMonitor is progress monitor which delegates the rendering 012 * of progress information to a {@link ProgressRenderer}. 013 * Methods of the progress renderer are always called on the Swing EDT. 014 * 015 */ 016 public class SwingRenderingProgressMonitor extends AbstractProgressMonitor { 017 private static final int PROGRESS_BAR_MAX = 100; 018 private int currentProgressValue = 0; 019 private ProgressRenderer delegate; 020 021 /** 022 * 023 * @param delegate the delegate which renders the progress information. Must not be null. 024 * @throws IllegalArgumentException thrown if delegate is null 025 * 026 */ 027 public SwingRenderingProgressMonitor(ProgressRenderer delegate) { 028 super(new CancelHandler()); 029 CheckParameterUtil.ensureParameterNotNull(delegate, "delegate"); 030 this.delegate = delegate; 031 } 032 033 @Override 034 public void doBeginTask() { 035 GuiHelper.runInEDT(new Runnable() { 036 public void run() { 037 delegate.setCustomText(""); 038 delegate.setMaximum(PROGRESS_BAR_MAX); 039 } 040 }); 041 } 042 043 @Override 044 public void doFinishTask() { 045 // do nothing 046 } 047 048 @Override 049 protected void updateProgress(double progressValue) { 050 final int newValue = (int)(progressValue * PROGRESS_BAR_MAX); 051 if (newValue != currentProgressValue) { 052 currentProgressValue = newValue; 053 GuiHelper.runInEDT(new Runnable() { 054 public void run() { 055 delegate.setValue(currentProgressValue); 056 } 057 }); 058 } 059 } 060 061 @Override 062 protected void doSetCustomText(final String title) { 063 checkState(State.IN_TASK, State.IN_SUBTASK); 064 GuiHelper.runInEDT(new Runnable() { 065 public void run() { 066 delegate.setCustomText(title); 067 } 068 }); 069 } 070 071 @Override 072 protected void doSetTitle(final String title) { 073 checkState(State.IN_TASK, State.IN_SUBTASK); 074 GuiHelper.runInEDT(new Runnable() { 075 public void run() { 076 delegate.setTaskTitle(title); 077 } 078 }); 079 } 080 081 @Override 082 protected void doSetIntermediate(final boolean value) { 083 GuiHelper.runInEDT(new Runnable() { 084 public void run() { 085 delegate.setIndeterminate(value); 086 } 087 }); 088 } 089 090 @Override 091 public void setProgressTaskId(ProgressTaskId taskId) { 092 } 093 094 @Override 095 public ProgressTaskId getProgressTaskId() { 096 return null; 097 } 098 099 @Override 100 public Component getWindowParent() { 101 return Main.parent; 102 } 103 }