package org.myrobotlab.control.opencv;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.MutableComboBoxModel;
import javax.swing.event.ListDataListener;
import org.myrobotlab.logging.LoggerFactory;
import org.slf4j.Logger;
public class ComboBoxModel implements MutableComboBoxModel, ActionListener {
public final static Logger log = LoggerFactory.getLogger(ComboBoxModel.class.toString());
private static final DefaultComboBoxModel<Object> model = new DefaultComboBoxModel<Object>();
private static final HashMap<String, String> modelMap = new HashMap<String, String>();
private static final HashMap<String, ArrayList<String>> possibleSources = new HashMap<String, ArrayList<String>>();
private String selected;
private OpenCVFilterGUI filterGUI;
public static void addElement(String name, String source) {
model.addElement(source);
modelMap.put(name, name);
ArrayList<String> possible;
if (possibleSources.containsKey(name)) {
possible = possibleSources.get(name);
} else {
possible = new ArrayList<String>();
possibleSources.put(name, possible);
}
possible.add(source);
}
static public boolean contains(String key) {
return modelMap.containsKey(key);
}
public static void removeSource(String name) {
ArrayList<String> possible = possibleSources.get(name);
modelMap.remove(name);
for (String source : possible) {
model.removeElement(source);
}
}
public ComboBoxModel(OpenCVFilterGUI openCVFilterGUI) {
this.filterGUI = openCVFilterGUI;
}
@Override
public void actionPerformed(ActionEvent e) {
JComboBox<String> input = (JComboBox<String>) e.getSource();
if ((String) input.getSelectedItem() != null) {
filterGUI.boundFilter.filter.sourceKey = (String) input.getSelectedItem();
}
}
@Override
public void addElement(Object obj) {
// modelMap.put((String)obj, (String)obj);
model.addElement(obj);
}
@Override
public void addListDataListener(ListDataListener l) {
model.addListDataListener(l);
}
@Override
public Object getElementAt(int index) {
return model.getElementAt(index);
}
@Override
public Object getSelectedItem() {
return selected;
}
@Override
public int getSize() {
return model.getSize();
}
@Override
public void insertElementAt(Object obj, int index) {
// modelMap.put((String)obj, (String)obj);
model.insertElementAt(obj, index);
}
// FIXME FIXME FIXME - DANGEROUS & POSSIBLY WRONG - MABYE NOT SUPPORTED
// REMOTELY !!!!
// FIXME FIXME
@Override
public void removeElement(Object obj) {
// modelMap.remove((String) obj);
model.removeElement(obj);
}
@Override
public void removeElementAt(int index) {
String t = (String) getElementAt(index);
if (t != null) {
modelMap.remove(t);
}
model.removeElementAt(index);
}
@Override
public void removeListDataListener(ListDataListener l) {
model.removeListDataListener(l);
}
@Override
public void setSelectedItem(Object anItem) {
// TODO Auto-generated method stub
selected = (String) anItem;
}
/*
* static public DefaultComboBoxModel getModel() { return model; }
*/
}