import java.applet.*;
import java.awt.*;
import java.lang.*;
import java.util.*;


class InputMaintenance extends Frame
{
	final static int ADD	= 1;
	final static int RENAME	= 2;
	final static int DELETE	= 3;
	final static int NONE	= 4;

	private Panel	topPanel;
	private Panel	buttons;
	private Machine	machine;
	private Help	help;
	private InputSignal inputSignal;
	private NameInput inputNameInput;

	private Panel   parent;

	private List	liste;

	private String	selectedItem;
	private int		listEntrys;
	private int		lastChoice;

	public InputMaintenance(Panel p, InputSignal inp)
	{
		parent = p;
		inputSignal = inp;

		selectedItem = (String) null;
		lastChoice = NONE;

    	liste = new List(5, false);

    	setLayout(new BorderLayout());
    	topPanel = new Panel();
    	topPanel.setLayout(new BorderLayout(0, 20));
    	add("Center", topPanel);

    	for (int i = 0; i < inputSignal.size(); i++)
    	{
    		System.out.println(" " + i + " - " + ((String) inputSignal.elementAt(i)));
	   		liste.addItem((String) inputSignal.elementAt(i), i);
    	}
    	topPanel.add("Center", liste);

    	listEntrys = liste.countItems();

    	buttons = new Panel();
    	buttons.setLayout(new GridLayout(0,3));
    	buttons.add(new Button("Add"));
    	buttons.add(new Button("Rename"));
    	buttons.add(new Button("Delete"));
    	buttons.add(new Button("OK"));
    	topPanel.add("South", buttons);

    	hide();
	}

    public void setMachine (Machine m, Help h, InputSignal i, NameInput n)
    {
        machine = m;
        help = h;
        inputSignal = i;
        inputNameInput = n;
    } /* end setMachine */


    public void paint (Graphics g)
    {
        int i;
        int number = inputSignal.size();

        for (i = 0; i < Math.min(number, listEntrys); i++)
    		liste.replaceItem((String) inputSignal.elementAt(i), i);

    	System.out.println("inputMaintenance: Elemente in Liste: " + i);

    	if (listEntrys < number)
    	// item has been added
    	{
    		liste.addItem((String) inputSignal.elementAt(i), i);
    	}
    	else if (listEntrys > number)
    	// item has been deleted
    	{
    		liste.delItem(i);
    	}
    	listEntrys = number;

    	//pack();

    } /* end paint */

	public void updateTokens(String newName)
	{
		switch (lastChoice)
		{
			case ADD:
				System.out.println("ADD");
				((Simulator) parent).updateInputActivation(InputActivation.ADD, newName);
				break;
			case RENAME:
				machine.renameToken(selectedItem, newName);
				((Simulator) parent).updateInputActivation(selectedItem, newName);
				parent.repaint();
				System.out.println("RENAME");
				break;
			case DELETE:
				machine.removeToken(selectedItem);
				((Simulator) parent).updateInputActivation(InputActivation.DELETE, selectedItem);
				parent.repaint();
				System.out.println("DELETE");
				break;
			case NONE:
				break;
		}
		lastChoice = NONE;
	}

    public Insets insets()
    {
        return new Insets (30, 20, 30, 20);
	
    } /* end Insets */


    /*
        handle action events (button presses)
    */

    public boolean handleEvent (Event e)
    {
		selectedItem = liste.getSelectedItem();

        if (e.target instanceof Button)
        {
            String label = ((Button)(e.target)).getLabel ();
        	if (label.equals("OK"))
        	{
        		hide();
        		parent.repaint();
        		return true;
        	}
        	else if (label.equals("Add"))
        	{
        		lastChoice = ADD;
        		inputSignal.setMode(inputSignal.ADD);
        		inputNameInput.setTextfield("");
				inputNameInput.show();
				return true;
        	}
        	else if (label.equals("Rename"))
        	{
        		if (selectedItem != (String) null)
        		{
        			lastChoice = RENAME;
	        		inputSignal.select(selectedItem);
    	    		inputSignal.setMode(inputSignal.RENAME);
        			inputNameInput.setTextfield(selectedItem);
        			inputNameInput.show();
        		}
        		return true;
        	}
        	else if (label.equals("Delete"))
        	{
        		if (selectedItem != (String) null)
        		{
        			lastChoice = DELETE;
        			System.out.println("inputMaintenance/Delete - gewählt: " + liste.getSelectedIndex());
        			inputSignal.delete(selectedItem);
        			updateTokens((String) null);
	        		repaint();
	        	}
	        	return true;
        	}
        }
        else
        {
	        if (e.id == Event.WINDOW_DESTROY)
	        {
	            hide();
	            parent.repaint();
	            return true;
	        }
	    }
	    return false;
	}

} /* end InputMaintenance */

