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.*;
import java.net.*;
/**
* KeypadPanel01 is a button container for a simple calculator.
*
*
* The source code.
*
* @version 0.9, 1996.06.04
* @author Sorin Lazareanu
*/
public class KeypadPanel01
extends Panel
implements CalcConstants{
Label fillArea;
Button btnClr, btnCE;
Button btnMC, btnMR, btnMM, btnMP, btnSqrt;
Button btnSgn, btnPrc;
Button btnMul, btnDiv;
Button btnAdd, btnSub;
Button btnEqu;
NumKeypadPanel numKeypad;
CalcCPU cpu;
Dimension lastDimension = new Dimension(0,0);
CalculatorApplet parentApplet = null;
/**
* Constructs a new panel. The original call is from an CalculatorApplet.
* This information is used to send back sound related messages.
* @see CalculatorApplet
*/
public KeypadPanel01(CalcCPU aCPU, CalculatorApplet parentApplet) {
cpu = aCPU;
this.parentApplet = parentApplet;
numKeypad = new NumKeypadPanel(aCPU, parentApplet);
commonInit();
}
/**
* Constructs a new panel.
*/
public KeypadPanel01(CalcCPU aCPU) {
cpu = aCPU;
numKeypad = new NumKeypadPanel(aCPU);
commonInit();
}
private void commonInit() {
fillArea = new Label("");
btnClr = new Button(STR_CLR);
btnCE = new Button(STR_CE);
btnMC = new Button(STR_MC);
btnMR = new Button(STR_MR);
btnMM = new Button(STR_MSUB);
btnMP = new Button(STR_MADD);
btnSqrt = new Button(STR_SQRT);
btnSgn = new Button(STR_SGN);
btnPrc = new Button(STR_PRC);
btnMul = new Button(STR_MUL);
btnDiv = new Button(STR_DIV);
btnAdd = new Button(STR_ADD);
btnSub = new Button(STR_SUB);
btnEqu = new Button(STR_EQU);
}
/**
* Prepares the layout of the panel
*/
public void configure() {
GridBagLayout gridBag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
GridBagLayoutHelper aHelper;
setLayout(gridBag);
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
c.insets = new Insets(2, 2, 2, 2);
aHelper = new GridBagLayoutHelper(this, gridBag, c, 5, 7);
setFont(new Font(HELVETICA, Font.PLAIN, 14));
aHelper.addComponent(0, 0, 3, 1, fillArea);
aHelper.addComponent(3, 0, 1, 1, btnClr);
aHelper.addComponent(4, 0, 1, 1, btnCE);
aHelper.addComponent(0, 1, 1, 1, btnMC);
aHelper.addComponent(1, 1, 1, 1, btnMR);
aHelper.addComponent(2, 1, 1, 1, btnMM);
aHelper.addComponent(3, 1, 1, 1, btnMP);
aHelper.addComponent(4, 1, 1, 1, btnSqrt);
c.insets = new Insets(0, 0, 0, 0);
numKeypad.configure();
aHelper.addComponent(0, 2, 3, 4, numKeypad);
c.insets = new Insets(2, 2, 2, 2);
aHelper.addComponent(3, 2, 1, 1, btnSgn);
aHelper.addComponent(4, 2, 1, 1, btnPrc);
aHelper.addComponent(3, 3, 1, 1, btnMul);
aHelper.addComponent(4, 3, 1, 1, btnDiv);
aHelper.addComponent(3, 4, 1, 1, btnAdd);
aHelper.addComponent(4, 4, 1, 1, btnSub);
aHelper.addComponent(3, 5, 2, 1, btnEqu);
}
/**
* Responds to button click events.
*/
public boolean action(Event evt, Object arg) {
if (evt.target == btnClr) { cpu.c(); return true; };
if (evt.target == btnCE) { cpu.ce(); return true; };
if (evt.target == btnAdd) { op(ADD); cpu.add(); return true; };
if (evt.target == btnSub) { op(SUB); cpu.sub(); return true; };
if (evt.target == btnMul) { op(MUL); cpu.mul(); return true; };
if (evt.target == btnDiv) { op(DIV); cpu.div(); return true; };
if (evt.target == btnPrc) { op(PRC); cpu.prc(); return true; };
if (evt.target == btnMM) { cpu.msub(); return true; };
if (evt.target == btnMP) { cpu.madd(); return true; };
if (evt.target == btnSgn) { cpu.sgn(); return true; };
if (evt.target == btnMR) { cpu.mr(); return true; };
if (evt.target == btnMC) { cpu.mc(); return true; };
if (evt.target == btnSqrt) { cpu.sqrt(); return true; };
if (evt.target == btnEqu) { op(EQU); cpu.equ(); return true; };
return false;
}
private void op(int iOper) {
if (parentApplet != null) {
parentApplet.op(iOper);
}
}
/**
* Dispatches unintercepted key down events to the components.
*/
public boolean dispatchKeyDown(Event evt, int iKey) {
boolean bDispatched;
bDispatched = keyDown(evt, iKey);
if (!bDispatched) bDispatched = numKeypad.dispatchKeyDown(evt, iKey);
return bDispatched;
}
/**
* Dispatches unintercepted key up events to the components.
*/
public boolean dispatchKeyUp(Event evt, int iKey) {
boolean bDispatched;
bDispatched = keyUp(evt, iKey);
if (!bDispatched) bDispatched = numKeypad.dispatchKeyUp(evt, iKey);
return bDispatched;
}
/**
* Responds to key down events.
*/
public boolean keyDown(Event evt, int iKey) {
if (evt.key == CALC_KEY_CLR) { cpu.c(); return true; };
if (evt.key == CALC_KEY_CE) { cpu.ce(); return true; };
if (evt.key == CALC_KEY_ADD) { op(ADD); cpu.add(); return true; };
if (evt.key == CALC_KEY_SUB) { op(SUB); cpu.sub(); return true; };
if (evt.key == CALC_KEY_MUL) { op(MUL); cpu.mul(); return true; };
if (evt.key == CALC_KEY_DIV) { op(DIV); cpu.div(); return true; };
if (evt.key == CALC_KEY_PRC) { op(PRC); cpu.prc(); return true; };
if (evt.key == CALC_KEY_EQU) { op(EQU); cpu.equ(); return true; };
if (evt.key == CALC_KEY_MSUB) { cpu.msub(); return true; };
if (evt.key == CALC_KEY_MADD) { cpu.madd(); return true; };
if (evt.key == CALC_KEY_MR) { cpu.mr(); return true; };
if (evt.key == CALC_KEY_MC) { cpu.mc(); return true; };
return false;
}
/**
* Paints on a Graphics object.
*/
public void paint(Graphics aGraphics) {
if (lastDimension.width != size().width || lastDimension.height != size().height) {
int iFontHeight = Math.min( size().height / 12, size().width / 10 );
Font stdFont = new Font(HELVETICA, Font.PLAIN, iFontHeight);
btnClr.setFont(stdFont);
btnCE.setFont(stdFont);
btnMC.setFont(stdFont);
btnMR.setFont(stdFont);
btnMM.setFont(stdFont);
btnMP.setFont(stdFont);
btnSqrt.setFont(stdFont);
btnSgn.setFont(stdFont);
btnPrc.setFont(stdFont);
btnMul.setFont(stdFont);
btnDiv.setFont(stdFont);
btnAdd.setFont(stdFont);
btnSub.setFont(stdFont);
btnEqu.setFont(stdFont);
lastDimension = size();
}
super.paint(aGraphics);
}
}