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(() -> { 035 delegate.setCustomText(""); 036 delegate.setMaximum(PROGRESS_BAR_MAX); 037 }); 038 } 039 040 @Override 041 public void doFinishTask() { 042 // do nothing 043 } 044 045 @Override 046 protected void updateProgress(double progressValue) { 047 final int newValue = (int) (progressValue * PROGRESS_BAR_MAX); 048 if (newValue != currentProgressValue) { 049 currentProgressValue = newValue; 050 GuiHelper.runInEDT(() -> delegate.setValue(currentProgressValue)); 051 } 052 } 053 054 @Override 055 protected void doSetCustomText(final String title) { 056 checkState(State.IN_TASK, State.IN_SUBTASK); 057 GuiHelper.runInEDT(() -> delegate.setCustomText(title)); 058 } 059 060 @Override 061 protected void doSetTitle(final String title) { 062 checkState(State.IN_TASK, State.IN_SUBTASK); 063 GuiHelper.runInEDT(() -> delegate.setTaskTitle(title)); 064 } 065 066 @Override 067 protected void doSetIntermediate(final boolean value) { 068 GuiHelper.runInEDT(() -> delegate.setIndeterminate(value)); 069 } 070 071 @Override 072 public void setProgressTaskId(ProgressTaskId taskId) { 073 // Do nothing 074 } 075 076 @Override 077 public ProgressTaskId getProgressTaskId() { 078 return null; 079 } 080 081 @Override 082 public Component getWindowParent() { 083 return Main.parent; 084 } 085}