/*
 *  CPS108 Spring 1998
 *  Boggle: BoggleGUI.java
 *  Brian Fan and Geoff Berry
 */

package boggle;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

/**
 *  BoggleGUI - a GUI for boggle
 */

public class BoggleGUI extends Frame implements ActionListener, TextListener
{
    private String myName = "";
    private Vector myGuesses = new Vector();
    private TextField myInput = new TextField("", 20);
    private BoggleTime myTime = new BoggleTime();
    private BoggleBoard myBoard;

    /**
     *  constructor
     */
    public BoggleGUI(String name)
    {
	myName = name;
	setTitle("Boggle GUI");
	setSize(400, 100);
	setup();
	setVisible(true);
    }

    public void setBoard(char[][] board)
    {
	myBoard = new BoggleBoard(board);
    }

    public void tick()
    {
	myTime.tick();
    }

    public String[] getGuesses()
    {
	if (myGuesses.size() > 0)
	{
	    String[] output = new String[myGuesses.size()];
	    myGuesses.copyInto(output);
	    return output;
	}
	return null;
    }

    public void actionPerformed(ActionEvent evt)
    {
	if (evt.getSource() instanceof MenuItem)
	{
	    MenuItem temp = (MenuItem)evt.getSource();
	    String arg = temp.getLabel();
	    if (arg.equals("Quit"))
	    {
		System.exit(0);
	    }
	}
    }

    public void textValueChanged(TextEvent evt)
    {
	String input = myInput.getText();
	if (evt.getSource() instanceof TextField)
	{
	    TextField temp = (TextField)evt.getSource();
	    String arg = temp.getName();
	    if (arg.equals("Input"))
	    {
		if (input.length() > 0 &&
		    input.charAt(input.length() - 1) == ' ')
		{
		    input.trim();
		    myGuesses.addElement(input);
		    myInput.setText("");
		}
	    }
	}
    }

/*
 *  Private Functions
 */

    /**
     *  set up text fields and menus and such
     */
    private void setup()
    {
	// setup menubar
	MenuBar mb = new MenuBar();
	Menu fileMenu = new Menu("File");
	MenuItem quit = new MenuItem("Quit");
	quit.addActionListener(this);
	fileMenu.add(quit);
	mb.add(fileMenu);
	setMenuBar(mb);

	// setup text fields
	Panel pan = new Panel();
	myInput.setName("Input");
	myInput.addTextListener(this);
	pan.add(myInput);
	add(pan);
    }
}

class BoggleBoard extends Frame
{
    public BoggleBoard(char[][] board)
    {
	int i, j;
	Panel pan = new Panel();
	pan.setLayout(new GridLayout(4, 4));
	for (i=0; i<4; i++)
	{
	    for (j=0; j<4; j++)
	    {
		String temp = "";
		temp += board[i][j];
		pan.add( new Label(temp) );
	    }
	}
	setTitle("Boggle Board");
	setSize(200, 200);
	add(pan);
	setVisible(true);
    }
}

class BoggleTime extends Frame
{
    private int myTime = 0;
    private TextField myText = new TextField("", 3);


    public BoggleTime()
    {
	myText.setEditable(false);
	myText.setText("0");
	Panel pan = new Panel();
	pan.add(myText);
	add(pan);

	setTitle("BoggleTime");
	setSize(75, 75);
	add(myText);
	setVisible(true);
    }

    public void tick()
    {
	myTime++;
	myText.setText(Integer.toString(myTime));
    }
}

