/***************************************************************************** * Copyright (c) 2012 CEA LIST. * * * 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: * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.common.editparts; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.emf.common.notify.Notification; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableCompartmentEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure; import org.eclipse.gmf.runtime.diagram.ui.internal.figures.NestedResizableCompartmentFigure; import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.ResizeableListCompartmentEditPart; import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypePropertiesEditPolicy; import org.eclipse.papyrus.uml.diagram.common.editpolicies.DuplicatePasteEditPolicy; import org.eclipse.papyrus.uml.diagram.common.figure.node.AppliedStereotypeCompartmentFigure; import org.eclipse.uml2.uml.Stereotype; import org.eclipse.uml2.uml.util.UMLUtil; /** * this compartment is the an editpart associated to an applied stereotype */ public class AppliedStereotypeConpartmentEditPart extends ResizeableListCompartmentEditPart{ public static String ID="AppliedStereotypeCompartement"; public AppliedStereotypeConpartmentEditPart(View view) { super(view); } protected boolean hasModelChildrenChanged(Notification evt) { return false; } public String getCompartmentName() { Stereotype stereotype=UMLUtil.getStereotype(this.resolveSemanticElement()); if(stereotype!=null){ return ""+String.valueOf("\u00AB")+stereotype.getName()+ String.valueOf("\u00BB"); } return "bad compartement stereotype"; } /** * this method has bee rewritten in order to add its wn figure to ensure to mange it * in papyrus Figure. * * Adds a constrained flow layout algorithm to the content pane of compartment figure * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ public IFigure createFigure() { ResizableCompartmentFigure rcf; if (getParent() == getTopGraphicEditPart()){ //replace ResizableCompartmentFigure by it own figure in order to manage it. rcf = new AppliedStereotypeCompartmentFigure(getCompartmentName(), getMapMode()); } else { rcf = new NestedResizableCompartmentFigure(getMapMode()); } ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout(); layout.setStretchMajorAxis(false); layout.setStretchMinorAxis(false); layout.setMinorAlignment(ConstrainedToolbarLayout.ALIGN_TOPLEFT); rcf.getContentPane().setLayoutManager(layout); return rcf; } /** * * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart#createDefaultEditPolicies() * */ protected void createDefaultEditPolicies() { super.createDefaultEditPolicies(); installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new ResizableCompartmentEditPolicy()); installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE, new DragDropEditPolicy()); installEditPolicy(DuplicatePasteEditPolicy.PASTE_ROLE, new DuplicatePasteEditPolicy()); installEditPolicy(AppliedStereotypePropertiesEditPolicy.APPLIED_STEREOTYPE_VISIBILITY_COMPARTMENT, new AppliedStereotypePropertiesEditPolicy()); } /** * * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ResizableCompartmentEditPart#setRatio(java.lang.Double) * * @param ratio */ protected void setRatio(Double ratio) { if(getFigure().getParent().getLayoutManager() instanceof ConstrainedToolbarLayout) { super.setRatio(ratio); } } /** * * @see org.eclipse.papyrus.infra.gmfdiag.common.editpart.ResizeableListCompartmentEditPart#handleNotificationEvent(org.eclipse.emf.common.notify.Notification) * * @param notification */ protected void handleNotificationEvent(Notification notification) { 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(); } super.handleNotificationEvent(notification); } protected void refreshBounds() { int width = ((GraphicalEditPart)getParent()).getFigure().getBounds().getSize().width; int height = 20; Dimension size = new Dimension(width, height); Point loc = new Point(10,10 ); //((GraphicalEditPart)getParent()).setLayoutConstraint(this, getFigure(), new Rectangle(loc, size)); } /** * * @see org.eclipse.papyrus.infra.gmfdiag.common.editpart.ResizeableListCompartmentEditPart#refreshVisuals() * */ protected void refreshVisuals() { super.refreshVisuals(); refreshBounds(); } }