/**
 * testgeo1.java	12/01/2011 - 09/09/22 - 21/09/22
 * auteur : Jean-Paul Quelen
 *
 * affichage d'un segment de couleur bleue
 *
 * pour compiler : javac testgeo.java geo\*.java -Xlint
 * ou ajouter geo\*.java dans le complément de javacmdes
 * sauf si le classpath est correct ; dans ce cas seuls les .java de geo utilisés seront compilés
 *
 * pour excuter :
 * sous mode commandes :
 * faire set classpath=. puis java testgeo
 * ou fabriquer un .jar : jar cvfm testgeo.jar testgeo.txt testgeo*.class geo\*.class
 * ou ajouter geo\*.class dans le complément de javacmdes
 */

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import geo.*;

public class testgeo1 extends JFrame implements MouseListener, MouseMotionListener {
	static final long serialVersionUID = 220921L;
	int w, h;
	static Image img;
	static Graphics g1;
	static Repere R;
	static PointLibre A, B, C, D;
	static Cercle AB, CD;
	static Pt[] H;
	static Droite H1H2;
	static PointSurDroite M;
	static PointSurCercle N;

	public testgeo1 (String titre) {
		super (titre);
		setFont (new Font ("Arial", Font.PLAIN, 12));
		addMouseMotionListener (this);
		addMouseListener (this);
	}

	public void update (Graphics g) {
		paint (g);
	}

	public void paint (Graphics g) {
		int w1 = getWidth();
		int h1 = getHeight();
		if ((img == null) || (w1 != w) || (h1 != h)) {
			w = w1;
			h = h1;
			img = createImage (w, h);
			g1 = img.getGraphics();
			if (R == null) {
				R = new Repere (w / 2, h / 2, w, h, 10.0, 10.0);
				A = new PointLibre (5.0, 0.0);
				B = new PointLibre (0.0, 5.0);
				AB = new Cercle (A, B);
				C = new PointLibre (-5.0, 0.0);
				D = new PointLibre (0.0, -5.0);
				CD = new Cercle (C, D);
				H = Pt.intersection (AB, CD);
				H1H2 = new Droite (H[0], H[1]);
				M = new PointSurDroite (2.0, 2.0, H1H2);
				N = new PointSurCercle (-3.0, 3.0, AB);
			} else {
				R.MAJ (w / 2, h / 2, w, h, 10.0, 10.0);
			}
		}
		AB.MAJ (A, B);
		CD.MAJ (C, D);
		H = Pt.intersection (AB, CD);
		H[0].MAJ (H[0]);
		H[1].MAJ (H[1]);
		H1H2.MAJ (H[0], H[1]);
		M.MAJ();
		N.MAJ();
		
		g1.setColor (Color.WHITE);
		g1.fillRect (0, 0, R.XMAX, R.YMAX);

		g1.setColor (Color.GREEN);
		R.trace (g1);

		g1.setColor (Color.BLACK);
		H1H2.trace ("", R, g1);
		H[0].trace ("", R, g1);
		H[1].trace ("", R, g1);

		g1.setColor (Color.BLUE);
		AB.trace ("", R, g1);
		CD.trace ("", R, g1);

		g1.setColor (Color.RED);
		A.trace ("A", R, g1);
		B.trace ("B", R, g1);
		C.trace ("C", R, g1);
		D.trace ("D", R, g1);
		M.trace ("M", R, g1);
		N.trace ("N", R, g1);

		g.drawImage (img, 0, 0, this);
	}

	public void mousePressed (MouseEvent e) {
		int X = e.getX();
		int Y =  e.getY();
		if (A.deplace = A.zone (X, Y, R)) {
		} else if (B.deplace = B.zone (X, Y, R)) {
		} else if (C.deplace = C.zone (X, Y, R)) {
		} else if (D.deplace = D.zone (X, Y, R)) {
		} else if (M.deplace = M.zone (X, Y, R)) {
		} else if (N.deplace = N.zone (X, Y, R)) {
		}
	}

	public void mouseDragged (MouseEvent e) {
		int X = e.getX();
		int Y = e.getY();
		A.bouge (X, Y, R);
		B.bouge (X, Y, R);
		C.bouge (X, Y, R);
		D.bouge (X, Y, R);
		M.bouge (X, Y, R);
		N.bouge (X, Y, R);
		repaint();
	}

	public void mouseReleased (MouseEvent e) {
		A.deplace = B.deplace = C.deplace = D.deplace = M.deplace = false;
	}

	public void mouseMoved (MouseEvent e) {
		int X = e.getX();
		int Y = e.getY();
		if (A.zone (X, Y, R) || B.zone (X, Y, R) || C.zone (X, Y, R) || D.zone (X, Y, R) || M.zone (X, Y, R) || N.zone (X, Y, R)) {
			setCursor (new Cursor (Cursor.HAND_CURSOR));
		} else {
			setCursor (new Cursor (Cursor.DEFAULT_CURSOR));
		}
	}

public void mouseClicked (MouseEvent e) {}
public void mouseEntered (MouseEvent e) {}
public void mouseExited (MouseEvent e) {}

	public static void main (String args[]) {
		testgeo1 appl = new testgeo1 ("testgeo");
		appl.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
		appl.setSize (400, 300);
		appl.setVisible (true);
	}
}
