package org.objectstyle.wolips.wooeditor.widgets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Event;
public class RadioGroup {
private ListenerList selectionEventListeners = new ListenerList();
private List<Button> group = new ArrayList<Button>();
private Button selected;
private SelectionListener changeListener = new SelectionListener() {
public void widgetDefaultSelected(final SelectionEvent e) {
setSelection(((Button) e.getSource()).getText());
}
public void widgetSelected(final SelectionEvent e) {
Button b = (Button) e.getSource();
if (b.getSelection()) {
setSelection(b.getText());
}
}
};
public RadioGroup() {
}
public boolean add(final Button button) {
button.addSelectionListener(changeListener);
return group.add(button);
}
public void add(final int index, final Button button) {
button.addSelectionListener(changeListener);
group.add(index, button);
}
public boolean addAll(final Collection<Button> collection) {
for (Button button : collection) {
button.addSelectionListener(changeListener);
}
return group.addAll(collection);
}
public boolean addAll(final int index,
final Collection<Button> collection) {
for (Button button : collection) {
button.addSelectionListener(changeListener);
}
return group.addAll(index, collection);
}
public void clear() {
for (Button button : group) {
button.removeSelectionListener(changeListener);
}
group.clear();
}
public boolean contains(final Object value) {
return group.contains(value);
}
public boolean containsAll(final Collection<Button> collection) {
return group.containsAll(collection);
}
public Object get(final int index) {
return group.get(index);
}
public int indexOf(final Object value) {
return group.indexOf(value);
}
public boolean isEmpty() {
return group.isEmpty();
}
public Iterator<Button> iterator() {
return group.iterator();
}
public int lastIndexOf(final Object value) {
return group.lastIndexOf(value);
}
public ListIterator<Button> listIterator() {
return group.listIterator();
}
public ListIterator<Button> listIterator(final int arg0) {
return group.listIterator(arg0);
}
public boolean remove(final Button button) {
button.removeSelectionListener(changeListener);
return group.remove(button);
}
public Object remove(final int index) {
group.get(index).removeSelectionListener(changeListener);
return group.remove(index);
}
public boolean removeAll(final Collection<Button> arg0) {
for (Button button : group) {
button.removeSelectionListener(changeListener);
}
return group.removeAll(arg0);
}
public int size() {
return group.size();
}
public List<Button> subList(final int arg0, final int arg1) {
return group.subList(arg0, arg1);
}
public Object[] toArray() {
return group.toArray();
}
public Object[] toArray(final Object[] arg0) {
return group.toArray(arg0);
}
public void removeSelectionListener(
final SelectionListener selectionListener) {
selectionEventListeners.remove(selectionListener);
}
public void addSelectionListener(
final SelectionListener selectionListener) {
selectionEventListeners.add(selectionListener);
}
public void setSelection(final Object value) {
if (group.size() < 1) {
return;
}
for (Button i : group) {
if (i.getText().equals(value)) {
selected = i;
} else {
i.setSelection(false);
}
}
if (selected != null) {
selected.setSelection(true);
Event e = new Event();
e.type = SWT.Selection;
e.item = selected;
e.widget = selected;
e.text = selected.getText();
fireSelectionEvent(new SelectionEvent(e));
}
}
private void fireSelectionEvent(final SelectionEvent e) {
if (e.item != null && e.item.isDisposed()) {
return;
}
Object[] l = selectionEventListeners.getListeners();
for (int i = 0; i < l.length; i++) {
((SelectionListener) l[i]).widgetSelected(e);
}
}
public Object getSelection() {
if (group.size() < 1) {
return null;
}
return selected.getText();
}
}