import java.awt.Graphics ;
import java.awt.Event;
import java.awt.Frame;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;


public class AFr3 extends Canvas {
  static int preX, preY , preN;
  static Dimension xyold;
  static int mR, mA ;

  public AFr3 () {
   xyold = new Dimension (0,0);
   raz ();
   }

  static void raz () {
   preN=0;
   xyold.height  = xyold.height +1 ; // forcera reaffichage
//  System.out.println("AFr3 a execute raz ");
  }


   public boolean handleEvent(Event ev) {
   Dimension xpary;
   int n,xx,yy,prochain,prexx,preyy,prenn,xxx,yyy;

//   System.out.println("AFr3 Handel Event "+ev);

   xpary = this.size() ;
   if ( this.modif(xpary) ) {
//   System.out.println("Faut redessiner"+xpary+" <> "+xyold);
   po.fond(getGraphics()) ;
   }
//
//     if (ev.target == w.dessinW) {
//   po.fond(getGraphics()) ;
//     };
      if (ev.id == Event.MOUSE_DOWN /* 501*/ ) {  // 501 est mouse_down ? en tout cac click
         n=po.nearof(ev.x,ev.y);
//        System.out.println("AFr3 click souris en ["+n+"] "+po.getnom(n));
         xx=po.getx(n);
         yy=po.gety(n);
         rond ( getGraphics(),xx,yy);
// ligne rouge a vol d'oiseau
         if (preN != 0) {
//           ligne (getGraphics(),preX, preY, xx, yy);
// developpement
        prexx=preX;
        preyy=preY;
        prenn=preN;
        prochain = po.chemin (prenn,n);
//        System.out.println("nb etapes a faire ="+prochain);
          do {
          prochain = po.next (prenn,n);

//          System.out.println(" po.next ( "+prenn+","+n+")-->"+prochain+
//               ":"+po.getnom(prochain));
// ligne (verte) par la route
            if (prochain != 0) {
            xxx=po.getx(prochain);
            yyy=po.gety(prochain);
            vert (getGraphics(),prexx, preyy, xxx, yyy);
            prenn=prochain;
            prexx=xxx;
            preyy=yyy;
          }
         } while ( (prochain != n) && (prochain !=0)) ;
     };
     preN=n;
     preX=xx;
     preY=yy;
   };
     return super.handleEvent(ev);
   }

  public void rond (Graphics g,int x,int y) {
     g.drawOval (x-1,y-1,2,2);
  }

  public void ligne (Graphics g,int xd,int yd, int xf, int yf) {
     g.setColor (Color.red);
     g.drawLine (xd,yd,xf,yf);
  }

  public void vert (Graphics g,int xd,int yd, int xf, int yf) {
     g.setColor (Color.black);
     g.drawLine (xd,yd,xf,yf);
  }


   public boolean modif (Dimension xy) {
    if (( xyold.height  == xy.height ) & ( xyold.width  == xy.width )) {
        return false;
        }
    else {
      xyold=xy;
      return true;
      }
   }


}


