blob: ec204790911222a5f6718186411d6830e0c0aa40 [file] [log] [blame]
/**
*
*/
package org.eclipse.epf.diagramming.base.figures;
import java.util.List;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.StackLayout;
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.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
import org.eclipse.gmf.runtime.draw2d.ui.figures.IPolygonAnchorableFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
/**
* @author Shashidhar Kannoori
* Adopted from GMF's GeoShapes
*/
public class DecisionNodeFigure extends DefaultSizeNodeFigure implements
IPolygonAnchorableFigure {
private int spacing;
/**
* Constructor create a decision figure
*
*/
public DecisionNodeFigure(int width, int height, int spacing) {
super(width, height);
this.spacing = spacing;
createFigure(width, height);
}
/**
* @param defSize
*/
public DecisionNodeFigure(Dimension defSize) {
super(defSize);
// TODO Auto-generated constructor stub
}
/**
* @param width
* @param height
*/
public DecisionNodeFigure(int width, int height) {
super(width, height);
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.draw2d.ui.figures.IPolygonAnchorableFigure#getPolygonPoints()
*/
public PointList getPolygonPoints() {
// TODO Auto-generated method stub
return getPoints();
}
protected void paintFigure(Graphics g) {
PointList points = getPointList(getBounds().getCopy());
g.fillPolygon(points);
g.drawPolygon(points);
}
/**
* This method is used to compute the shapes polygon points.
* This is currently based on the shapes bounding box.
*
* @param rect the rectangle that the shape will fit in
*/
protected PointList getPointList(Rectangle rect) {
PointList points = new PointList();
int halfX = rect.x + (rect.width / 2);
int halfY = rect.y + (rect.height / 2);
Point p1 = new Point( halfX, rect.y );
Point p2 = new Point( rect.x + rect.width - 1, halfY );
Point p3 = new Point( halfX, rect.y + rect.height - 1 );
Point p4 = new Point( rect.x, halfY );
points.addPoint( p1 );
points.addPoint( p2 );
points.addPoint( p3 );
points.addPoint( p4 );
points.addPoint( p1 );
return points;
}
public IFigure getContentPane() {
return (IFigure) getChildren().get(0);
}
public void createFigure(int width, int height){
setOpaque(true);
setLayoutManager(new StackLayout() {
public void layout(IFigure figure) {
Rectangle r = figure.getClientArea();
List children = figure.getChildren();
IFigure child;
Dimension d;
for (int i = 0; i < children.size(); i++) {
child = (IFigure)children.get(i);
d = child.getPreferredSize(r.width, r.height);
d.width = Math.min(d.width, r.width);
d.height = Math.min(d.height, r.height);
Rectangle childRect = new Rectangle(
r.x + (r.width - d.width)/2,
r.y + (r.height - d.height)/2,
d.width,
d.height);
child.setBounds(childRect);
}
}
});
IFigure f = new Figure();
ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
layout.setSpacing(spacing);
f.setLayoutManager(layout);
add(f);
}
public PointList getPoints(){
return getPointList(getBounds().getCopy());
}
}