package net.java.swingfx.waitwithstyle;
import java.awt.event.ActionListener;
/**
* A progress panel with good performance that is cancelable instead of
* infinite. The work is done by the CancelableAdaptee.
* <p>
* Allows programatic cancelling (maybe useful for timeouts), and adding a
* listener to the user's cancel so that the action the user is waiting on is
* stopped or ignored.
*
* @author Michael Bushe michael@bushe.com
*/
public class PerformanceCancelableProgressPanel extends
PerformanceInfiniteProgressPanel {
/**
*
*/
private static final long serialVersionUID = -2286874342721309787L;
public PerformanceCancelableProgressPanel() {
super(true);
this.setInfiniteProgressAdapter(this.createCancellableAdapter());
}
public PerformanceCancelableProgressPanel(final boolean i_bUseBackBuffer) {
super(i_bUseBackBuffer);
this.setInfiniteProgressAdapter(this.createCancellableAdapter());
}
public PerformanceCancelableProgressPanel(final int numBars) {
super(numBars);
this.setInfiniteProgressAdapter(this.createCancellableAdapter());
}
public PerformanceCancelableProgressPanel(
final InfiniteProgressAdapter infiniteProgressAdapter) {
super(infiniteProgressAdapter);
this.setInfiniteProgressAdapter(this.createCancellableAdapter());
}
public PerformanceCancelableProgressPanel(final boolean i_bUseBackBuffer,
final int numBars) {
super(i_bUseBackBuffer, numBars);
this.setInfiniteProgressAdapter(this.createCancellableAdapter());
}
public PerformanceCancelableProgressPanel(final boolean i_bUseBackBuffer,
final CancelableProgessAdapter infiniteProgressAdapter) {
super(i_bUseBackBuffer, infiniteProgressAdapter);
}
public PerformanceCancelableProgressPanel(final int numBars,
final CancelableProgessAdapter infiniteProgressAdapter) {
super(numBars, infiniteProgressAdapter);
}
public PerformanceCancelableProgressPanel(final boolean i_bUseBackBuffer,
final int numBars,
final CancelableProgessAdapter infiniteProgressAdapter) {
super(i_bUseBackBuffer, numBars, infiniteProgressAdapter);
}
/**
* When not constructed with a CancelableProgressAdapter this method is
* called on construction to create one.
*
* @return a cancellable adapter
*/
protected CancelableProgessAdapter createCancellableAdapter() {
return new CancelableProgessAdapter(this);
}
/**
* Add a cancel listener to be called back when the user cancels the
* progress.
*
* @param listener
* some listener that wants to take action on cancel (like stop
* whatever was being waited for)
*/
@Override
public void addCancelListener(final ActionListener listener) {
((CancelableProgessAdapter) this.infiniteProgressAdapter)
.addCancelListener(listener);
}
/**
* Remove a cancel listener that would be called back when the user cancels
* the progress.
*
* @param listener
* some listener that wants to take action on cancel (like stop
* whatever was being waited for)
*/
@Override
public void removeCancelListener(final ActionListener listener) {
((CancelableProgessAdapter) this.infiniteProgressAdapter)
.removeCancelListener(listener);
}
/**
* Programmaticlly click the cancel button. Can be called from any thread.
*/
public void doCancel() {
((CancelableProgessAdapter) this.infiniteProgressAdapter).doCancel();
}
}