/*
 * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */
import java.awt.*;

public class GUIWindow extends Frame {
    boolean inAnApplet = true;
    final String FILEDIALOGMENUITEM = "File dialog...";

    public GUIWindow() {
    	Panel bottomPanel = new Panel();
    	Panel centerPanel = new Panel();

    	MenuBar mb = new MenuBar();
	    Menu m = new Menu("Menu");
    	m.add(new MenuItem("Menu item 1"));
	    m.add(new CheckboxMenuItem("Menu item 2"));
    	m.add(new MenuItem("Menu item 3"));
	    m.add(new MenuItem("-"));
    	m.add(new MenuItem(FILEDIALOGMENUITEM));
    	mb.add(m);
	    setMenuBar(mb);

    	//Add small things at the bottom.
    	bottomPanel.add(new TextField("TextField"));
    	bottomPanel.add(new Button("Button"));
    	bottomPanel.add(new Checkbox("Checkbox"));
    	Choice c = new Choice();
    	c.addItem("Choice Item 1");
    	c.addItem("Choice Item 2");
    	c.addItem("Choice Item 3");
    	bottomPanel.add(c);

    	//Add big things to the center area.
    	centerPanel.setLayout(new GridLayout(1,2));
    	//Put a canvas in the left column.
    	centerPanel.add(new MyCanvas());
	    //Put a label and a text area in the right column.
    	Panel p = new Panel();
    	p.setLayout(new BorderLayout());
    	p.add("North", new Label("Label", Label.CENTER));
    	p.add("Center", new TextArea("TextArea", 5, 20));
    	centerPanel.add(p);

	    setLayout(new BorderLayout());
    	add("South", bottomPanel);
    	add("Center", centerPanel);

	    //Put a list in the window.
    	List l = new List(3, false);
    	l.addItem("List item 1");
    	l.addItem("List item 2");
    	l.addItem("List item 3");
    	l.addItem("List item 4");
    	l.addItem("List item 5");
    	l.addItem("List item 6");
    	l.addItem("List item 7");
    	l.addItem("List item 8");
    	l.addItem("List item 9");
    	l.addItem("List item 10");
    	add("East", l); 
    } // End GUIWindow()

    public boolean handleEvent(Event evt) {
	    if ((evt.id == Event.ACTION_EVENT) && (evt.target instanceof MenuItem)) {
    	    String label = (String)evt.arg;
	        if (label.equals(FILEDIALOGMENUITEM)) {
		        FileDialog fd = new FileDialog(this, "FileDialog");
        		fd.show();
	        }
	    return true;
    	} 
        if (evt.id == Event.WINDOW_ICONIFY) {//DOESN'T seem to be necessary
            hide();
            return true;
        }
        if (evt.id == Event.WINDOW_DESTROY) {
            if (inAnApplet) {
                dispose();
                return true;
            } else {
                System.exit(0);
            }
        }
        return super.handleEvent(evt);
    }

    public static void main(String args[]) {
	GUIWindow window = new GUIWindow();
        window.inAnApplet = false;

        //window.setTitle(window.getClass().getName() + " Application");
        window.setTitle("The AWT Components");
        window.pack();
        window.show();
    }

}

class MyCanvas extends Canvas {

    public void paint(Graphics g) {
	int w = size().width;
	int h = size().height;
	g.drawRect(0, 0, w - 1, h - 1);
	g.drawString("Canvas", (w - g.getFontMetrics().stringWidth("Canvas"))/2,
		      10);

	g.setFont(new Font("Helvetica", Font.PLAIN, 8));
	g.drawLine(10,10, 100,100);
	g.fillRect(9,9,3,3);
	g.drawString("(10,10)", 13, 10);
	g.fillRect(49,49,3,3);
	g.drawString("(50,50)", 53, 50);
	g.fillRect(99,99,3,3);
	g.drawString("(100,100)", 103, 100);
    }

    public Dimension minimumSize() {
	return new Dimension(150,130);
    }

    public Dimension preferredSize() {
	return minimumSize();
    }
}
