
package polarDust.calculator;

/*
 * Copyright (c) 1996 Sorin Lazareanu, 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.
 *
 */

import java.awt.*;

/**
 * CalculatorPanel02 is the panel wrapper for a simple calculator.
 * It embeds all the necesary components to give a total functionality to
 * the calculator.
 *
 * <br><br><a href=../source/polarDust/calculator/CalculatorPanel02.java>
 * The source code.</a>
 *
 * @version 0.9, 1996.06.04
 * @author Sorin Lazareanu
 */

public class CalculatorPanel02
	extends CalculatorPanel
	implements CalcConstants {
	PrinterPanel01 printer;
	NumDisplayPanel01 display;
	Processor01 cpu;
	KeypadPanel01 keypad;
	LogoPanel02 logo;

	/**
	* Constructs a new panel.
	*/
	public CalculatorPanel02() {
		super();

		printer = new PrinterPanel01();
		display = new NumDisplayPanel01(printer);
		cpu = new Processor01((CalcDisplay)display);
		keypad = new KeypadPanel01((CalcCPU)cpu);
		logo = new LogoPanel02();
		configure();
	}

	/**
	* Constructs a new panel. 
	* @param parentApplet the original call is from an CalculatorApplet. This information is used to send back sound related messages.
	* @see CalculatorApplet
	*/
	public CalculatorPanel02(CalculatorApplet parentApplet) {
		super();

		printer = new PrinterPanel01();
		display = new NumDisplayPanel01(printer);
		cpu = new Processor01((CalcDisplay)display);
		keypad = new KeypadPanel01((CalcCPU)cpu, parentApplet);
		logo = new LogoPanel02();
		configure();
	}

	/**
	* Prepares the layout of the panel
	*/
	public void configure() {
		GridBagLayout gridBag = new GridBagLayout();
		GridBagConstraints c = new GridBagConstraints();
		GridBagLayoutHelper aHelper;

		printer.configure();
		display.configure();
		logo.configure();
		keypad.configure();

		setLayout(gridBag);
		setFont(new Font(HELVETICA, Font.PLAIN, 14));
		c.fill = GridBagConstraints.BOTH;
		c.anchor = GridBagConstraints.CENTER;
		c.insets = new Insets(2, 2, 2, 2);
		aHelper = new GridBagLayoutHelper(this, gridBag, c, 10, 15);

		aHelper.addComponent(0, 0, 5, 15, printer);
		display.configure();

		aHelper.addComponent(5, 0, 5, 2, display);
		display.configure();

		aHelper.addComponent(5, 2, 5, 12, keypad);
		keypad.configure();

		aHelper.addComponent(5, 14, 5, 1, logo);
		logo.configure();

	}

	/**
	* Sends key events to the keypad panel.
	*/
	public boolean keyDown(Event evt, int iKey) {
		return keypad.keyDown(evt, iKey);
	}

	/**
	* Sends key events to the keypad panel.
	*/
	public boolean keyUp(Event evt, int iKey) {
		return keypad.keyUp(evt, iKey);
	}

	/**
	* Stops the threads in the logo and display panels.
	*/
	public void stop() {
		logo.stop();
		display.stop();
	}

	public String toString() {
		return "CalculatorPanel02 extends " + super.toString();
	}
}


