/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.examples.logicdesigner.edit;
import org.eclipse.draw2d.Connection;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gef.examples.logicdesigner.figures.FigureFactory;
import org.eclipse.gef.examples.logicdesigner.figures.NodeFigure;
import org.eclipse.gef.examples.logicdesigner.model.GroundOutput;
import org.eclipse.gef.examples.logicdesigner.model.LiveOutput;
import org.eclipse.gef.examples.logicdesigner.model.LogicSubpart;
import org.eclipse.gef.examples.logicdesigner.model.Wire;
import org.eclipse.gef.examples.logicdesigner.model.commands.ConnectionCommand;
public class LogicNodeEditPolicy
extends org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy
{
protected Connection createDummyConnection(Request req) {
PolylineConnection conn = FigureFactory.createNewWire(null);
return conn;
}
protected Command getConnectionCompleteCommand(CreateConnectionRequest request) {
ConnectionCommand command = (ConnectionCommand)request.getStartCommand();
command.setTarget(getLogicSubpart());
ConnectionAnchor ctor = getLogicEditPart().getTargetConnectionAnchor(request);
if (ctor == null)
return null;
command.setTargetTerminal(getLogicEditPart().mapConnectionAnchorToTerminal(ctor));
return command;
}
protected Command getConnectionCreateCommand(CreateConnectionRequest request) {
ConnectionCommand command = new ConnectionCommand();
command.setWire(new Wire());
command.setSource(getLogicSubpart());
ConnectionAnchor ctor = getLogicEditPart().getSourceConnectionAnchor(request);
command.setSourceTerminal(getLogicEditPart().mapConnectionAnchorToTerminal(ctor));
request.setStartCommand(command);
return command;
}
/**
* Feedback should be added to the scaled feedback layer.
* @see org.eclipse.gef.editpolicies.GraphicalEditPolicy#getFeedbackLayer()
*/
protected IFigure getFeedbackLayer() {
/*
* Fix for Bug# 66590
* Feedback needs to be added to the scaled feedback layer
*/
return getLayer(LayerConstants.SCALED_FEEDBACK_LAYER);
}
protected LogicEditPart getLogicEditPart() {
return (LogicEditPart) getHost();
}
protected LogicSubpart getLogicSubpart() {
return (LogicSubpart) getHost().getModel();
}
protected Command getReconnectTargetCommand(ReconnectRequest request) {
if (getLogicSubpart() instanceof LiveOutput ||
getLogicSubpart() instanceof GroundOutput)
return null;
ConnectionCommand cmd = new ConnectionCommand();
cmd.setWire((Wire)request.getConnectionEditPart().getModel());
ConnectionAnchor ctor = getLogicEditPart().getTargetConnectionAnchor(request);
cmd.setTarget(getLogicSubpart());
cmd.setTargetTerminal(getLogicEditPart().mapConnectionAnchorToTerminal(ctor));
return cmd;
}
protected Command getReconnectSourceCommand(ReconnectRequest request) {
ConnectionCommand cmd = new ConnectionCommand();
cmd.setWire((Wire)request.getConnectionEditPart().getModel());
ConnectionAnchor ctor = getLogicEditPart().getSourceConnectionAnchor(request);
cmd.setSource(getLogicSubpart());
cmd.setSourceTerminal(getLogicEditPart().mapConnectionAnchorToTerminal(ctor));
return cmd;
}
protected NodeFigure getNodeFigure() {
return (NodeFigure)((GraphicalEditPart)getHost()).getFigure();
}
}