package org.objectstyle.wolips.wooeditor.databinding.observable;
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
import org.eclipse.core.databinding.observable.value.ValueDiff;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.objectstyle.wolips.wooeditor.widgets.RadioGroup;
public class RadioGroupObservableValue extends AbstractObservableValue {
private RadioGroup myGroup;
private Object mySelection;
private SelectionListener selectionListener = new SelectionListener() {
public void widgetDefaultSelected(final SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(final SelectionEvent e) {
final Object newSelection = myGroup.getSelection();
fireValueChange(new ValueDiff() {
@Override
public Object getNewValue() {
return newSelection;
}
@Override
public Object getOldValue() {
return mySelection;
}
});
mySelection = newSelection;
}
};
public RadioGroupObservableValue(final RadioGroup group) {
this.myGroup = group;
group.addSelectionListener(selectionListener);
}
@Override
public synchronized void dispose() {
myGroup.removeSelectionListener(selectionListener);
}
@Override
protected void doSetValue(final Object value) {
myGroup.setSelection(value);
mySelection = value;
}
@Override
protected Object doGetValue() {
return myGroup.getSelection();
}
public Object getValueType() {
return Object.class;
}
}