package ckelling.baukasten;

/**
 * Editor_DescriptionSimpleEdge.java
 *
 * Diese Datenstruktur enthaelt zusaetzliche Angaben zu jeder SimpleEdge
 * die mit dem Editor angelegt wurde
 *
 **/

import java.awt.Point;

public class Editor_DescriptionSimpleEdge extends Editor_Description
{
    public final static int	NUMBER_OF_COORDINATES = 5;

	private Editor_DescriptionSimpleBus	parent;


	public Editor_DescriptionSimpleEdge(Editor_DescriptionSimpleBus parent)
	{
		super(NUMBER_OF_COORDINATES);

		this.parent = parent;
	}


	public int evaluate(int which)
	{
		int value;
		Point p = null;
		Point parentStart = null;

		if ( (which < 0) || (which >= NUMBER_OF_COORDINATES) )
			which = 0;

		if (! isConstantOnly[which])
		{
			p = source[which].getCoordinates(sourceQualifier[which]);
			parentStart = new Point(parent.evaluateX(), parent.evaluateY());

			if (! parent.isHorizontalBus())
			{
				p = new Point(p.y, p.x);
				parentStart = new Point(parentStart.y, parentStart.x);
			}
		}

		switch (which)
		{
			default:
				value = 0;
				break;
			case 0:
				if (isConstantOnly[0])
					value = constant[0];
				else
					value = p.x - parentStart.x + constant[0];
				break;
			case 1:
			case 3:
				if (isConstantOnly[which])
					value = constant[which];
				else
					value = p.y - parentStart.y + constant[which] - evaluate(which - 2);
				break;
			case 2:
			case 4:
				if (isConstantOnly[which])
					value = constant[which];
				else
					value = p.x - parentStart.x + constant[which] - evaluate(which - 2);
				break;
		}

		return value;
	}

} /* end Editor_DescriptionSimpleEdge */
