//------------------------------------------------------------------------------ // Copyright (c) 2005, 2007 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 implementation //------------------------------------------------------------------------------ package org.eclipse.epf.diagram.ad.edit.parts; import java.util.Iterator; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Ellipse; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.StackLayout; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.epf.diagram.ad.edit.policies.InitialNodeCanonicalEditPolicy; import org.eclipse.epf.diagram.ad.edit.policies.InitialNodeGraphicalNodeEditPolicy; import org.eclipse.epf.diagram.ad.edit.policies.InitialNodeItemSemanticEditPolicy; import org.eclipse.epf.diagram.ad.edit.policies.UMLExtNodeLabelHostLayoutEditPolicy; import org.eclipse.epf.diagram.ad.part.UMLVisualIDRegistry; import org.eclipse.epf.diagram.core.editparts.InternalNodeEditPart; import org.eclipse.epf.diagram.core.util.DiagramConstants; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editparts.LayerManager; import org.eclipse.gef.editpolicies.LayoutEditPolicy; import org.eclipse.gef.editpolicies.NonResizableEditPolicy; import org.eclipse.gef.requests.CreateRequest; import org.eclipse.gmf.runtime.diagram.ui.editparts.AbstractBorderedShapeEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.BorderItemSelectionEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; import org.eclipse.gmf.runtime.diagram.ui.figures.BorderItemLocator; import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout; import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure; import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure; import org.eclipse.gmf.runtime.notation.FillStyle; import org.eclipse.gmf.runtime.notation.LineStyle; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.swt.graphics.Color; /** * @generated */ public class InitialNodeEditPart extends AbstractBorderedShapeEditPart implements InternalNodeEditPart { /** * @generated */ public static final int VISUAL_ID = 1004; /** * @generated */ protected IFigure contentPane; /** * @generated */ protected IFigure primaryShape; /** * @generated */ public InitialNodeEditPart(View view) { super(view); } /** * @generated */ protected void createDefaultEditPolicies() { super.createDefaultEditPolicies(); installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new InitialNodeItemSemanticEditPolicy()); installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy()); } /** * @generated */ protected LayoutEditPolicy createLayoutEditPolicy() { LayoutEditPolicy lep = new LayoutEditPolicy() { protected EditPolicy createChildEditPolicy(EditPart child) { if (child instanceof IBorderItemEditPart) { return new BorderItemSelectionEditPolicy(); } EditPolicy result = child .getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); if (result == null) { result = new NonResizableEditPolicy(); } return result; } protected Command getMoveChildrenCommand(Request request) { return null; } protected Command getCreateCommand(CreateRequest request) { return null; } }; return lep; } /** * @generated */ protected IFigure createNodeShape() { InitialNodeFigure figure = new InitialNodeFigure(); return primaryShape = figure; } /** * @generated */ public InitialNodeFigure getPrimaryShape() { return (InitialNodeFigure) primaryShape; } /** * @generated */ protected void addBorderItem(IFigure borderItemContainer, IBorderItemEditPart borderItemEditPart) { if (borderItemEditPart instanceof InitialNodeNameEditPart) { BorderItemLocator locator = new BorderItemLocator(getMainFigure(), PositionConstants.SOUTH); locator.setBorderItemOffset(new Dimension(-20, -20)); borderItemContainer.add(borderItemEditPart.getFigure(), locator); } else { super.addBorderItem(borderItemContainer, borderItemEditPart); } } /** * @modified */ protected NodeFigure createNodePlate() { return new DefaultSizeNodeFigure(getMapMode().DPtoLP(20), getMapMode() .DPtoLP(20)); } /** * Creates figure for this edit part. * * Body of this method does not depend on settings in generation model * so you may safely remove <i>generated</i> tag and modify it. * * @generated */ protected NodeFigure createMainFigure() { NodeFigure figure = createNodePlate(); figure.setLayoutManager(new StackLayout()); IFigure shape = createNodeShape(); figure.add(shape); contentPane = setupContentPane(shape); return figure; } /** * Default implementation treats passed figure as content pane. * Respects layout one may have set for generated figure. * @param nodeShape instance of generated figure class * @generated */ protected IFigure setupContentPane(IFigure nodeShape) { if (nodeShape.getLayoutManager() == null) { ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout(); layout.setSpacing(getMapMode().DPtoLP(5)); nodeShape.setLayoutManager(layout); } return nodeShape; // use nodeShape itself as contentPane } /** * @generated */ public IFigure getContentPane() { if (contentPane != null) { return contentPane; } return super.getContentPane(); } /** * @generated */ public EditPart getPrimaryChildEditPart() { return getChildBySemanticHint(UMLVisualIDRegistry .getType(InitialNodeNameEditPart.VISUAL_ID)); } /** * @generated */ public class InitialNodeFigure extends Ellipse { /** * @modified */ public InitialNodeFigure() { LineStyle linestyle = (LineStyle) getPrimaryView().getStyle( NotationPackage.Literals.LINE_STYLE); if (linestyle != null && linestyle.getLineColor() != DiagramConstants.LINE_COLOR_EDEFAULT) { this.setForegroundColor(DiagramColorRegistry.getInstance() .getColor(new Integer(linestyle.getLineColor()))); } else { this .setForegroundColor(org.eclipse.draw2d.ColorConstants.darkBlue); } FillStyle style = (FillStyle) getPrimaryView().getStyle( NotationPackage.Literals.FILL_STYLE); if (style != null && style.getFillColor() != DiagramConstants.FILL_COLOR_EDEFAULT) { this.setBackgroundColor(DiagramColorRegistry.getInstance() .getColor(new Integer(style.getFillColor()))); } else { this.setBackgroundColor(INITIALNODEFIGURE_BACK); } this.setPreferredSize(getMapMode().DPtoLP(20), getMapMode().DPtoLP( 20)); this.setSize(getMapMode().DPtoLP(20), getMapMode().DPtoLP(20)); createContents(); } /** * @generated */ private void createContents() { } /** * @generated */ private boolean myUseLocalCoordinates = false; /** * @generated */ protected boolean useLocalCoordinates() { return myUseLocalCoordinates; } /** * @generated */ protected void setUseLocalCoordinates(boolean useLocalCoordinates) { myUseLocalCoordinates = useLocalCoordinates; } } /** * @generated */ public static final Color INITIALNODEFIGURE_BACK = new Color(null, 45, 85, 130); @Override protected void handleNotificationEvent(Notification notification) { // TODO Auto-generated method stub Object feature = notification.getFeature(); if (NotationPackage.eINSTANCE.getSize_Width().equals(feature) || NotationPackage.eINSTANCE.getSize_Height().equals(feature) || NotationPackage.eINSTANCE.getLocation_X().equals(feature) || NotationPackage.eINSTANCE.getLocation_Y().equals(feature)) { refreshBounds(); } else if (NotationPackage.eINSTANCE.getFillStyle_FillColor().equals( feature)) { Integer c = (Integer) notification.getNewValue(); setBackgroundColor(DiagramColorRegistry.getInstance().getColor(c)); getPrimaryShape().setBackgroundColor( DiagramColorRegistry.getInstance().getColor(c)); } else if (NotationPackage.eINSTANCE.getLineStyle_LineColor().equals( feature)) { Integer c = (Integer) notification.getNewValue(); setForegroundColor(DiagramColorRegistry.getInstance().getColor(c)); getPrimaryShape().setForegroundColor( DiagramColorRegistry.getInstance().getColor(c)); } else if (NotationPackage.eINSTANCE.getFontStyle().isInstance( notification.getNotifier())) refreshFont(); else if (notification.getFeature() == NotationPackage.eINSTANCE .getView_Element() && ((EObject) notification.getNotifier()) == getNotationView()) handleMajorSemanticChange(); else super.handleNotificationEvent(notification); } @Override public void primAddSourceConnection(ConnectionEditPart connection, int index) { super.primAddSourceConnection(connection, index); } @Override public void primAddTargetConnection(ConnectionEditPart connection, int index) { super.primAddTargetConnection(connection, index); } }