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 }