package call.gui; import java.util.List; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; import call.AudioDevice; import call.AudioDeviceUpdateListener; import call.AudioDevices; import call.Id; import call.UnknownDefaultValueException; public class AudioDeviceListModel extends AbstractListModel<AudioDevice> implements ComboBoxModel<AudioDevice>, AudioDeviceUpdateListener { private static final long serialVersionUID = -8791689168786668188L; private final AudioDevices<? extends AudioDevice> devices; public AudioDeviceListModel(AudioDevices<? extends AudioDevice> devices) { this.devices = devices; devices.addListener(this); } @Override public AudioDevice getElementAt(int index) { List<? extends AudioDevice> list = devices.getAudioDevices(); if (index < list.size()) return list.get(index); else if (list.size() > 0) return list.get(list.size() - 1); else return null; } @Override public int getSize() { return devices.getAudioDevices().size(); } @Override public Object getSelectedItem() { try { return devices.getCurrentDevice(); } catch (UnknownDefaultValueException e) { return null; } } @Override public void setSelectedItem(Object device) { devices.setCurrentDevice((AudioDevice) device); } @Override public void onAudioDeviceUpdate() { this.fireContentsChanged(this, 0, getSize()); } @Override public String getId() { return "AudioDeviceListModel<" + devices.getId() + ">"; } @Override public int compareTo(Id o) { return getId().compareTo(o.getId()); } }