import java.awt.*;
import java.util.*;
import java.applet.Applet;
import java.net.URL;



public class HelloWorldTextArea extends java.applet.Applet {
  TextArea textA = new TextArea("Hello ", 10, 50);
  Button button = null;
  Button buttonClear = null;
  Button buttonPaint = null;
  MyCanvas canvas = null;
  String param = null;
  Image image = null;
  URL imageURL = null;
  URL imageSource = null;

public void init() {
     try {
       String param = getParameter("IMAGESOURCE"); 
       imageSource = (param == null) ? getDocumentBase() : 
	 new URL(getDocumentBase(), param + "/");

       param = getParameter("imageURL");
       imageURL = new URL(imageSource, param);
     } catch (Exception e) {
       System.out.println("erreur mauvais URL");
     }

  image = getImage(imageURL);

  textA.setEditable(false);
  //workaround for cut-off sides
  //setLayout(new BorderLayout()); 
  add("textA", textA);

  add("canvas", (canvas = new MyCanvas()));

  add(button = new Button("Display Image"));
  button.setFont(new Font("Helvetica", Font.PLAIN, 14));
 
  add(buttonClear = new Button("Clear drawing"));
  button.setFont(new Font("Helvetica", Font.PLAIN, 14));

  add(buttonPaint = new Button("Redraw"));
  button.setFont(new Font("Helvetica", Font.PLAIN, 14));

  param = getParameter("PARAM");
  addItem("parametre = " + param + " Initializing... ");

  show();
}

public void start() {
      addItem("Starting... ");

}

public void stop() {
  addItem("Stopping... ");
}

public void destroy() {
  addItem("Preparing for unloading...");
}

public void addItem(String newWord) {
  String t = textA.getText();

//  System.out.println(newWord);
  textA.appendText(newWord);
  repaint();
}


public boolean mouseDown(Event evt, int x, int y) {
  textA.setText("click! en x =" + x + " y = " + y);
  return false;
}

public boolean action(Event event, Object what) {
  if (event.target instanceof Button) {
    //signal the window thread to build a window
    textA.setText("action : Bouton presse! ");
    repaint();
  } 

  if (event.target ==  button) {
    //signal the window thread to build a window
    
    canvas.displayImage(image);
    repaint();
    return(true);
  } 

  if (event.target ==  buttonClear) {
    //signal the window thread to build a window
    canvas.clear();
    repaint();
    return(true);
  } 
  if (event.target == buttonPaint) {
    //signal the window thread to build a window
    canvas.repaint();
    repaint();
    return(true);
  } 
  return(false);
}


//    public void paint(Graphics g) {
//      g.drawString("Hello world!", 50, 25);
//    }
}


class MyCanvas extends Canvas {

    public void paint(Graphics g) {
        int w = size().width;
        int h = size().height;
        g.drawRect(0, 0, w - 1, h - 1);
        g.drawString("Canvas", (w - g.getFontMetrics().stringWidth("Canvas"))/2,
                      10);

        g.setFont(new Font("Helvetica", Font.PLAIN, 8));
        g.drawLine(10,10, 100,100);
        g.fillRect(9,9,3,3);
        g.drawString("(10,10)", 13, 10);
        g.fillRect(49,49,3,3);
        g.drawString("(50,50)", 53, 50);
        g.fillRect(99,99,3,3);
        g.drawString("(100,100)", 103, 100);
    }

    public void clear() {
      getGraphics().clearRect(0, 0, size().width, size().height);
    }

public void displayImage(Image image) {
  getGraphics().drawImage(image, 0, 0, this);
}

    public Dimension minimumSize() {
        return new Dimension(150,130);
    }

    public Dimension preferredSize() {
        return minimumSize();
    }
}
