blob: e0c175fb8ed2aefc4dfb7d6593cea65fc31e30c1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2012 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.bpel.ui.editparts;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.bpel.ui.editparts.borders.PickBorder;
import org.eclipse.bpel.ui.editparts.figures.CollapsablePickContainerFigure;
import org.eclipse.bpel.ui.editparts.policies.BPELOrderedLayoutEditPolicy;
import org.eclipse.bpel.ui.figures.CenteredConnectionAnchor;
import org.eclipse.bpel.ui.util.ModelHelper;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.FlowLayout;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Layer;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.gef.EditPolicy;
public class PickEditPart extends SequenceEditPart {
private class PickOrderedLayoutEditPolicy extends BPELOrderedLayoutEditPolicy{
@Override
protected ArrayList createVerticalConnections(BPELEditPart parent) {
ArrayList<PolylineConnection> connections = new ArrayList<PolylineConnection>();
List children = getConnectionChildren(parent);
BPELEditPart sourcePart, targetPart;
ConnectionAnchor sourceAnchor, targetAnchor;
sourcePart = parent;
sourceAnchor = sourcePart.getConnectionAnchor(CenteredConnectionAnchor.LEFT);
if (children != null){
for (int i = 0; i < children.size(); i++) {
targetPart = (BPELEditPart)children.get(i);
targetAnchor = targetPart.getConnectionAnchor(CenteredConnectionAnchor.LEFT);
connections.add(createConnection(sourceAnchor,targetAnchor,arrowColor));
}
}
return connections;
}
}
@Override
protected void createEditPolicies() {
if(ModelHelper.isHorizontalLayout(getModel()))
installEditPolicy(EditPolicy.LAYOUT_ROLE, new PickOrderedLayoutEditPolicy());
else
super.createEditPolicies();
}
@Override
protected void configureExpandedFigure(IFigure figure) {
super.configureExpandedFigure(figure);
boolean horizontal = ModelHelper.isHorizontalLayout(getModel());
FlowLayout layout = (FlowLayout)figure.getLayoutManager();
layout.setHorizontal(!horizontal);
layout.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);
layout.setStretchMinorAxis(true);
// Adjust the border
((PickBorder)figure.getBorder()).setHorizontal(horizontal);
}
// Overridden to return a PickContainerFigure
@Override
protected IFigure getNewContentPane(Layer layer) {
CollapsablePickContainerFigure fig = new CollapsablePickContainerFigure(getModel(), image, getLabel());
fig.addMouseMotionListener(getMouseMotionListener());
fig.setEditPart(this);
return fig;
}
@Override
public ConnectionAnchor getConnectionAnchor(int location) {
if(location == CenteredConnectionAnchor.LEFT){
return new CenteredConnectionAnchor(getContentPane(),CenteredConnectionAnchor.LEFT_INNER,0);
}
return super.getConnectionAnchor(location);
}
/**
* Overridden to toggle the horizontal flag for picks, because if
* the layout orientation is horizontal, the children of a pick should
* be laid out vertically and the other way around.
*/
@Override
public void switchLayout(boolean horizontal) {
removeEditPolicy(EditPolicy.LAYOUT_ROLE);
EditPolicy newPolicy = null;
if(horizontal)
newPolicy = new PickOrderedLayoutEditPolicy();
else
newPolicy = new BPELOrderedLayoutEditPolicy();
installEditPolicy(EditPolicy.LAYOUT_ROLE, newPolicy);
((FlowLayout)contentFigure.getLayoutManager()).setHorizontal(!horizontal);
((PickBorder)contentFigure.getBorder()).setHorizontal(horizontal);
}
}