package org.eclipse.uml2.diagram.sequence.figures; import org.eclipse.draw2d.BorderLayout; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.RoundedRectangle; import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart; import org.eclipse.uml2.diagram.common.editparts.NeedsParentEditPart; import org.eclipse.uml2.diagram.common.layered.MultiLayeredContainer; import org.eclipse.uml2.diagram.common.layered.MultilayeredFigure; import org.eclipse.uml2.diagram.common.layered.MultilayeredSupport; import org.eclipse.uml2.diagram.common.layered.MultilayeredSupportImpl; import org.eclipse.uml2.diagram.sequence.part.UMLDiagramEditorPlugin; public class StateInvariantShape extends RoundedRectangle implements MultilayeredFigure, NeedsParentEditPart { protected static final int DEFAULT_RADIUS = 15; protected static final int VERTICAL_SPACING = 2; private final MultilayeredSupportImpl myMultilayeredSupport = new MultilayeredSupportImpl(); private Label myInplaceLabel; public StateInvariantShape () { setLineWidth(1); setBackgroundColor(ColorConstants.lightGray); corner.width = DEFAULT_RADIUS; corner.height = DEFAULT_RADIUS; setLayoutManager(new BorderLayout()); int gapWidth = corner.width/2; myInplaceLabel = new Label(""); myInplaceLabel.setForegroundColor(ColorConstants.black); myInplaceLabel.setFont(UMLDiagramEditorPlugin.getInstance().getDefaultBoldFont()); myInplaceLabel.setBorder(new MarginBorder(VERTICAL_SPACING,gapWidth,VERTICAL_SPACING,gapWidth)); myInplaceLabel.setLabelAlignment(PositionConstants.CENTER); add(myInplaceLabel, BorderLayout.CENTER); myMultilayeredSupport.setLayerToFigure(MultiLayeredContainer.MIDDLE_LAYER, this); myMultilayeredSupport.setLayerToContentPane(MultiLayeredContainer.MIDDLE_LAYER, this); } public Label getStateInvariantInplaceLabel() { return myInplaceLabel; } public MultilayeredSupport getMultilayeredSupport() { return myMultilayeredSupport; } public void hookParentEditPart(GraphicalEditPart parentEditPart) { myMultilayeredSupport.setParentFromParentEditPart(parentEditPart); } }