//===========================================================
//  PROJECT:  Graphing Calculator
//  FILE:  Calculator.java
//  PURPOSE:  Design a graphing calculator using layouts          
//  VERSION:  1.1
//  TARGET:  Java v1.1 and above
//  UPDATE HISTORY:  1.1 10/8/00
//  PROGRAMMER:  Philip N. Geissler                            
//===========================================================

//------------------------------- NOTES ---------------------
/*
  Design a graphing calculator using the Grid Layout and the 
  Border Layout.  The Caluclator will incorporate the use of
  four panels and one canvas:
    
    MainPanel            (all the controls)
    ScreenCanvas         (for drawing the display screen)
    CurserButtonsPanel   (five buttons for the curser keys)
    FunctionButtonsPanel (five buttons for the function keys)
    MainButtonsPanel     (forty buttons for the main keys)
*/
//------------------------------ IMPORTS --------------------
import java.awt.*;
import java.applet.*;

//========================== Calculator CLASS ===============
/*
   The calculater is 
 */
public class Calculator extends Applet 
{
  MainPanel myMain = new MainPanel();
    
    public void init() 
    {
      setBackground(Color.black);
      setLayout(new BorderLayout());
      
      add(BorderLayout.NORTH, myMain);
    }
 }

//======================== MainPanel CLASS ==================
/* 
   2 parts:
    ScreenDisplayCanvas  (for drawing the display screen)
    MainButtonsPanel     (fifty buttons for the main keys)
 */
class MainPanel extends Panel 
{
  ScreenCanvas  screenDisplay = new ScreenCanvas(); 
  MainButtonsPanel  mainButtons = new MainButtonsPanel();
  
    public MainPanel()
    {
      setBackground(Color.black);
      setForeground(Color.black);
      setLayout(new GridLayout(4,1));
        
      add(screenDisplay);
      add(mainButtons);
    }
}

//======================= ScreenCanvas CLASS ================
class ScreenCanvas extends Canvas
{
    public ScreenCanvas()
    {
      setBackground(Color.black);
    }
   
    public void paint(Graphics g)
    {
      Color myColor = new Color(106,196,249);
      g.setColor(Color.blue);
      g.draw3DRect(0,0,249,228,true);
      g.draw3DRect(1,1,247,226,true);
      g.setColor(Color.gray);
      g.fill3DRect(2,2,245,224,true);
      g.setColor(myColor);
      g.fill3DRect(20,20,208,189,true);
      g.setColor(Color.white);
      g.setFont(new Font("Helvetica", Font.BOLD, 13));
      g.drawString("Phil's Instruments",20,17);
      g.drawString("PI-42",199,17); 
      g.setColor(Color.black);
      g.drawLine(125,25,125,202);
      g.drawLine(25,104,221,104);
      g.setColor(Color.blue);
      g.drawLine(50,75,140,175);
     
    } 
}

//=================== MainButtonsPanel CLASS ================
/*
   This panel consists of 50 buttons in a 5 column/ 10 row 
   Grid Layout
 */
 class MainButtonsPanel extends Panel
 {
   Button  zLeft = new Button("<"),
           zRight = new Button(">"),
           zUp = new Button("^"),
           zDown = new Button("v"),
           zDelete = new Button("DEL"),
           zF1 = new Button("F1"),
           zF2 = new Button("F2"),
           zF3 = new Button("F3"),
           zF4 = new Button("F4"),
           zF5 = new Button("F5"),
           z2nd = new Button("2nd"), 
 	   			 	zStore = new Button("STO"),
 	   			 	zExit = new Button("EXIT"),
 	         zMode = new Button("MODE"),
 	         zInsert = new Button("INS"),
 	         zXvar = new Button("xVAR"),
 	         zGraph = new Button("GRPH"),
 	         zTable = new Button("TBLE"),
 	         zClear = new Button("CLR"),
 	         zPi = new Button("PI"),
 	         
 	         zLog = new Button("LOG"),
 	         zSin = new Button("SIN"),
 	         zCos = new Button("COS"),
 	         zTan = new Button("TAN"),
 	         zExp = new Button("EXP"),
 	         zLn = new Button("LN"),
 	         zEe = new Button("EE"),
           zLpar= new Button("("),
           zRpar = new Button(")"),
           zDiv = new Button("/"),
	 	 	  	  
	 	 	  	  zSqr = new Button("x2"),
           zSeven = new Button("7"),
           zEight = new Button("8"),
           zNine = new Button("9"),
           zMult = new Button("*"),
           zComma = new Button(","),
           zFour = new Button("4"),
           zFive = new Button("5"),
           zSix = new Button("6"),
           zMin = new Button("-"),
           
           zOff = new Button("OFF"),
           zOne = new Button("1"),
           zTwo = new Button("2"),
           zThree = new Button("3"),
           zPlus = new Button("+"),
           zOn = new Button("ON"),
           zZero = new Button("0"),
           zPer = new Button("."),
           zNeg = new Button("(-)"),
           zExe = new Button("EXE");

  public MainButtonsPanel()
    {
        setLayout(new GridLayout(10,5,4,4));
      
         add(zF1);
         add(zF2);
         add(zF3);
         add(zF4);
         add(zF5);
         add(z2nd); 
         add(zStore);
 	   		  add(zExit);
 	      	add(zUp); 
 	      	add(zInsert);
 	      	
 	       add(zTable);
 	      	add(zClear);
 	       	add(zLeft);
         add(zDelete);
 	       add(zRight);
 	      	add(zPi);
 	      	add(zExp);
 	      	add(zMode);
 	      	add(zDown);
 	      	add(zXvar);
 	      	
 	      	add(zGraph);
 	       add(zLog);
 	       add(zSin);
 	       add(zCos);
 	       add(zTan);
 	       add(zLn);
 	       add(zEe);
         add(zLpar);
         add(zRpar);
         add(zDiv);
         
         add(zSqr);
         add(zSeven);
         add(zEight);
         add(zNine);
         add(zMult);
         add(zComma);
         add(zFour);
         add(zFive);
         add(zSix);
         add(zMin);
           
         add(zOff);
         add(zOne);
         add(zTwo);
         add(zThree);
         add(zPlus);
         add(zOn);
         add(zZero);
         add(zPer);
         add(zNeg);
         add(zExe);
    }
}
 	