package fplot;

import java.awt.*;
/**
 * 
 * 
 * @author Christian Semrau
 * <a href="mailto:Christian.Semrau@student.uni-magdeburg.de">
 * Christian.Semrau@student.uni-magdeburg.de</a>
 * <br><a href="http://chsemrau.de">Homepage</a>
 */
public class Line {
	boolean drawStart, drawDest;
	int startX, startY, destX, destY;
	int sX, sY, dX, dY;
	int w, h;
	
	final static int
		OUTLOW = -10,
		OUTHIGH = -11,
		OUTLEFT = -12,
		OUTRIGHT = -13,
		UNDEFINED = -14;
/**
 * 
 */
public Line() {
	drawStart = drawDest = false;
	startX = startY = destX = destY = UNDEFINED;
	h = w = 0;
	sX = sY = dX = dY = -1;
}
/**
 * 
 * @param sX int
 * @param sY int
 * @param dX int
 * @param dY int
 */
public Line(int asX, int asY, int adX, int adY, Dimension p) {
	this.h = p.height;
	this.w = p.width;
	this.startX = asX;
	this.startY = asY;
	this.destX = adX;
	this.destY = adY;
	this.drawStart = this.startX!=UNDEFINED && this.startY!=UNDEFINED;
	this.drawDest  = this.destX !=UNDEFINED && this.destY !=UNDEFINED;
	this.sX = drawX(this.startX);
	this.sY = drawY(this.startY);
	this.dX = drawX(this.destX);
	this.dY = drawY(this.destY);
}
/**
 * Line constructor comment.
 */
public Line(int X, int Y, Dimension p) {
	this(X, Y, X, Y, p);
}
/**
 * 
 * @param last fplot.Line
 * @param dX int
 * @param dY int
 */
public Line(Line last, int dX, int dY, Dimension p) {
	this(last.destX, last.destY, dX, dY, p);
}
/**
 * 
 */
public int drawX(int x) {
	return x==OUTRIGHT ? w : (x==OUTLEFT ? -1 : x);
;
}
/**
 * 
 */
public int drawY(int y) {
	return y==OUTHIGH ? -1 : (y==OUTLOW ? h : y);
}
/**
 * 
 * @param g Graphics
 */
public void paint(Graphics g) {
		if (drawStart && drawDest){
			// beide OK
			g.drawLine(dX, dY, sX, sY);
		}else
		// hoechstens einer ist OK
		if (drawDest){
			// der aktuelle Wert ist OK
			g.drawLine(dX, dY, dX, dY);
		}
}
/**
 * 
 * @return java.lang.String
 */
public String toString() {
	return getClass().getName()+"["
		+startX+"/"+startY+"-"+destX+"/"+destY+
		","+sX+"/"+sY+"-"+dX+"/"+dY+
		"]";
}
}