package org.limewire.ui.swing.components;
import java.util.Collection;
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.MutableComboBoxModel;
/**
* A {@link ComboBoxModel} for {@link JComboBox} that is based off a
* {@link List}.
*/
public class CollectionBackedComboBoxModel extends CollectionBackedListModel implements
MutableComboBoxModel {
private Object selectedObject;
public CollectionBackedComboBoxModel(Collection<?> data) {
super(data);
if (getSize() > 0) {
setSelectedItem(getElementAt(0));
}
}
@SuppressWarnings("unchecked")
@Override
public void addElement(Object obj) {
data.add(obj);
fireIntervalAdded(this, data.size() - 1, data.size() - 1);
if (data.size() == 1 && selectedObject == null && obj != null) {
setSelectedItem(obj);
}
}
@SuppressWarnings("unchecked")
@Override
public void insertElementAt(Object obj, int index) {
data.add(index, obj);
fireIntervalAdded(this, index, index);
}
@Override
public void removeElement(Object obj) {
int index = data.indexOf(obj);
if (index != -1) {
removeElementAt(index);
}
}
@Override
public void removeElementAt(int index) {
if (getElementAt(index) == selectedObject) {
if (index == 0) {
setSelectedItem(getSize() == 1 ? null : getElementAt(index + 1));
} else {
setSelectedItem(getElementAt(index - 1));
}
}
data.remove(index);
fireIntervalRemoved(this, index, index);
}
@Override
public Object getSelectedItem() {
return selectedObject;
}
@Override
public void setSelectedItem(Object anItem) {
if ((selectedObject != null && !selectedObject.equals(anItem)) || selectedObject == null
&& anItem != null) {
selectedObject = anItem;
fireContentsChanged(this, -1, -1);
}
}
}