NodeEditPart.java
Go to the documentation of this file.
00001 package org.ros.model.ros.diagram.edit.parts;
00002 
00003 import org.eclipse.draw2d.ColorConstants;
00004 import org.eclipse.draw2d.Graphics;
00005 import org.eclipse.draw2d.GridData;
00006 import org.eclipse.draw2d.GridLayout;
00007 import org.eclipse.draw2d.IFigure;
00008 import org.eclipse.draw2d.MarginBorder;
00009 import org.eclipse.draw2d.PositionConstants;
00010 import org.eclipse.draw2d.RectangleFigure;
00011 import org.eclipse.draw2d.RoundedRectangle;
00012 import org.eclipse.draw2d.Shape;
00013 import org.eclipse.draw2d.StackLayout;
00014 import org.eclipse.draw2d.geometry.Dimension;
00015 import org.eclipse.draw2d.geometry.Rectangle;
00016 import org.eclipse.gef.EditPart;
00017 import org.eclipse.gef.EditPolicy;
00018 import org.eclipse.gef.Request;
00019 import org.eclipse.gef.commands.Command;
00020 import org.eclipse.gef.editpolicies.LayoutEditPolicy;
00021 import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
00022 import org.eclipse.gef.requests.CreateRequest;
00023 import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
00024 import org.eclipse.gmf.runtime.diagram.ui.editparts.AbstractBorderedShapeEditPart;
00025 import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
00026 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
00027 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.BorderItemSelectionEditPolicy;
00028 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy;
00029 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
00030 import org.eclipse.gmf.runtime.diagram.ui.figures.BorderItemLocator;
00031 import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
00032 import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
00033 import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
00034 import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
00035 import org.eclipse.gmf.runtime.emf.type.core.IElementType;
00036 import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
00037 import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
00038 import org.eclipse.gmf.runtime.notation.View;
00039 import org.eclipse.gmf.tooling.runtime.edit.policies.reparent.CreationEditPolicyWithCustomReparent;
00040 import org.eclipse.swt.SWT;
00041 import org.eclipse.swt.graphics.Color;
00042 import org.eclipse.swt.graphics.Font;
00043 import org.eclipse.swt.widgets.Display;
00044 import org.ros.model.ros.diagram.edit.policies.NodeCanonicalEditPolicy;
00045 import org.ros.model.ros.diagram.edit.policies.NodeItemSemanticEditPolicy;
00046 import org.ros.model.ros.diagram.part.RosVisualIDRegistry;
00047 import org.ros.model.ros.diagram.providers.RosElementTypes;
00048 
00052 public class NodeEditPart extends AbstractBorderedShapeEditPart {
00053 
00057         public static final int VISUAL_ID = 3001;
00058 
00062         protected IFigure contentPane;
00063 
00067         protected IFigure primaryShape;
00068 
00072         public NodeEditPart(View view) {
00073                 super(view);
00074         }
00075 
00079         protected void createDefaultEditPolicies() {
00080                 installEditPolicy(EditPolicyRoles.CREATION_ROLE,
00081                                 new CreationEditPolicyWithCustomReparent(
00082                                                 RosVisualIDRegistry.TYPED_INSTANCE));
00083                 super.createDefaultEditPolicies();
00084                 installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
00085                                 new NodeItemSemanticEditPolicy());
00086                 installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE,
00087                                 new DragDropEditPolicy());
00088                 installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
00089                                 new NodeCanonicalEditPolicy());
00090                 installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
00091                 // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
00092                 // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
00093         }
00094 
00098         protected LayoutEditPolicy createLayoutEditPolicy() {
00099                 org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy lep = new org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy() {
00100 
00101                         protected EditPolicy createChildEditPolicy(EditPart child) {
00102                                 View childView = (View) child.getModel();
00103                                 switch (RosVisualIDRegistry.getVisualID(childView)) {
00104                                 case PublisherEditPart.VISUAL_ID:
00105                                 case SubscriberEditPart.VISUAL_ID:
00106                                 case ActionServerEditPart.VISUAL_ID:
00107                                 case ActionClientEditPart.VISUAL_ID:
00108                                 case ServiceServerEditPart.VISUAL_ID:
00109                                 case ServiceClientEditPart.VISUAL_ID:
00110                                         return new BorderItemSelectionEditPolicy();
00111                                 }
00112                                 EditPolicy result = child
00113                                                 .getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
00114                                 if (result == null) {
00115                                         result = new NonResizableEditPolicy();
00116                                 }
00117                                 return result;
00118                         }
00119 
00120                         protected Command getMoveChildrenCommand(Request request) {
00121                                 return null;
00122                         }
00123 
00124                         protected Command getCreateCommand(CreateRequest request) {
00125                                 return null;
00126                         }
00127                 };
00128                 return lep;
00129         }
00130 
00134         protected IFigure createNodeShape() {
00135                 return primaryShape = new NodeFigure2();
00136         }
00137 
00141         public NodeFigure2 getPrimaryShape() {
00142                 return (NodeFigure2) primaryShape;
00143         }
00144 
00148         protected boolean addFixedChild(EditPart childEditPart) {
00149                 if (childEditPart instanceof NodeNameEditPart) {
00150                         ((NodeNameEditPart) childEditPart).setLabel(getPrimaryShape()
00151                                         .getFigureNodeNameFigure());
00152                         return true;
00153                 }
00154                 if (childEditPart instanceof NodeParametersEditPart) {
00155                         IFigure pane = getPrimaryShape()
00156                                         .getFigureParameterCompartmentFigure();
00157                         setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way 
00158                         pane.add(((NodeParametersEditPart) childEditPart).getFigure());
00159                         return true;
00160                 }
00161                 if (childEditPart instanceof PublisherEditPart) {
00162                         BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
00163                                         PositionConstants.EAST);
00164                         getBorderedFigure().getBorderItemContainer().add(
00165                                         ((PublisherEditPart) childEditPart).getFigure(), locator);
00166                         return true;
00167                 }
00168                 if (childEditPart instanceof SubscriberEditPart) {
00169                         BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
00170                                         PositionConstants.WEST);
00171                         getBorderedFigure().getBorderItemContainer().add(
00172                                         ((SubscriberEditPart) childEditPart).getFigure(), locator);
00173                         return true;
00174                 }
00175                 if (childEditPart instanceof ActionServerEditPart) {
00176                         BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
00177                                         PositionConstants.EAST);
00178                         getBorderedFigure().getBorderItemContainer()
00179                                         .add(((ActionServerEditPart) childEditPart).getFigure(),
00180                                                         locator);
00181                         return true;
00182                 }
00183                 if (childEditPart instanceof ActionClientEditPart) {
00184                         BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
00185                                         PositionConstants.WEST);
00186                         getBorderedFigure().getBorderItemContainer()
00187                                         .add(((ActionClientEditPart) childEditPart).getFigure(),
00188                                                         locator);
00189                         return true;
00190                 }
00191                 if (childEditPart instanceof ServiceServerEditPart) {
00192                         BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
00193                                         PositionConstants.EAST);
00194                         getBorderedFigure().getBorderItemContainer().add(
00195                                         ((ServiceServerEditPart) childEditPart).getFigure(),
00196                                         locator);
00197                         return true;
00198                 }
00199                 if (childEditPart instanceof ServiceClientEditPart) {
00200                         BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
00201                                         PositionConstants.WEST);
00202                         getBorderedFigure().getBorderItemContainer().add(
00203                                         ((ServiceClientEditPart) childEditPart).getFigure(),
00204                                         locator);
00205                         return true;
00206                 }
00207                 return false;
00208         }
00209 
00213         protected boolean removeFixedChild(EditPart childEditPart) {
00214                 if (childEditPart instanceof NodeNameEditPart) {
00215                         return true;
00216                 }
00217                 if (childEditPart instanceof NodeParametersEditPart) {
00218                         IFigure pane = getPrimaryShape()
00219                                         .getFigureParameterCompartmentFigure();
00220                         pane.remove(((NodeParametersEditPart) childEditPart).getFigure());
00221                         return true;
00222                 }
00223                 if (childEditPart instanceof PublisherEditPart) {
00224                         getBorderedFigure().getBorderItemContainer().remove(
00225                                         ((PublisherEditPart) childEditPart).getFigure());
00226                         return true;
00227                 }
00228                 if (childEditPart instanceof SubscriberEditPart) {
00229                         getBorderedFigure().getBorderItemContainer().remove(
00230                                         ((SubscriberEditPart) childEditPart).getFigure());
00231                         return true;
00232                 }
00233                 if (childEditPart instanceof ActionServerEditPart) {
00234                         getBorderedFigure().getBorderItemContainer().remove(
00235                                         ((ActionServerEditPart) childEditPart).getFigure());
00236                         return true;
00237                 }
00238                 if (childEditPart instanceof ActionClientEditPart) {
00239                         getBorderedFigure().getBorderItemContainer().remove(
00240                                         ((ActionClientEditPart) childEditPart).getFigure());
00241                         return true;
00242                 }
00243                 if (childEditPart instanceof ServiceServerEditPart) {
00244                         getBorderedFigure().getBorderItemContainer().remove(
00245                                         ((ServiceServerEditPart) childEditPart).getFigure());
00246                         return true;
00247                 }
00248                 if (childEditPart instanceof ServiceClientEditPart) {
00249                         getBorderedFigure().getBorderItemContainer().remove(
00250                                         ((ServiceClientEditPart) childEditPart).getFigure());
00251                         return true;
00252                 }
00253                 return false;
00254         }
00255 
00259         protected void addChildVisual(EditPart childEditPart, int index) {
00260                 if (addFixedChild(childEditPart)) {
00261                         return;
00262                 }
00263                 super.addChildVisual(childEditPart, -1);
00264         }
00265 
00269         protected void removeChildVisual(EditPart childEditPart) {
00270                 if (removeFixedChild(childEditPart)) {
00271                         return;
00272                 }
00273                 super.removeChildVisual(childEditPart);
00274         }
00275 
00279         protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
00280                 if (editPart instanceof NodeParametersEditPart) {
00281                         return getPrimaryShape().getFigureParameterCompartmentFigure();
00282                 }
00283                 if (editPart instanceof IBorderItemEditPart) {
00284                         return getBorderedFigure().getBorderItemContainer();
00285                 }
00286                 return getContentPane();
00287         }
00288 
00292         protected NodeFigure createNodePlate() {
00293                 DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40);
00294                 return result;
00295         }
00296 
00305         protected NodeFigure createMainFigure() {
00306                 NodeFigure figure = createNodePlate();
00307                 figure.setLayoutManager(new StackLayout());
00308                 IFigure shape = createNodeShape();
00309                 figure.add(shape);
00310                 contentPane = setupContentPane(shape);
00311                 return figure;
00312         }
00313 
00320         protected IFigure setupContentPane(IFigure nodeShape) {
00321                 if (nodeShape.getLayoutManager() == null) {
00322                         ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
00323                         layout.setSpacing(5);
00324                         nodeShape.setLayoutManager(layout);
00325                 }
00326                 return nodeShape; // use nodeShape itself as contentPane
00327         }
00328 
00332         public IFigure getContentPane() {
00333                 if (contentPane != null) {
00334                         return contentPane;
00335                 }
00336                 return super.getContentPane();
00337         }
00338 
00342         protected void setForegroundColor(Color color) {
00343                 if (primaryShape != null) {
00344                         primaryShape.setForegroundColor(color);
00345                 }
00346         }
00347 
00351         protected void setBackgroundColor(Color color) {
00352                 if (primaryShape != null) {
00353                         primaryShape.setBackgroundColor(color);
00354                 }
00355         }
00356 
00360         protected void setLineWidth(int width) {
00361                 if (primaryShape instanceof Shape) {
00362                         ((Shape) primaryShape).setLineWidth(width);
00363                 }
00364         }
00365 
00369         protected void setLineType(int style) {
00370                 if (primaryShape instanceof Shape) {
00371                         ((Shape) primaryShape).setLineStyle(style);
00372                 }
00373         }
00374 
00378         public EditPart getPrimaryChildEditPart() {
00379                 return getChildBySemanticHint(RosVisualIDRegistry
00380                                 .getType(NodeNameEditPart.VISUAL_ID));
00381         }
00382 
00386         public EditPart getTargetEditPart(Request request) {
00387                 if (request instanceof CreateViewAndElementRequest) {
00388                         CreateElementRequestAdapter adapter = ((CreateViewAndElementRequest) request)
00389                                         .getViewAndElementDescriptor()
00390                                         .getCreateElementRequestAdapter();
00391                         IElementType type = (IElementType) adapter
00392                                         .getAdapter(IElementType.class);
00393                         if (type == RosElementTypes.Parameter_3002) {
00394                                 return getChildBySemanticHint(RosVisualIDRegistry
00395                                                 .getType(NodeParametersEditPart.VISUAL_ID));
00396                         }
00397                 }
00398                 return super.getTargetEditPart(request);
00399         }
00400 
00404         public class NodeFigure2 extends RoundedRectangle {
00405                 public static final int BLUR_SHADOW_WIDTH = 5;
00406 
00407                 @Override
00408                 public void paintFigure(Graphics graphics) {
00409                         drawBlurredShadow(graphics);
00410                         super.paintFigure(graphics);
00411                 }
00412 
00413                 private void drawBlurredShadow(Graphics graphics) {
00414                         // draw the shadow...
00415                         graphics.pushState();
00416 
00417                         int size = MapModeUtil.getMapMode(this).DPtoLP(BLUR_SHADOW_WIDTH);
00418                         int step = MapModeUtil.getMapMode(this).DPtoLP(-1);
00419 
00420                         graphics.setForegroundColor(ColorConstants.gray);
00421                         graphics.setLineWidth(MapModeUtil.getMapMode(this).DPtoLP(2));
00422                         graphics.translate(size, size);
00423                         graphics.setClip(graphics.getClip(new Rectangle(getBounds()))
00424                                         .expand(size, size));
00425                         graphics.setAlpha(20);
00426                         outlineShape(graphics);
00427                         graphics.translate(step, step);
00428                         graphics.setAlpha(30);
00429                         outlineShape(graphics);
00430                         graphics.translate(step, step);
00431                         graphics.setAlpha(60);
00432                         outlineShape(graphics);
00433                         graphics.translate(step, step);
00434                         graphics.setAlpha(100);
00435                         outlineShape(graphics);
00436                         graphics.translate(step, step);
00437                         graphics.setAlpha(150);
00438                         outlineShape(graphics);
00439 
00440                         graphics.popState();
00441                 }
00442 
00446                 private WrappingLabel fFigureNodeNameFigure;
00450                 private RectangleFigure fFigureParameterCompartmentFigure;
00451 
00455                 public NodeFigure2() {
00456 
00457                         GridLayout layoutThis = new GridLayout();
00458                         layoutThis.numColumns = 1;
00459                         layoutThis.makeColumnsEqualWidth = true;
00460                         this.setLayoutManager(layoutThis);
00461 
00462                         this.setCornerDimensions(new Dimension(getMapMode().DPtoLP(20),
00463                                         getMapMode().DPtoLP(20)));
00464                         this.setLineWidth(2);
00465                         this.setMinimumSize(new Dimension(getMapMode().DPtoLP(240),
00466                                         getMapMode().DPtoLP(180)));
00467                         createContents();
00468                 }
00469 
00473                 private void createContents() {
00474 
00475                         RectangleFigure nodeTopFigure0 = new RectangleFigure();
00476 
00477                         nodeTopFigure0.setForegroundColor(NODETOPFIGURE0_FORE);
00478 
00479                         nodeTopFigure0.setBorder(new MarginBorder(getMapMode().DPtoLP(5),
00480                                         getMapMode().DPtoLP(5), getMapMode().DPtoLP(5),
00481                                         getMapMode().DPtoLP(5)));
00482 
00483                         GridData constraintNodeTopFigure0 = new GridData();
00484                         constraintNodeTopFigure0.verticalAlignment = GridData.BEGINNING;
00485                         constraintNodeTopFigure0.horizontalAlignment = GridData.FILL;
00486                         constraintNodeTopFigure0.horizontalIndent = 0;
00487                         constraintNodeTopFigure0.horizontalSpan = 1;
00488                         constraintNodeTopFigure0.verticalSpan = 1;
00489                         constraintNodeTopFigure0.grabExcessHorizontalSpace = true;
00490                         constraintNodeTopFigure0.grabExcessVerticalSpace = false;
00491                         this.add(nodeTopFigure0, constraintNodeTopFigure0);
00492 
00493                         GridLayout layoutNodeTopFigure0 = new GridLayout();
00494                         layoutNodeTopFigure0.numColumns = 1;
00495                         layoutNodeTopFigure0.makeColumnsEqualWidth = true;
00496                         nodeTopFigure0.setLayoutManager(layoutNodeTopFigure0);
00497 
00498                         fFigureNodeNameFigure = new WrappingLabel();
00499 
00500                         fFigureNodeNameFigure.setText("<...>");
00501 
00502                         fFigureNodeNameFigure.setFont(FFIGURENODENAMEFIGURE_FONT);
00503 
00504                         GridData constraintFFigureNodeNameFigure = new GridData();
00505                         constraintFFigureNodeNameFigure.verticalAlignment = GridData.BEGINNING;
00506                         constraintFFigureNodeNameFigure.horizontalAlignment = GridData.BEGINNING;
00507                         constraintFFigureNodeNameFigure.horizontalIndent = 0;
00508                         constraintFFigureNodeNameFigure.horizontalSpan = 3;
00509                         constraintFFigureNodeNameFigure.verticalSpan = 1;
00510                         constraintFFigureNodeNameFigure.grabExcessHorizontalSpace = false;
00511                         constraintFFigureNodeNameFigure.grabExcessVerticalSpace = false;
00512                         nodeTopFigure0.add(fFigureNodeNameFigure,
00513                                         constraintFFigureNodeNameFigure);
00514 
00515                         fFigureParameterCompartmentFigure = new RectangleFigure();
00516 
00517                         fFigureParameterCompartmentFigure.setFill(false);
00518 
00519                         GridData constraintFFigureParameterCompartmentFigure = new GridData();
00520                         constraintFFigureParameterCompartmentFigure.verticalAlignment = GridData.FILL;
00521                         constraintFFigureParameterCompartmentFigure.horizontalAlignment = GridData.FILL;
00522                         constraintFFigureParameterCompartmentFigure.horizontalIndent = 0;
00523                         constraintFFigureParameterCompartmentFigure.horizontalSpan = 1;
00524                         constraintFFigureParameterCompartmentFigure.verticalSpan = 1;
00525                         constraintFFigureParameterCompartmentFigure.grabExcessHorizontalSpace = true;
00526                         constraintFFigureParameterCompartmentFigure.grabExcessVerticalSpace = true;
00527                         this.add(fFigureParameterCompartmentFigure,
00528                                         constraintFFigureParameterCompartmentFigure);
00529 
00530                         fFigureParameterCompartmentFigure
00531                                         .setLayoutManager(new StackLayout());
00532 
00533                 }
00534 
00538                 public WrappingLabel getFigureNodeNameFigure() {
00539                         return fFigureNodeNameFigure;
00540                 }
00541 
00545                 public RectangleFigure getFigureParameterCompartmentFigure() {
00546                         return fFigureParameterCompartmentFigure;
00547                 }
00548 
00549         }
00550 
00554         static final Color NODETOPFIGURE0_FORE = new Color(null, 236, 232, 233);
00555 
00559         static final Font FFIGURENODENAMEFIGURE_FONT = new Font(
00560                         Display.getCurrent(), Display.getDefault().getSystemFont()
00561                                         .getFontData()[0].getName(), 10, SWT.BOLD);
00562 
00563 }


bride_plugin_source
Author(s): Alexander Bubeck
autogenerated on Sun Oct 5 2014 22:38:34