/******************************************************************************
* Copyright (c) 2016 Oracle
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Shenxue Zhou - initial implementation and ongoing maintenance
******************************************************************************/
package org.eclipse.sapphire.ui.swt.gef.internal;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.sapphire.ui.diagram.def.IDiagramConnectionDef;
import org.eclipse.sapphire.ui.swt.gef.SapphireDiagramEditor;
/**
* @author <a href="mailto:shenxue.zhou@oracle.com">Shenxue Zhou</a>
*/
public class DiagramNodeConnectionCreationTool extends SapphireConnectionCreationTool
{
private SapphireDiagramEditor diagramEditor;
private IDiagramConnectionDef connectionDef;
public void continueConnection(EditPart targetEditPart, SapphireDiagramEditor diagramEditor, IDiagramConnectionDef connectionDef)
{
this.diagramEditor = diagramEditor;
this.connectionDef = connectionDef;
activate();
setTargetEditPart(targetEditPart);
setConnectionSource(targetEditPart);
Command command = targetEditPart.getCommand(getTargetRequest());
((CreateConnectionRequest) getTargetRequest()).setSourceEditPart(targetEditPart);
if (command != null)
{
setState(STATE_CONNECTION_STARTED);
setCurrentCommand(command);
setViewer(diagramEditor.getGraphicalViewer());
}
if (isInState(STATE_CONNECTION_STARTED))
{
updateTargetRequest();
updateTargetUnderMouse();
showSourceFeedback();
showTargetFeedback();
setCurrentCommand(command);
}
}
@Override
protected boolean handleMove()
{
if (isInState(STATE_CONNECTION_STARTED))
{
updateTargetRequest();
updateTargetUnderMouse();
showSourceFeedback();
showTargetFeedback();
setCurrentCommand(getCommand());
}
return true;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.tools.AbstractConnectionCreationTool#createTargetRequest
* ()
*/
@Override
protected Request createTargetRequest()
{
ContextButtonConnectionRequest request = new ContextButtonConnectionRequest();
request.setType(getCommandName());
request.setConnectionDef(connectionDef);
return request;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.tools.AbstractConnectionCreationTool#updateTargetRequest
* ()
*/
@Override
protected void updateTargetRequest()
{
updateTargetUnderMouse();
CreateConnectionRequest request = (CreateConnectionRequest) getTargetRequest();
request.setType(getCommandName());
org.eclipse.draw2d.geometry.Point absoluteMousePosition = diagramEditor.getMouseLocation();
request.setLocation(absoluteMousePosition);
}
@Override
protected boolean handleButtonDown(int button)
{
if (button == 3 && stateTransition(STATE_CONNECTION_STARTED, STATE_TERMINAL))
{
getDomain().loadDefaultTool();
return true;
}
return super.handleButtonDown(button);
}
}