/**
* Copyright (C) 2009 BonitaSoft S.A.
* BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.bonitasoft.studio.diagram.custom.parts;
import org.bonitasoft.studio.common.diagram.tools.FiguresHelper;
import org.bonitasoft.studio.common.gmf.tools.GMFTools;
import org.bonitasoft.studio.diagram.custom.anchors.SourceFixedConnectionAnchor;
import org.bonitasoft.studio.diagram.custom.anchors.TargetFixedConnectionAnchor;
import org.bonitasoft.studio.model.process.diagram.edit.parts.ANDGatewayEditPart;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.SnapToHelper;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.RoutingStyle;
import org.eclipse.gmf.runtime.notation.View;
/**
* @author Romain Bioteau
*
*/
public class CustomANDGatewayEditPart extends ANDGatewayEditPart {
private TargetFixedConnectionAnchor targetAnchor ;
private SourceFixedConnectionAnchor sourceAnchor ;
public CustomANDGatewayEditPart(View view) {
super(view);
}
@SuppressWarnings("unchecked")
@Override
public Object getAdapter(Class key) {
if (key == SnapToHelper.class) {
EditPart parent = getParent() ;
while(!(parent instanceof DiagramEditPart)){
parent = parent.getParent() ;
}
return GMFTools.getSnapHelper((org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart) parent);
}
return super.getAdapter(key);
}
@Override
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connEditPart) {
final RoutingStyle style = (RoutingStyle) ((View) connEditPart.getModel())
.getStyle(NotationPackage.Literals.ROUTING_STYLE);
if(style.isClosestDistance()){
sourceAnchor = null ;
sourceAnchor = new SourceFixedConnectionAnchor(this,((GraphicalEditPart)connEditPart.getTarget()).getFigure());
return sourceAnchor;
}else{
return super.getSourceConnectionAnchor(connEditPart);
}
}
@Override
public ConnectionAnchor getTargetConnectionAnchor(
ConnectionEditPart connEditPart) {
final RoutingStyle style = (RoutingStyle) ((View) connEditPart.getModel())
.getStyle(NotationPackage.Literals.ROUTING_STYLE);
if(style.isClosestDistance()){
targetAnchor = null ;
targetAnchor = new TargetFixedConnectionAnchor(this,((GraphicalEditPart)connEditPart.getSource()).getFigure());
return targetAnchor;
}else{
return super.getTargetConnectionAnchor(connEditPart);
}
}
@Override
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
}
@Override
protected NodeFigure createNodePlate() {
DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(FiguresHelper.GATEWAY_WIDTH, FiguresHelper.GATEWAY_WIDTH) {
public PointList getPolygonPoints() {
PointList points = new PointList(5);
Rectangle anchRect = getHandleBounds();
points.addPoint(anchRect.x+anchRect.width/2,anchRect.y);
points.addPoint(anchRect.x + anchRect.width, anchRect.y+anchRect.height/2);
points.addPoint(anchRect.x+anchRect.width/2,anchRect.y+anchRect.height);
points.addPoint(anchRect.x, anchRect.y+anchRect.height/2);
points.addPoint(anchRect.x+ anchRect.width/2,anchRect.y);
return points;
}
};
return result;
}
@Override
protected void refreshBounds() {
int width = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
int height = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
Dimension size = new Dimension(width, height);
int x = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_X())).intValue();
int y = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_Y())).intValue();
Point newLoc = FiguresHelper.handleCompartmentMargin(this, x, y);
Point loc = new Point(x, y);
if(!newLoc.equals(loc)){
if(newLoc.equals(FiguresHelper.handleCompartmentMargin(this, newLoc.x, newLoc.y)))
GMFTools.setEditPartLocation(this,new Rectangle(newLoc, size));
}
if(newLoc != null){
loc = newLoc ;
}
((GraphicalEditPart) getParent()).setLayoutConstraint(
this,
getFigure(),
new Rectangle(loc, size));
}
}
|