001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.progress; 003 004import java.awt.Component; 005 006import org.openstreetmap.josm.Main; 007import org.openstreetmap.josm.gui.util.GuiHelper; 008import 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 */ 016public class SwingRenderingProgressMonitor extends AbstractProgressMonitor { 017 private static final int PROGRESS_BAR_MAX = 100; 018 private int currentProgressValue; 019 private final ProgressRenderer delegate; 020 021 /** 022 * 023 * @param delegate the delegate which renders the progress information. Must not be null. 024 * @throws IllegalArgumentException if delegate is null 025 */ 026 public SwingRenderingProgressMonitor(ProgressRenderer delegate) { 027 super(new CancelHandler()); 028 CheckParameterUtil.ensureParameterNotNull(delegate, "delegate"); 029 this.delegate = delegate; 030 } 031 032 @Override 033 public void doBeginTask() { 034 GuiHelper.runInEDT(new Runnable() { 035 @Override 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 @Override 055 public void run() { 056 delegate.setValue(currentProgressValue); 057 } 058 }); 059 } 060 } 061 062 @Override 063 protected void doSetCustomText(final String title) { 064 checkState(State.IN_TASK, State.IN_SUBTASK); 065 GuiHelper.runInEDT(new Runnable() { 066 @Override 067 public void run() { 068 delegate.setCustomText(title); 069 } 070 }); 071 } 072 073 @Override 074 protected void doSetTitle(final String title) { 075 checkState(State.IN_TASK, State.IN_SUBTASK); 076 GuiHelper.runInEDT(new Runnable() { 077 @Override 078 public void run() { 079 delegate.setTaskTitle(title); 080 } 081 }); 082 } 083 084 @Override 085 protected void doSetIntermediate(final boolean value) { 086 GuiHelper.runInEDT(new Runnable() { 087 @Override 088 public void run() { 089 delegate.setIndeterminate(value); 090 } 091 }); 092 } 093 094 @Override 095 public void setProgressTaskId(ProgressTaskId taskId) { 096 } 097 098 @Override 099 public ProgressTaskId getProgressTaskId() { 100 return null; 101 } 102 103 @Override 104 public Component getWindowParent() { 105 return Main.parent; 106 } 107}