import javax.swing.JPanel;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class SimObjectChooser extends JPanel {
	// OVERVIEW: SimObjectChooser manipulates the interface for selecting objects
	//    and maintains state for the current object type.  
	//
	// When clicking on a spot on the grid, it will be set to this class.
	// Rep:

	private Class selectedClass; 
	private JComboBox combolist;
	private String[] classes;

	SimObjectChooser ()
	// EFFECT: Initializes this to a SimObjectChooser with no classes.
	{
	selectedClass = null;
	classes = null;
	combolist = new JComboBox ();

	combolist.addActionListener 
		(new ActionListener () {
			public void actionPerformed (ActionEvent e) {
			JComboBox cb = (JComboBox) e.getSource ();
			String classname = (String) cb.getSelectedItem ();
			setSelectedClass (classname);
			}
		}
		 );

	add (combolist);
	}

	public void addClass (String className) throws ClassNotFoundException
		// MODIFIES: this, the display panel
	// EFFECTS: If className is the name of a loadable Java class, sets the current object
		//    to the type loaded by className. If className is not available, throws ClassNotFoundException. 
	{
	Class newClass = Class.forName (className); // throws ClassNotFoundException if not found
	
	String [] oldclasses = classes;

	if (oldclasses == null) {
		classes = new String [1];
		selectedClass = newClass;
	} else {
		classes = new String [oldclasses.length + 1];
	}

	if (oldclasses != null) {
		for (int i = 0; i < oldclasses.length; i++) {
		classes[i] = oldclasses[i];
		}
	}

	classes[classes.length - 1] = className;
	combolist.addItem (className);
	}

	public Class getSelectedClass()
	// EFFECTS: Returns the currently selected class (possibly null).
	{
	return selectedClass;
	}

	public void setSelectedClass (String classname)
	// MODIFIES: this
	// EFFECTS: Sets the currently selected class to the class associated
	//    with the button press (described by the ActionEvent).
	{
	try {
		Class newClass = Class.forName (classname);
		selectedClass = newClass;
	} catch (java.lang.ClassNotFoundException ex) {
		System.err.println ("BUG: Selected class is not available: " + classname);
		ex.printStackTrace();
	}
	}

}