package org.eclipse.uml2.diagram.sequence.internal.layout.model; import org.eclipse.uml2.diagram.sequence.internal.layout.GeometryConstants; import org.eclipse.uml2.diagram.sequence.internal.layout.abstractgde.AbsElementPropertyAccess; import org.eclipse.uml2.diagram.sequence.internal.layout.abstractgde.AbsNode; /** * */ public abstract class LMVisibleFrameWithPentagon extends LMFrame { LMVisibleFrameWithPentagon(AbsNode gdeNode) { super(gdeNode); myPentagonLayouter = AbsElementPropertyAccess.getInstance().getPentagonLayouter(gdeNode); } public interface PentagonLayouter { int getPreferredWidth(); int getPreferredHeight(); void setX(int i); void setY(int i); } boolean hasVisibleMountingLinks() { return true; } public void setLeftBorderPosByTool(int pos) { int curX = getGdeNode().getX(); int curWidth = getGdeNode().getWidth(); int newX = pos; int newWidth = curWidth + curX - newX; setX(newX); setWidth(newWidth); } public void setRightBorderPosByTool(int pos) { setRightBorderPosByLayout(pos); } public void setLeftBorderPosByLayout(int pos) { setX(pos); } public void setRightBorderPosByLayout(int pos) { int curX = getGdeNode().getX(); int newWidth = pos - curX; setWidth(newWidth); //System.out.println("[SDHorizontalLayout.layout] width="+gdeNode.getWidth()); //System.out.println("[SDHorizontalLayout.layout] newWidth="+newWidth); } protected abstract int getPentagonOffset(); protected void setX(int x) { super.setX(x); myPentagonLayouter.setX(x + getPentagonOffset()); } protected void setWidth(int width) { super.setWidth(width); } public void setTopBorderPos(int pos) { super.setTopBorderPos(pos); myPentagonLayouter.setY(pos + getPentagonOffset()); } public int getMinimumWidth() { return myPentagonLayouter.getPreferredWidth(); } public int getPreferredWidth() { return myPentagonLayouter.getPreferredWidth(); } public int getPreferredHeight() { return myPentagonLayouter.getPreferredHeight() + GeometryConstants.Frames.MINIMAL_SPACE_UNDER_PENTAGON; } final int getPentagonPreferredHeight() { return myPentagonLayouter.getPreferredHeight(); } private final PentagonLayouter myPentagonLayouter; }