home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.Graphics;
-
- public class SpreadSheet extends Applet {
- String title;
- Font titleFont;
- Color cellColor;
- Color inputColor;
- int cellWidth = 100;
- int cellHeight = 15;
- int titleHeight = 15;
- int rowLabelWidth = 15;
- Font inputFont;
- boolean isStopped = false;
- boolean fullUpdate = true;
- int rows;
- int columns;
- int currentKey = -1;
- int selectedRow = -1;
- int selectedColumn = -1;
- SpreadSheetInput inputArea;
- Cell[][] cells;
- Cell current;
-
- public synchronized void init() {
- this.cellColor = Color.white;
- this.inputColor = new Color(100, 100, 225);
- this.inputFont = new Font("Courier", 0, 10);
- this.titleFont = new Font("Courier", 1, 12);
- this.title = ((Applet)this).getParameter("title");
- if (this.title == null) {
- this.title = "Spreadsheet";
- }
-
- String var1 = ((Applet)this).getParameter("rows");
- if (var1 == null) {
- this.rows = 9;
- } else {
- this.rows = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("columns");
- if (var1 == null) {
- this.columns = 5;
- } else {
- this.columns = Integer.parseInt(var1);
- }
-
- this.cells = new Cell[this.rows][this.columns];
- char[] var2 = new char[1];
-
- for(int var3 = 0; var3 < this.rows; ++var3) {
- for(int var4 = 0; var4 < this.columns; ++var4) {
- this.cells[var3][var4] = new Cell(this, Color.lightGray, Color.black, this.cellColor, this.cellWidth - 2, this.cellHeight - 2);
- var2[0] = (char)(97 + var4);
- var1 = ((Applet)this).getParameter("" + new String(var2) + (var3 + 1));
- if (var1 != null) {
- this.cells[var3][var4].setUnparsedValue(var1);
- }
- }
- }
-
- Dimension var7 = ((Component)this).size();
- this.inputArea = new SpreadSheetInput((String)null, this, var7.width - 2, this.cellHeight - 1, this.inputColor, Color.white);
- ((Applet)this).resize(this.columns * this.cellWidth + this.rowLabelWidth, (this.rows + 3) * this.cellHeight + this.titleHeight);
- }
-
- public void setCurrentValue(float var1) {
- if (this.selectedRow != -1 && this.selectedColumn != -1) {
- this.cells[this.selectedRow][this.selectedColumn].setValue(var1);
- ((Component)this).repaint();
- }
- }
-
- public void stop() {
- this.isStopped = true;
- }
-
- public void start() {
- this.isStopped = false;
- }
-
- public void destroy() {
- for(int var1 = 0; var1 < this.rows; ++var1) {
- for(int var2 = 0; var2 < this.columns; ++var2) {
- if (this.cells[var1][var2].type == 2) {
- this.cells[var1][var2].updaterThread.stop();
- }
- }
- }
-
- }
-
- public void setCurrentValue(int var1, String var2) {
- if (this.selectedRow != -1 && this.selectedColumn != -1) {
- this.cells[this.selectedRow][this.selectedColumn].setValue(var1, var2);
- ((Component)this).repaint();
- }
- }
-
- public void update(Graphics var1) {
- if (this.fullUpdate) {
- this.paint(var1);
- this.fullUpdate = false;
- } else {
- var1.setFont(this.titleFont);
-
- for(int var4 = 0; var4 < this.rows; ++var4) {
- for(int var5 = 0; var5 < this.columns; ++var5) {
- if (this.cells[var4][var5].needRedisplay) {
- int var2 = var5 * this.cellWidth + 2 + this.rowLabelWidth;
- int var3 = (var4 + 1) * this.cellHeight + 2 + this.titleHeight;
- this.cells[var4][var5].paint(var1, var2, var3);
- }
- }
- }
-
- }
- }
-
- public void recalculate() {
- for(int var1 = 0; var1 < this.rows; ++var1) {
- for(int var2 = 0; var2 < this.columns; ++var2) {
- if (this.cells[var1][var2] != null && this.cells[var1][var2].type == 3) {
- this.cells[var1][var2].setRawValue(this.evaluateFormula(this.cells[var1][var2].parseRoot));
- this.cells[var1][var2].needRedisplay = true;
- }
- }
- }
-
- ((Component)this).repaint();
- }
-
- public float evaluateFormula(Node var1) {
- float var2 = 0.0F;
- if (var1 == null) {
- return var2;
- } else {
- switch (var1.type) {
- case 0:
- var2 = this.evaluateFormula(var1.left);
- switch (var1.op) {
- case '*':
- var2 *= this.evaluateFormula(var1.right);
- return var2;
- case '+':
- var2 += this.evaluateFormula(var1.right);
- return var2;
- case ',':
- case '.':
- default:
- return var2;
- case '-':
- var2 -= this.evaluateFormula(var1.right);
- return var2;
- case '/':
- var2 /= this.evaluateFormula(var1.right);
- return var2;
- }
- case 1:
- return var1.value;
- case 2:
- if (var1 != null && this.cells[var1.row][var1.column] != null) {
- return this.cells[var1.row][var1.column].value;
- }
- }
-
- return var2;
- }
- }
-
- public synchronized void paint(Graphics var1) {
- char[] var6 = new char[1];
- Dimension var7 = ((Component)this).size();
- var1.setFont(this.titleFont);
- int var2 = var1.getFontMetrics().stringWidth(this.title);
- var1.drawString(this.title == null ? "Spreadsheet" : this.title, (var7.width - var2) / 2, 12);
- var1.setColor(this.inputColor);
- var1.fillRect(0, this.cellHeight, var7.width, this.cellHeight);
- var1.setFont(this.titleFont);
-
- for(int var8 = 0; var8 < this.rows + 1; ++var8) {
- int var5 = (var8 + 2) * this.cellHeight;
- var1.setColor(((Component)this).getBackground());
- var1.draw3DRect(0, var5, var7.width, 2, true);
- if (var8 < this.rows) {
- var1.setColor(Color.red);
- var1.drawString("" + (var8 + 1), 2, var5 + 12);
- }
- }
-
- var1.setColor(Color.red);
- int var12 = (this.rows + 3) * this.cellHeight + this.cellHeight / 2;
-
- for(int var9 = 0; var9 < this.columns; ++var9) {
- int var4 = var9 * this.cellWidth;
- var1.setColor(((Component)this).getBackground());
- var1.draw3DRect(var4 + this.rowLabelWidth, 2 * this.cellHeight, 1, var7.height, true);
- if (var9 < this.columns) {
- var1.setColor(Color.red);
- var6[0] = (char)(65 + var9);
- var1.drawString(new String(var6), var4 + this.rowLabelWidth + this.cellWidth / 2, var12);
- }
- }
-
- for(int var10 = 0; var10 < this.rows; ++var10) {
- for(int var3 = 0; var3 < this.columns; ++var3) {
- int var11 = var3 * this.cellWidth + 2 + this.rowLabelWidth;
- var12 = (var10 + 1) * this.cellHeight + 2 + this.titleHeight;
- if (this.cells[var10][var3] != null) {
- this.cells[var10][var3].paint(var1, var11, var12);
- }
- }
- }
-
- var1.setColor(((Component)this).getBackground());
- var1.draw3DRect(0, this.titleHeight, var7.width, var7.height - this.titleHeight, false);
- this.inputArea.paint(var1, 1, this.titleHeight + 1);
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- if (var3 < this.titleHeight + this.cellHeight) {
- this.selectedRow = -1;
- if (var3 <= this.titleHeight && this.current != null) {
- this.current.deselect();
- this.current = null;
- }
-
- return true;
- } else if (var2 < this.rowLabelWidth) {
- this.selectedRow = -1;
- if (this.current != null) {
- this.current.deselect();
- this.current = null;
- }
-
- return true;
- } else {
- this.selectedRow = (var3 - this.cellHeight - this.titleHeight) / this.cellHeight;
- this.selectedColumn = (var2 - this.rowLabelWidth) / this.cellWidth;
- if (this.selectedRow <= this.rows && this.selectedColumn < this.columns) {
- if (this.selectedRow >= this.rows) {
- this.selectedRow = -1;
- if (this.current != null) {
- this.current.deselect();
- this.current = null;
- }
-
- return true;
- }
-
- Cell var4 = this.cells[this.selectedRow][this.selectedColumn];
- this.inputArea.setText(new String(var4.getPrintString()));
- if (this.current != null) {
- this.current.deselect();
- }
-
- this.current = var4;
- this.current.select();
- ((Component)this).requestFocus();
- this.fullUpdate = true;
- ((Component)this).repaint();
- } else {
- this.selectedRow = -1;
- if (this.current != null) {
- this.current.deselect();
- this.current = null;
- }
- }
-
- return true;
- }
- }
-
- public boolean keyDown(Event var1, int var2) {
- this.fullUpdate = true;
- this.inputArea.keyDown(var2);
- return true;
- }
- }
-