/*
 * Tabellenkalkulation.java	01.07.99
 *
 *
 * Beilage zum Buch "Software-Entwurf mit UML"
 * von J.Seemann & J. Wolff von Gudenberg,
 * Springer-Verlag, 1999
 * 
 */

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.NumberFormat;

/** <i>Hauptobjekt der Tabellenkalkulation</i> */

public class Tabkalk extends Applet 
{

	// Attribute
	final static Font normFont = new Font("Helvetica", Font.PLAIN, 12);
  final static Font boldFont = new Font("Helvetica", Font.BOLD, 12);
  
  final static Color normBackground = Color.white;
  final static Color highBackground = Color.blue;
  final static Color normForeground = Color.black;
  final static Color highForeground = Color.white;
  
  final static Color markBackground = Color.lightGray;
  final static Color markForeground = Color.black;
  final static Color highmarkBackground = Color.black;
  final static Color highmarkForeground = Color.white;

  // Objektreferenzen
  protected TextField entry;
  protected ScrollPane spane;
	protected Button OK;
  protected Button Cancel;
  static protected Label AnzeigeAdresse;
  static protected ZellenEditor ZellenEditor;
  static protected AnzeigeTabelle AnzeigeTabelle;
  static protected Matrix Clipboard = null;
  

  /** Applet-Methode zur Initialisierung */
  public void init() 
  {
    new FunktionManager();
  	setLayout(new BorderLayout());

  	// Eingabefeld bauen
  	//
    entry = new TextField(40);
    entry.setFont(normFont);
    entry.setBackground(normBackground);
    entry.setForeground(normForeground);
    entry.addActionListener(ZellenEditor);
    ZellenEditor = new ZellenEditor(entry,this);

  	// OK-Button
  	//
    OK = new Button("OK");
    OK.addActionListener(ZellenEditor);

  	// Cancelbutton
  	//
    Cancel = new Button("Cancel");
    Cancel.addActionListener(ZellenEditor);

    // Anzeigelabel für Zellenadresse
  	//
  	AnzeigeAdresse = new Label("         ");
    AnzeigeAdresse.setBackground(normBackground);
    AnzeigeAdresse.setForeground(normForeground);
    AnzeigeAdresse.setFont(boldFont);

  	// Panel bauen
    //
  	Panel p = new Panel();
    p.setBackground(normBackground);
    p.add(OK);
    p.add(Cancel);
    p.add(entry);
    p.add(AnzeigeAdresse);

    // Eingabefeld für Zelleninhalt
    // 
    add(p, "North");

    // Tabelle mit umschliessendem ScrollPane
    // 
    spane = new ScrollPane();
    spane.setSize(300,300);
    AnzeigeTabelle = new AnzeigeTabelle(this, 20, 20);
    spane.add(AnzeigeTabelle);
    add(spane, "Center");
  
    AnzeigeTabelle.requestFocus();
  }

  /** zeigt Adresse der selektierten Zelle in entsprechendem Label an */
  static void anzeigeAdresse(String s)  
  { 
  	 AnzeigeAdresse.setText(s); 
  }
	
	/** Zugriffsfunktion - liefert Objektreferenz */
  static AnzeigeTabelle Tabelle()  { return AnzeigeTabelle; }

	/** Zugriffsfunktion - liefert Objektreferenz */
  static Matrix Clipboard()  { return Clipboard; }
  
	/** setzt Clipboard-Objekt */
	static void Clipboard(Matrix c)  { Clipboard = c; }

	/** Zugriffsfunktion - liefert Objektreferenz */
  static ZellenEditor ZellenEditor()  { return ZellenEditor; }

}