import java.awt.*;
import java.awt.event.*;

public class GUI extends Panel implements ActionListener
{
    public GUI( )
    {
        makeTheObjects( );
        doTheLayout( );
        theDrawButton.addActionListener( this );
    }

           // Make all the objects
    private void makeTheObjects( )
    {
        theCanvas = new GUICanvas( );
        theCanvas.setBackground( Color.white );
        theCanvas.setSize( 100, 100 );

        theShape = new Choice( );
        theShape.add( "Circle" );
        theShape.add( "Square" );

        theColor = new List( 2, false );
        theColor.add( "red" );
        theColor.add( "blue" );
        theColor.select( 0 ); // make red default

        theXCoor = new TextField( 5 );
        theYCoor = new TextField( 5 );

        CheckboxGroup theSize = new CheckboxGroup( );
        smallPic = new Checkbox( "Small", theSize, false );
        mediumPic = new Checkbox( "Medium", theSize, true );
        largePic = new Checkbox( "Large", theSize, false );

        theFillBox = new Checkbox( "Fill" );
        theFillBox.setState( false );

        theDrawButton = new Button( "Draw" );

        theMessage = new TextField( 25 );
        theMessage.setEditable( false );
    }

        // Layout all the objects
    private void doTheLayout( )
    {
        Panel topHalf    = new Panel( );
        Panel bottomHalf = new Panel( );

            // Layout the top half
        topHalf.setLayout( new FlowLayout( ) );
        topHalf.add( theCanvas );
        topHalf.add( new Label( "Shape" ) );
        topHalf.add( theShape );
        topHalf.add( theColor );
        topHalf.add( new Label( "X coor" ) );
        topHalf.add( theXCoor );
        topHalf.add( new Label( "Y coor" ) );
        topHalf.add( theYCoor );

            // Layout the bottom half
        bottomHalf.setLayout( new FlowLayout( ) );
        bottomHalf.add( smallPic );
        bottomHalf.add( mediumPic );
        bottomHalf.add( largePic );
        bottomHalf.add( theFillBox );
        bottomHalf.add( theDrawButton );
        bottomHalf.add( theMessage );

            // Now layout GUI
        setLayout( new BorderLayout( ) );
        add( topHalf, "North" );
        add( bottomHalf, "South" );
    }

    public void actionPerformed( ActionEvent evt )
    {
        try
        {
            theCanvas.setParams(
                theShape.getSelectedItem( ),
                theColor.getSelectedItem( ),
                Integer.parseInt( theXCoor.getText( ) ),
                Integer.parseInt( theYCoor.getText( ) ),
                smallPic.getState( ) ? 0 :
                         mediumPic.getState( ) ? 1 : 2,

                theFillBox.getState( ) );
            theMessage.setText( "" );
        }
        catch( Exception e )
             { theMessage.setText( "Incomplete input" ); }
    }

    private GUICanvas theCanvas;
    private Choice    theShape;
    private List      theColor;
    private TextField theXCoor;
    private TextField theYCoor;
    private Checkbox  smallPic;
    private Checkbox  mediumPic;
    private Checkbox  largePic;
    private Checkbox  theFillBox;
    private Button    theDrawButton;
    private TextField theMessage;
}