/* KoordinatniSustav.java */

package applets.kosinus;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KoordinatniSustav extends Panel implements MouseListener, MouseMotionListener {
    private Graf kosinus;
    protected Rectangle okvir;
    private boolean naGrafu,mousePovucen;

    int mouseX,mouseY;

    public KoordinatniSustav() {
	kosinus = new Graf();
	setBackground(Color.white);

	naGrafu=false;
	mousePovucen=false;

	addMouseListener(this);
	addMouseMotionListener(this);
    }

    public void paint(Graphics g) {
	okvir = getBounds(okvir);

	/* Iscrtajmo koordinatne osi u sivoj boji. */
	g.setColor(Color.gray);
	g.drawLine(okvir.width/2,0,okvir.width/2,okvir.height);
	g.drawLine(0,okvir.height/2,okvir.width,okvir.height/2);

	/* Iscrtajmo graf (on ce se pobrinuti za eventualne tangente). */
	kosinus.iscrtajSe(g,okvir);
    }

    /* Metode potrebne za implementaciju MouseListenera */
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}

    public void mousePressed(MouseEvent e) {
	//e.consume();
	mouseX=e.getX();
	mouseY=e.getY();

	okvir = getBounds(okvir);

	if (kosinus.naGrafu(mouseX,mouseY,okvir)) {
	    // kliknuli smo na graf
	    naGrafu=true;
	}
	else naGrafu=false;
    }

    public void mouseReleased(MouseEvent e) {
	if (naGrafu && !mousePovucen) {
	    // dodajemo novu tangentu
	    okvir = getBounds(okvir);
	    kosinus.dodajTangentu(e.getX(),e.getY(),okvir);
	    repaint();
	}
	mousePovucen=false;
	naGrafu=false;
    }

    /* Metode potrebne za implementaciju MouseMotionListenera */
    public void mouseDragged(MouseEvent e) {
	if (naGrafu) {
	    mousePovucen=true;
	    kosinus.translacija(e.getX()-mouseX,mouseY-e.getY());
	    mouseX=e.getX();
	    mouseY=e.getY();
	    repaint();
	}
    }

    public void mouseMoved(MouseEvent e) {}

    /* Dodajmo i funkciju main za testiranje. */
    public static void main(String[] args) {
	/* Napravimo frame i dodajmo koordinatni sustav na nj. */
	JFrame frame = new JFrame("Kosinus");

	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	frame.setSize(500,300);
	frame.getContentPane().add(new KoordinatniSustav());

	frame.setVisible(true);
    }
}
