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 = 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 @Override 037 public void run() { 038 delegate.setCustomText(""); 039 delegate.setMaximum(PROGRESS_BAR_MAX); 040 } 041 }); 042 } 043 044 @Override 045 public void doFinishTask() { 046 // do nothing 047 } 048 049 @Override 050 protected void updateProgress(double progressValue) { 051 final int newValue = (int)(progressValue * PROGRESS_BAR_MAX); 052 if (newValue != currentProgressValue) { 053 currentProgressValue = newValue; 054 GuiHelper.runInEDT(new Runnable() { 055 @Override 056 public void run() { 057 delegate.setValue(currentProgressValue); 058 } 059 }); 060 } 061 } 062 063 @Override 064 protected void doSetCustomText(final String title) { 065 checkState(State.IN_TASK, State.IN_SUBTASK); 066 GuiHelper.runInEDT(new Runnable() { 067 @Override 068 public void run() { 069 delegate.setCustomText(title); 070 } 071 }); 072 } 073 074 @Override 075 protected void doSetTitle(final String title) { 076 checkState(State.IN_TASK, State.IN_SUBTASK); 077 GuiHelper.runInEDT(new Runnable() { 078 @Override 079 public void run() { 080 delegate.setTaskTitle(title); 081 } 082 }); 083 } 084 085 @Override 086 protected void doSetIntermediate(final boolean value) { 087 GuiHelper.runInEDT(new Runnable() { 088 @Override 089 public void run() { 090 delegate.setIndeterminate(value); 091 } 092 }); 093 } 094 095 @Override 096 public void setProgressTaskId(ProgressTaskId taskId) { 097 } 098 099 @Override 100 public ProgressTaskId getProgressTaskId() { 101 return null; 102 } 103 104 @Override 105 public Component getWindowParent() { 106 return Main.parent; 107 } 108}