package org.signalml.app.model.document.opensignal.elements;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import org.signalml.app.SvarogApplication;
import org.signalml.codec.SignalMLCodec;
import org.signalml.codec.SignalMLCodecManager;
import org.signalml.codec.SignalMLCodecManagerEvent;
import org.signalml.codec.SignalMLCodecManagerListener;
/**
* A {@link ComboBoxModel} for a combobox for selecting how a file should be opened:
*<ul>
* <li>AUTODETECT - autodetect the file type and open it automatically</li>
* <li>RAW - will try to load a file as a RAW signal file
* <li>EDF/EASYS/etc. - will use a {@link SignalMLCodec} to open the file.
*</ul>
*
* @author Piotr Szachewicz
*/
public class FileTypeComboBoxModel extends AbstractListModel implements ComboBoxModel, SignalMLCodecManagerListener {
private SignalMLCodecManager codecManager;
private Object selectedItem;
public FileTypeComboBoxModel() {
this.codecManager = SvarogApplication.getSharedInstance().getSignalMLCodecManager();
this.codecManager.addSignalMLCodecManagerListener(this);
}
@Override
public Object getElementAt(int index) {
switch (index) {
case 0:
return FileOpenSignalMethod.AUTODETECT;
case 1:
return FileOpenSignalMethod.RAW;
default:
return codecManager.getCodecAt(index - 2);
}
}
@Override
public int getSize() {
return codecManager.getCodecCount() + 2;
}
@Override
public Object getSelectedItem() {
return selectedItem;
}
@Override
public void setSelectedItem(Object anItem) {
this.selectedItem = anItem;
}
@Override
public void codecAdded(SignalMLCodecManagerEvent ev) {
fireContentsChanged(this, 1, getSize());
}
@Override
public void codecRemoved(SignalMLCodecManagerEvent ev) {
fireContentsChanged(this, 1, getSize());
}
@Override
public void codecsChanged(SignalMLCodecManagerEvent ev) {
fireContentsChanged(this, 1, getSize());
}
}