package org.eclipse.uml2.diagram.common.draw2d; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.RectangleFigure; import org.eclipse.draw2d.geometry.Rectangle; public class PartialRectangleFigure extends RectangleFigure { private boolean myIsTopShown = true; private boolean myIsBottomShown = true; private boolean myIsLeftShown = true; private boolean myIsRightShown = true; public PartialRectangleFigure() { setLineWidth(1); setOutline(true); setFill(true); } @Override protected void outlineShape(Graphics graphics) { int lineInset = (int) Math.ceil(Math.max(1.0, getLineWidthFloat() / 2.0)); Rectangle r = Rectangle.SINGLETON.setBounds(getBounds()); r.x += lineInset - 1; r.y += lineInset - 1; r.width -= (lineInset + lineInset) - 1; r.height -= (lineInset + lineInset) - 1; if (myIsBottomShown && myIsLeftShown && myIsRightShown && myIsTopShown) { graphics.drawRectangle(r); return; } int left = r.x; int right = r.x + r.width; int top = r.y; int bottom = r.y + r.height; if (myIsTopShown) { graphics.drawLine(left, top, right, top); } if (myIsBottomShown) { graphics.drawLine(left, bottom, right, bottom); } if (myIsLeftShown) { graphics.drawLine(left, top, left, bottom); } if (myIsRightShown) { graphics.drawLine(right, top, right, bottom); } } public void setLeftShown(boolean isLeftShown) { if (myIsLeftShown != isLeftShown) { myIsLeftShown = isLeftShown; repaint(); } } public void setRightShown(boolean isRightShown) { if (myIsRightShown != isRightShown) { myIsRightShown = isRightShown; repaint(); } } public void setTopShown(boolean isTopShown) { if (myIsTopShown != isTopShown) { myIsTopShown = isTopShown; repaint(); } } public void setBottomShown(boolean isBottomShown) { if (myIsBottomShown != isBottomShown) { myIsBottomShown = isBottomShown; repaint(); } } }