// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.progress;
import java.awt.Component;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.gui.util.GuiHelper;
import org.openstreetmap.josm.tools.CheckParameterUtil;
/**
* SwingRenderingProgressMonitor is progress monitor which delegates the rendering
* of progress information to a {@link ProgressRenderer}.
* Methods of the progress renderer are always called on the Swing EDT.
*
*/
public class SwingRenderingProgressMonitor extends AbstractProgressMonitor {
private static final int PROGRESS_BAR_MAX = 100;
private int currentProgressValue;
private final ProgressRenderer delegate;
/**
*
* @param delegate the delegate which renders the progress information. Must not be null.
* @throws IllegalArgumentException if delegate is null
*/
public SwingRenderingProgressMonitor(ProgressRenderer delegate) {
super(new CancelHandler());
CheckParameterUtil.ensureParameterNotNull(delegate, "delegate");
this.delegate = delegate;
}
@Override
public void doBeginTask() {
GuiHelper.runInEDT(() -> {
delegate.setCustomText("");
delegate.setMaximum(PROGRESS_BAR_MAX);
});
}
@Override
public void doFinishTask() {
// do nothing
}
@Override
protected void updateProgress(double progressValue) {
final int newValue = (int) (progressValue * PROGRESS_BAR_MAX);
if (newValue != currentProgressValue) {
currentProgressValue = newValue;
GuiHelper.runInEDT(() -> delegate.setValue(currentProgressValue));
}
}
@Override
protected void doSetCustomText(final String title) {
checkState(State.IN_TASK, State.IN_SUBTASK);
GuiHelper.runInEDT(() -> delegate.setCustomText(title));
}
@Override
protected void doSetTitle(final String title) {
checkState(State.IN_TASK, State.IN_SUBTASK);
GuiHelper.runInEDT(() -> delegate.setTaskTitle(title));
}
@Override
protected void doSetIntermediate(final boolean value) {
GuiHelper.runInEDT(() -> delegate.setIndeterminate(value));
}
@Override
public void setProgressTaskId(ProgressTaskId taskId) {
// Do nothing
}
@Override
public ProgressTaskId getProgressTaskId() {
return null;
}
@Override
public Component getWindowParent() {
return Main.parent;
}
}