package uci.graphedit;
import java.awt.Event;

public class ModeCreateAltEdge extends ModeCreate 
{
	private NetNode sourceNode;

	/** Construct a new ModeCreateArc */
	public ModeCreateAltEdge(Document par)
	{
		super(par);
	}
	
	public void setCursorType(Editor ed)
	{
		ed.setCursor(ed.CROSSHAIR_CURSOR);
	}

	/** Create the new item that will be drawn. In this case I would
	* rather create the ArcPerspective when I am done. Here I just
	* create a rubberband line to show during the interaction. */
	
	public DiagramElement createNewItem(Event e) 
	{
		return new FigLine(e.x, e.y, 0, 0, Globals.prefs().rubberbandAttrs());    
	}
	
	public boolean mouseDown(Event e, int x, int y)
	{
		DiagramElement underMouse = parent.pick(x,y);
		if (underMouse != null) 
			if(underMouse instanceof Perspective) 
			{
				sourceNode=(NetNode)((Perspective)underMouse).owner();
				return super.mouseDown(e, x, y);
			}
		done(); 
		return true;
	}
	
	public boolean mouseUp(Event e, int x, int y) 
	{
		newItem.damagedIn(parent);
		newItem = null;
		done();
		DiagramElement de = parent.pick(x, y);
		if (de != null)
		{
			if (de instanceof Perspective)
			{
				NetNode destNode = (NetNode)((Perspective) de).owner();
				if (sourceNode!= null && destNode != sourceNode)
				{
					if(!(sourceNode instanceof ConstClass))
					{
						Class arcClass;
						NetArc newArc;
						try { arcClass = Class.forName("uci.graphedit.NetArc"); }
						catch (java.lang.ClassNotFoundException ignore) { return false; }
						try { newArc = (NetArc)arcClass.newInstance(); }
						catch (java.lang.IllegalAccessException ignore) { return false; }
						catch (java.lang.InstantiationException ignore) { return false; }
						
						newArc.connect(sourceNode, destNode);
						newArc.setId(parent.nextId());
						ArcPerspective ap;
						ap=new ArcPerspective(newArc);
						parent.add(ap);
						ap.reorder(ActionReorder.SEND_TO_BACK, parent.view());
						parent.selectItem(ap);
					}
				}
			}
		}
		return true;
	}

} /* end class ModeCreateAltArc */