package au.gov.ga.earthsci.core.preferences; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.swt.widgets.Composite; public class ListenableBooleanFieldEditor extends BooleanFieldEditor { private final List<ChangeListener> listeners = new ArrayList<ChangeListener>(); public ListenableBooleanFieldEditor() { super(); } public ListenableBooleanFieldEditor(String name, String label, Composite parent) { super(name, label, parent); } public ListenableBooleanFieldEditor(String name, String labelText, int style, Composite parent) { super(name, labelText, style, parent); } @Override protected void doLoad() { super.doLoad(); notifyListeners(getBooleanValue()); } @Override protected void doLoadDefault() { super.doLoadDefault(); notifyListeners(getBooleanValue()); } @Override protected void fireValueChanged(String property, Object oldValue, Object newValue) { super.fireValueChanged(property, oldValue, newValue); notifyListeners(getBooleanValue()); } public void addListener(ChangeListener listener) { listeners.add(listener); } public void removeListener(ChangeListener listener) { listeners.remove(listener); } protected void notifyListeners(boolean newValue) { for (int i = listeners.size() - 1; i >= 0; i--) { listeners.get(i).valueChanged(newValue); } } public interface ChangeListener { void valueChanged(boolean newValue); } }