
/*
 * Java Rubik's Cube
 * -----------------
 *
 * Copyright 1996, Song Li  
 * URL: www.cs.umbc.edu/~sli2
 *
 * 
 * You can use the code for any nonprofittable use. But remember to mention
 * the authors' names in your revised program. You are also encouraged to
 * improve the program or give your comments and bug reports. If there are
 * further questions, please contact me and I'll be glad to help. My E-Mail
 * address is: sli2@gl.umbc.edu.
 *
 */


import java.applet.Applet;
import java.awt.*;



public class CubeApp extends Applet {

    private CubePanel   CubeWin ;
    
    private Button      NewButton ;
    private Button      ScrambleButton ;
    private Button      SolveButton ;
    private Button      AboutButton ;
    private Button      UndoButton ;
    private Button      RedoButton ;
    private Checkbox    SoundCheckbox ;
    private Label       StepLabel ;
    private TextField   StepText ;



    public void init () {
        resize(size().width  <= 420 ? 420 : size().width,
               size().height <= 200 ? 200 : size().height);
      

        setLayout (null);
        Panel control = new Panel ();
        control.setLayout (null) ;
        add (control) ;
        control.reshape (0, 0, 200, size().height) ;

        NewButton      = new Button ("New Game") ;
        ScrambleButton = new Button ("Scramble") ;
        SolveButton    = new Button ("Solve") ;
        AboutButton    = new Button ("About") ;
        UndoButton     = new Button ("Undo") ;
        RedoButton     = new Button ("Redo") ;
        SoundCheckbox  = new Checkbox ("Sound") ;
        StepLabel      = new Label ("Step") ;
        StepText       = new TextField ("0") ;
        StepText.setEditable (false) ;
        SoundCheckbox.setState (true) ;

        add (NewButton) ;
        add (ScrambleButton) ;
        add (SolveButton) ;
        add (AboutButton) ;
        add (UndoButton) ;
        add (RedoButton) ;
        add (SoundCheckbox) ;
        add (StepLabel) ;
        add (StepText) ;

        NewButton.reshape      (10,  10, 80, 25) ;  AboutButton.reshape    (110,  10, 80, 25) ;
        ScrambleButton.reshape (10,  40, 80, 25) ;  SolveButton.reshape    (110,  40, 80, 25) ;
        UndoButton.reshape     (10,  70, 80, 25) ;  RedoButton.reshape     (110,  70, 80, 25) ;
        StepLabel.reshape      (10, 160, 40, 25) ;  SoundCheckbox.reshape  (110, 160, 80, 25) ;
        StepText.reshape       (40, 158, 40, 29) ;  

        CubeWin = new CubePanel (StepText) ;
        CubeWin.setLayout (null) ;
        add (CubeWin) ;
        CubeWin.reshape (220, 0, size().width-220, size().height) ;
        CubeWin.DefineBound () ;

        CubeWin.BadSound  = getAudioClip (getCodeBase (), "illegal.au");
        CubeWin.SpinSound = getAudioClip (getCodeBase (), "spin.au");
    }


    public void start () {CubeWin.Start () ;}
    public void stop  () {CubeWin.Stop  () ;}


    public synchronized boolean handleEvent (Event event) {
        if (event.id == Event.ACTION_EVENT)
            if (event.target == AboutButton) {
                CubeAbout about = new CubeAbout () ;
                about.show () ;
            } else
                CubeWin.CommandAction (event) ;
        return true ;
    }


}



