package au.gov.ga.earthsci.core.preferences; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.preference.RadioGroupFieldEditor; import org.eclipse.swt.widgets.Composite; public class ListenableRadioGroupFieldEditor extends RadioGroupFieldEditor { private final List<ChangeListener> listeners = new ArrayList<ChangeListener>(); private String value; protected ListenableRadioGroupFieldEditor() { super(); } public ListenableRadioGroupFieldEditor(String name, String labelText, int numColumns, String[][] labelAndValues, Composite parent, boolean useGroup) { super(name, labelText, numColumns, labelAndValues, parent, useGroup); } public ListenableRadioGroupFieldEditor(String name, String labelText, int numColumns, String[][] labelAndValues, Composite parent) { super(name, labelText, numColumns, labelAndValues, parent); } @Override protected void doLoad() { super.doLoad(); notifyListeners(getPreferenceStore().getString(getPreferenceName())); } @Override protected void doLoadDefault() { super.doLoadDefault(); notifyListeners(getPreferenceStore().getDefaultString(getPreferenceName())); } @Override protected void fireValueChanged(String property, Object oldValue, Object newValue) { super.fireValueChanged(property, oldValue, newValue); if (newValue instanceof String) { notifyListeners((String) newValue); } } public String getStringValue() { return value; } public void addListener(ChangeListener listener) { listeners.add(listener); } public void removeListener(ChangeListener listener) { listeners.remove(listener); } protected void notifyListeners(String newValue) { this.value = newValue; for (int i = listeners.size() - 1; i >= 0; i--) { listeners.get(i).valueChanged(newValue); } } public interface ChangeListener { void valueChanged(String newValue); } }