import java.awt.*;
import java.applet.*;

import myutil.*;

public class Maze2 extends Applet
{	
	Label NLabel;
	TextField NText;
	Button OpenButton;
	MazeFrame mf;

        public static void main(String[] args) {
                new AppletFrame(new Maze2(), 150, 100);
        }

	public void init()
	{	
	    setBackground(Color.white);

	    NLabel = new Label("n: ");
	    NText  = new TextField("10", 5);
	    OpenButton = new Button("Open Maze Frame");

	    // GridPanel gp = new GridPanel("Courier", 12);
	    GridPanel gp = new GridPanel();
	    gp.add(NLabel,1,1); gp.add(NText, 2,1);
	    gp.add(OpenButton, 1,2,3,1);
	    add(gp);
	}

        public boolean action(Event evt, Object arg)
        {
                if (arg.equals("Open Maze Frame")) {
			int n = SL.atoi(NText.getText());
			mf = new MazeFrame(n);
			mf.show();
		} else {
                        return super.action(evt, arg);
                }
                return true;
        }

        public boolean handleEvent(Event evt)
        {
                if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
                return super.handleEvent(evt);
        }
}

class MazeFrame extends Frame
{
	int n;

	MazePanel mp;

	public MazeFrame(int n)
	{	
	    this.n = n;

	    mp = new MazePanel(n);

	    Button GenButton   = new Button("Generate");
	    Button SolveButton = new Button("Solve");
	    Button ExitButton  = new Button("Exit");

	    Panel ButtonPanel = new Panel();
	    ButtonPanel.setFont(new Font("Helvetica",Font.BOLD,12));
	    ButtonPanel.add(GenButton);
	    ButtonPanel.add(SolveButton);
	    ButtonPanel.add(ExitButton);

	    setLayout(new BorderLayout(10,10));
	    add("North", ButtonPanel);
	    add("Center", mp);

	    resize(30*n, 30*n);
	}

        public boolean action(Event evt, Object arg)
        {
            if (arg.equals("Exit")) {
		dispose();
            } else if (arg.equals("Generate")) {
		mp.genMaze();
            } else if (arg.equals("Solve")) {
		mp.solveMaze();
	    } else {
		return super.action(evt, arg);
            }
            return true;
        }
}

class MazePanel extends GridPanel
{
	public MazePanel(int n)
	{
	}

        public void genMaze()
        {
            GL.color(Color.black);
            GL.drawString("genMaze", 2,2,"CENTER","CENTER");
            try { Thread.sleep(1000); } catch(InterruptedException ie){};
            paint(getGraphics());
        }
    
        public void solveMaze()
        {
            GL.color(Color.black);
            GL.drawString("solveMaze now", 1,1,"LEFT","CENTER");
            try { Thread.sleep(1000); } catch(InterruptedException ie){};
            paint(getGraphics());
        }
    
        public void paint (Graphics g)
        {
            GL.ginit(getGraphics(), size().width, size().height, this, false);
            GL.ortho2(0, 4, 0, 4);
    
            GL.color(Color.gray);
            GL.clear();
        }
}
