package cnp.ew.diagram;

import java.awt.*;

import cnp.ew.lightweight.*;

public class CpSizingHandle extends CpHandle
{
    public static boolean xorDefault = false;

    CpLocator anchor;
    Point anchorPoint;
    CpRubberRectangleLc rubberRectLc;
    boolean xor = xorDefault;
    CpSelectionHandle xorHandle;
    boolean rubberRect = false;


    public CpSizingHandle(CpDiagrammableLc newOwner, CpLocator newLocator, CpLocator newAnchor)
    {
        this(newOwner, newLocator, newAnchor, false);
    }

    public CpSizingHandle(CpDiagrammableLc newOwner, CpLocator newLocator, CpLocator newAnchor, boolean newXor)
    {
        super(newOwner, newLocator);
        anchor = newAnchor;
        xor = newXor;
    }

    public void startDrag(int x, int y)
	{
  	    anchorPoint = anchor.getPoint(owner);
	    if (xor) {
	        xorHandle = new CpSelectionHandle(owner.getDiagram(), anchorPoint);
	        xorHandle.startDrag(x, y);
	    } else if (rubberRect) {
	        rubberRectLc = new CpRubberRectangleLc(x, y, 0, 0);
    	    owner.getDiagram().add(rubberRectLc);
    	}
    }

	public void drag(int x, int y)
	{
	    if (xor) {
	        xorHandle.drag(x, y);
	    } else if (rubberRect) {
	        rubberRectLc.reshape(CpGraphicsUtilities.RectangleFromPoints(anchorPoint, new Point(x, y)));
	    } else {
    	    owner.reshape(CpGraphicsUtilities.RectangleFromPoints(anchorPoint, new Point(x, y)));
    	}
	}

	public void endDrag(int x, int y)
	{
        if (xor) {
            xorHandle.endDrag(x, y);
    	    owner.reshape(xorHandle.getRectangle());
    	} else if (rubberRect) {
            rubberRectLc.remove();
    	    rubberRectLc = null;
    	    owner.reshape(CpGraphicsUtilities.RectangleFromPoints(anchorPoint, new Point(x, y)));
        }
    }
}