package net.refractions.linecleaner.cleansing;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
public class PauseMonitor {
private boolean paused = false;
private Button pauseButton;
private Set<Object> listeners = new HashSet<Object>();
private Listener cancelListener = new Listener() {
public void handleEvent(Event event) {
pauseButton.setEnabled(false);
setPaused(false);
for (Object o: listeners) {
synchronized (o) {
o.notify();
}
}
}
};
protected Listener pauseListener = new Listener() {
public void handleEvent(Event e) {
setPaused(!isPaused());
if (isPaused()) {
pauseButton.setText("Resume");
}
}
};
public void attachToPauseButton(Button pauseComponent) {
pauseButton = pauseComponent;
pauseButton.addListener(SWT.Selection, pauseListener);
}
public void attachToCancelComponent(Control cancel) {
cancel.addListener(SWT.Selection, cancelListener);
}
public synchronized void setPaused(boolean value) {
paused = value;
if (!paused) {
pauseButton.setText("Pause");
for (Object o: listeners) {
synchronized (o) {
o.notify();
}
}
} else {
pauseButton.setText("Resume");
}
}
public boolean isPaused() {
return paused;
}
public void addListener(Object o) {
listeners.add(o);
}
public void removeListener(Object o) {
listeners.remove(o);
}
public void removeFromCancelComponent(Control control) {
control.removeListener(SWT.Selection, cancelListener);
}
public void removeFromPauseButton(Button cancel) {
cancel.removeListener(SWT.Selection, pauseListener);
pauseButton = null;
}
}