
import java.awt.*;
import java.applet.Applet;
import java.util.Vector;
import java.io.*;

import GCanvas;

public class Delaunay extends Applet
{
  private Vector points = new Vector ();
  private Vector trigs = new Vector ();
  private TextArea taHelp = new TextArea (
"Welcome to the Delaunay triangulation applet!\n" +
"(Author: Denis Constales, dcons@world.std.com.)\n" +
"\n" +
"- Click to create a new point or to move an existing one;\n" +
"- ALT-click deletes an existing point;\n" +
"- SHIFT-click zooms in, ALT-SHIFT-click zooms out;\n" +
"- CTRL-click moves the drawing.");
  private Button btHelp = new Button ("Help");
  private Button btBack = new Button ("Back to editing");
  private Button btClear = new Button ("Clear");
  private Checkbox ckCircles = new Checkbox("Circles", null, false);
  private Checkbox ckVoronoi = new Checkbox("Voronoi", null, false);
  private Label lbMag = new Label ("Magnification by 1");
  private GCanvas cvas = new GCanvas (points, trigs, lbMag);
  private CardLayout clt = new CardLayout();
  private Image theim;
  
  public boolean action (Event evt, Object what)
  {
    if (evt.target == btClear)
      {
	cvas.clear ();
	return true;
      }
    else if (evt.target == btHelp)
      {
        clt.last(this);
	return true;
      }
    else if (evt.target == btBack)
      {
        clt.first(this);
        return true;
      }
    else if (evt.target == ckCircles)
      {
        cvas.paintCircles = ((Boolean)what).booleanValue();
        cvas.repaint();
        return true;
      }
    else if (evt.target == ckVoronoi)
      {
        cvas.paintVoronoi = ((Boolean)what).booleanValue();
        cvas.repaint();
        return true;
      }
    else
      return super.action(evt, what);
  }
  public void init ()
  { 
    Panel pseudoMenu = new Panel ();
    pseudoMenu.setLayout (new FlowLayout (FlowLayout.LEFT));
    pseudoMenu.add (btHelp);
    pseudoMenu.add (btClear);
    pseudoMenu.add (ckCircles);
    pseudoMenu.add (ckVoronoi);
    
    Panel card = new Panel ();
    card.setLayout(new BorderLayout());
    card.add("North", pseudoMenu);
    card.add("South", lbMag);
    card.add("Center", cvas);
    setLayout(clt);
    add("Main", card);
    
    pseudoMenu = new Panel ();
    pseudoMenu.setLayout (new FlowLayout (FlowLayout.LEFT));
    pseudoMenu.add (btBack);
    
    card = new Panel ();
    card.setLayout(new BorderLayout());
    card.add("North", pseudoMenu);
    taHelp.setEditable (false);
    card.add("Center", taHelp);
    add("Help", card);
    
    clt.first(this);
    resize (400, 400);
  }
}

