فهرست منبع

support for exit states added to the editor

Andreas Mülder 14 سال پیش
والد
کامیت
00ee3e4c38
12فایلهای تغییر یافته به همراه188 افزوده شده و 53 حذف شده
  1. 26 6
      plugins/org.yakindu.sct.statechart.diagram/plugin.xml
  2. 2 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/StatechartElementTypes.java
  3. 50 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/figures/ExitFigure.java
  4. 24 17
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/figures/RegionFigure.java
  5. 17 18
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/figures/StateFigure.java
  6. 56 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/ExitEditPart.java
  7. 1 2
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/StateFigureCompartmentEditPart.java
  8. 1 1
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/CompartmentCreationEditPolicy.java
  9. 1 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/SemanticHints.java
  10. 2 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/StatechartDiagramEditPartProvider.java
  11. 1 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/StatechartDiagramViewProvider.java
  12. 7 9
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/utils/SemanticHintUtil.java

+ 26 - 6
plugins/org.yakindu.sct.statechart.diagram/plugin.xml

@@ -130,6 +130,17 @@
                   name="semanticHint"
                   value="FinalState">
             </param>
+         </metamodelType>
+          <metamodelType
+               eclass="Exit"
+               icon="icons/obj16/exit_point_16x16.png"
+               id="org.yakindu.sct.statechart.diagram.Exit"
+               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+               name="Exit">
+            <param
+                  name="semanticHint"
+                  value="Exit">
+            </param>
          </metamodelType>
          <metamodelType
                eclass="Junction"
@@ -235,7 +246,7 @@
                    small_icon="icons/obj16/region_16x16.png">
              </entry>
              <entry
-                   description="Creates a Transition"
+                   description="Creates a transition"
                    id="Transition"
                    kind="tool"
                    label="Transition"
@@ -244,7 +255,7 @@
                    small_icon="icons/obj16/transition_16x16.png">
              </entry>
              <entry
-                   description="Creates a Choice"
+                   description="Creates a choice"
                    id="Choice"
                    kind="tool"
                    label="Choice"
@@ -253,7 +264,7 @@
                    small_icon="icons/obj16/choice_16x16.png">
              </entry>
              <entry
-                   description="Creates a Junction"
+                   description="Creates a junction"
                    id="Junction"
                    kind="tool"
                    label="Junction"
@@ -262,7 +273,7 @@
                    small_icon="icons/obj16/junction_16x16.png">
              </entry>
              <entry
-                   description="Creates an Initial State"
+                   description="Creates an initial state"
                    id="Entry"
                    kind="tool"
                    label="Initial State"
@@ -280,7 +291,7 @@
                    small_icon="icons/obj16/shallow_history_16x16.png">
              </entry>
              <entry
-                   description="Creates a Deep History"
+                   description="Creates a deep history"
                    id="DeepHistory"
                    kind="tool"
                    label="Deep History"
@@ -289,7 +300,7 @@
                    small_icon="icons/obj16/deep_history_16x16.png">
              </entry>
              <entry
-                   description="Create a Final State"
+                   description="Creates a final state"
                    id="FinalState"
                    kind="tool"
                    label="Final State"
@@ -297,6 +308,15 @@
                    path="/tools/"
                    small_icon="icons/obj16/final_state_16x16.png">
              </entry>
+               <entry
+                   description="Creates an exit point"
+                   id="Exit"
+                   kind="tool"
+                   label="Exit Point"
+                   large_icon="icons/obj16/exit_point_16x16.png"
+                   path="/tools/"
+                   small_icon="icons/obj16/exit_point_16x16.png">
+             </entry>
          </contribution>
          <Priority
                name="Highest">

+ 2 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/StatechartElementTypes.java

@@ -39,6 +39,8 @@ public final class StatechartElementTypes extends AbstractElementTypeEnumerator
 	public static final IElementType DEEPHISTORY = getElementType("org.yakindu.sct.statechart.diagram.DeepHistory");
 	public static final IElementType SHALLOWHISTORY = getElementType("org.yakindu.sct.statechart.diagram.ShallowHistory");
 	public static final IElementType FINALSTATE = getElementType("org.yakindu.sct.statechart.diagram.FinalState");
+	public static final IElementType EXIT = getElementType("org.yakindu.sct.statechart.diagram.Exit");
+
 
 	/**
 	 * Helper method that returns the {@link IElementType} for a given semantic

+ 50 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/figures/ExitFigure.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.statechart.diagram.editor.figures;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Ellipse;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
+import org.eclipse.swt.graphics.Path;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * 
+ * @author andreas muelder
+ * 
+ */
+public class ExitFigure extends Ellipse {
+
+	@SuppressWarnings("unused")
+	private IMapMode mapMode;
+
+	public ExitFigure(IMapMode mapMode) {
+
+		this.mapMode = mapMode;
+		this.setLineWidth(1);
+		this.setForegroundColor(ColorConstants.black);
+		this.setBackgroundColor(ColorConstants.white);
+	}
+
+	@Override
+	public void paint(Graphics graphics) {
+		super.paint(graphics);
+		Path path = new Path(Display.getDefault());
+		path.addArc(getBounds().x, getBounds().y, getBounds().width - 1,
+				getBounds().height - 1, 0, 360);
+		graphics.setClip(path);
+		graphics.setLineWidth(1);
+		graphics.drawLine(bounds.getTopLeft(), bounds.getBottomRight());
+		graphics.drawLine(bounds.getTopRight(), bounds.getBottomLeft());
+		path.dispose();
+	}
+}

+ 24 - 17
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/figures/RegionFigure.java

@@ -19,17 +19,16 @@ import org.eclipse.draw2d.GridData;
 import org.eclipse.draw2d.GridLayout;
 import org.eclipse.draw2d.PositionConstants;
 import org.eclipse.draw2d.RectangleFigure;
-import org.eclipse.draw2d.StackLayout;
 import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
 import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.yakindu.sct.statechart.diagram.editor.figures.utils.GridDataFactory;
+
 /**
  * 
  * @author muelder
  * @author terfloth
- *
+ * 
  */
 public class RegionFigure extends RectangleFigure {
 
@@ -42,11 +41,11 @@ public class RegionFigure extends RectangleFigure {
 	public RegionFigure(IMapMode mapMode) {
 		this.mapMode = mapMode;
 
-		GridLayout layoutThis = new GridLayout(1,false);
-//		StackLayout layoutThis = new StackLayout();
+		GridLayout layoutThis = new GridLayout(1, false);
+		// StackLayout layoutThis = new StackLayout();
 		layoutThis.verticalSpacing = 2;
-		//layoutThis.marginHeight = 2;
-		//layoutThis.marginWidth = 2;
+		// layoutThis.marginHeight = 2;
+		// layoutThis.marginWidth = 2;
 		this.setLayoutManager(layoutThis);
 		this.setLineWidth(mapMode.DPtoLP(1));
 		createContents();
@@ -57,8 +56,10 @@ public class RegionFigure extends RectangleFigure {
 		RectangleFigure labelFigure = new RectangleFigure();
 		labelFigure.setOutline(false);
 		labelFigure.setFill(false);
-//		this.add(labelFigure, GridDataFactory.fillDefaults().align(GridData.CENTER, SWT.END).grab(true, false)
-//				.getData());
+		// this.add(labelFigure,
+		// GridDataFactory.fillDefaults().align(GridData.CENTER,
+		// SWT.END).grab(true, false)
+		// .getData());
 		GridLayout layout = new GridLayout();
 		layout.verticalSpacing = 2;
 		layout.numColumns = 1;
@@ -68,9 +69,10 @@ public class RegionFigure extends RectangleFigure {
 		/** name Label **/
 		nameLabel = new WrappingLabel();
 		nameLabel.setAlignment(PositionConstants.WEST);
-		GridData data = GridDataFactory.fillDefaults().align(GridData.CENTER, GridData.BEGINNING).grab(true, false)
+		GridData data = GridDataFactory.fillDefaults()
+				.align(GridData.CENTER, GridData.BEGINNING).grab(true, false)
 				.getData();
-		//data.heightHint = mapMode.DPtoLP(10);
+		// data.heightHint = mapMode.DPtoLP(10);
 		this.add(nameLabel, data);
 
 		/** Compartment container **/
@@ -81,7 +83,8 @@ public class RegionFigure extends RectangleFigure {
 		compartmentLayout.makeColumnsEqualWidth = true;
 		compartmentPane.setLayoutManager(compartmentLayout);
 		compartmentPane.setFill(false);
-		this.add(compartmentPane, GridDataFactory.fillDefaults().grab(true, true).getData());
+		this.add(compartmentPane,
+				GridDataFactory.fillDefaults().grab(true, true).getData());
 	}
 
 	public WrappingLabel getNameLabel() {
@@ -92,18 +95,22 @@ public class RegionFigure extends RectangleFigure {
 		return compartmentPane;
 	}
 
-	//========= drawing related methods ============================
+	// ========= drawing related methods ============================
 
-	
 	/**
-	 * Fill the shape with a vertical color gradient. The gradient mixes a white into the configured background color. 
+	 * Fill the shape with a vertical color gradient. The gradient mixes a white
+	 * into the configured background color.
 	 */
 	@Override
 	protected void fillShape(Graphics graphics) {
-		Color c=mixColor(getBackgroundColor(), ColorConstants.white, 220);
-		fillVerticalGradientRectangle(graphics, getBounds(), getBackgroundColor(), c);
+		Color c = mixColor(getBackgroundColor(), ColorConstants.white, 220);
+		fillVerticalGradientRectangle(graphics, getBounds(),
+				getBackgroundColor(), c);
 		c.dispose();
 	}
 
+	public IMapMode getMapMode() {
+		return mapMode;
+	}
 
 }

+ 17 - 18
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/figures/StateFigure.java

@@ -56,8 +56,11 @@ public class StateFigure extends RoundedRectangle {
 		// Name Label
 		nameFigure = new WrappingLabel();
 		nameFigure.setAlignment(PositionConstants.CENTER);
-		this.add(nameFigure, GridDataFactory.fillDefaults().align(GridData.CENTER, GridData.CENTER).grab(true, false)
-				.getData());
+		this.add(
+				nameFigure,
+				GridDataFactory.fillDefaults()
+						.align(GridData.CENTER, GridData.CENTER)
+						.grab(true, false).getData());
 		// Text compartment
 		textCompartmentPane = new Figure();
 		textCompartmentPane.setLayoutManager(new StackLayout());
@@ -82,41 +85,39 @@ public class StateFigure extends RoundedRectangle {
 	public Figure getTextCompartmentPane() {
 		return textCompartmentPane;
 	}
-	
-	
-	//========= drawing related methods ============================
 
-	
+	// ========= drawing related methods ============================
+
 	@Override
 	public void paintFigure(Graphics graphics) {
 		drawBlurredShadow(graphics);
 		super.paintFigure(graphics);
 	}
-	
-	
+
 	/**
-	 * Fill the shape with a vertical color gradient. The gradient mixes a white into the configured background color. 
+	 * Fill the shape with a vertical color gradient. The gradient mixes a white
+	 * into the configured background color.
 	 */
 	@Override
 	protected void fillShape(Graphics graphics) {
-		Color c=mixColor(getBackgroundColor(), ColorConstants.white, 224);
-		fillVerticalGradientRoundedRectangle(graphics, getBounds(), getCornerDimensions(), getBackgroundColor(), c);
+		Color c = mixColor(getBackgroundColor(), ColorConstants.white, 224);
+		fillVerticalGradientRoundedRectangle(graphics, getBounds(),
+				getCornerDimensions(), getBackgroundColor(), c);
 		c.dispose();
 	}
-	
-	
+
 	private void drawBlurredShadow(Graphics graphics) {
 		// draw the shadow...
 		graphics.pushState();
 
 		int size = MapModeUtil.getMapMode(this).DPtoLP(BLUR_SHADOW_WIDTH);
 		int step = MapModeUtil.getMapMode(this).DPtoLP(-1);
-		
+
 		graphics.setForegroundColor(ColorConstants.gray);
 		graphics.setLineWidth(MapModeUtil.getMapMode(this).DPtoLP(2));
 		graphics.translate(size, size);
-		graphics.setClip(graphics.getClip(new Rectangle(getBounds()))
-				.expand(size, size));
+		graphics.setClip(graphics.getClip(new Rectangle(getBounds())).expand(
+				size, size));
 		graphics.setAlpha(20);
 		outlineShape(graphics);
 		graphics.translate(step, step);
@@ -135,6 +136,4 @@ public class StateFigure extends RoundedRectangle {
 		graphics.popState();
 	}
 
-
-
 }

+ 56 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/ExitEditPart.java

@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.statechart.diagram.editparts;
+
+import org.eclipse.draw2d.Ellipse;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.handles.ConnectionHandle.HandleDirection;
+import org.eclipse.gmf.runtime.notation.View;
+import org.yakindu.sct.statechart.diagram.editor.figures.ExitFigure;
+import org.yakindu.sct.statechart.diagram.editor.figures.utils.MapModeUtils;
+import org.yakindu.sct.statechart.diagram.policies.RelationshipSemanticEditPolicy;
+
+import de.itemis.gmf.runtime.commons.editparts.EllipseFixedSizeShapeNodeEditPart;
+import de.itemis.gmf.runtime.commons.editpolicies.OneWayConnectionHandlesEditPolicy;
+
+/**
+ * 
+ * @author andreas muelder
+ * 
+ */
+public class ExitEditPart extends EllipseFixedSizeShapeNodeEditPart {
+
+	public ExitEditPart(View view) {
+		super(view);
+	}
+
+	@Override
+	protected void createDefaultEditPolicies() {
+		super.createDefaultEditPolicies();
+		installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+				new RelationshipSemanticEditPolicy());
+		installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE,
+				new OneWayConnectionHandlesEditPolicy(HandleDirection.INCOMING));
+	}
+
+	@Override
+	public Dimension getDefaultSize() {
+		return MapModeUtils.getMappedDimensions(getMapMode(),
+				MapModeUtils.DEFAULT_SMALL_NODE_DIMENSION);
+	}
+
+	@Override
+	public Ellipse getPrimaryShape() {
+		return new ExitFigure(getMapMode());
+	}
+
+}

+ 1 - 2
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/StateFigureCompartmentEditPart.java

@@ -70,9 +70,8 @@ public class StateFigureCompartmentEditPart extends
 	private static final class StateFigureCompartmentLayout extends
 			ConstrainedToolbarLayout {
 		public StateFigureCompartmentLayout() {
-			super(true);
+			super(false);
 			setSpacing(-1); // make lines overlap so it looks like a shared line 
-			setHorizontal(false);
 		}
 
 		@Override

+ 1 - 1
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/CompartmentCreationEditPolicy.java

@@ -30,7 +30,7 @@ public class CompartmentCreationEditPolicy extends CreationEditPolicy {
 	private static final ImmutableList<IElementType> fixedSizeElements = ImmutableList.of(
 			StatechartElementTypes.CHOICE, StatechartElementTypes.JUNCTION, StatechartElementTypes.ENTRY,
 			StatechartElementTypes.FINALSTATE, StatechartElementTypes.DEEPHISTORY,
-			StatechartElementTypes.SHALLOWHISTORY);
+			StatechartElementTypes.SHALLOWHISTORY, StatechartElementTypes.EXIT);
 
 	@Override
 	protected Command getCreateElementAndViewCommand(CreateViewAndElementRequest request) {

+ 1 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/SemanticHints.java

@@ -44,6 +44,7 @@ public interface SemanticHints {
 	String ENTRY = "Entry";
 
 	String FINALSTATE = "FinalState";
+	String EXIT = "Exit";
 
 	String JOIN = "Join";
 

+ 2 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/StatechartDiagramEditPartProvider.java

@@ -19,6 +19,7 @@ import org.eclipse.gmf.runtime.notation.View;
 import org.yakindu.sct.statechart.diagram.editor.StatechartDiagramEditor;
 import org.yakindu.sct.statechart.diagram.editparts.ChoiceEditPart;
 import org.yakindu.sct.statechart.diagram.editparts.EntryEditPart;
+import org.yakindu.sct.statechart.diagram.editparts.ExitEditPart;
 import org.yakindu.sct.statechart.diagram.editparts.FinalStateEditPart;
 import org.yakindu.sct.statechart.diagram.editparts.JunctionEditPart;
 import org.yakindu.sct.statechart.diagram.editparts.RegionCompartmentEditPart;
@@ -77,6 +78,7 @@ public class StatechartDiagramEditPartProvider extends AbstractEditPartProvider
 		editParts.put(TRANSITION, TransitionEditPart.class);
 		editParts
 				.put(TRANSITION_EXPRESSION, TransitionExpressionEditPart.class);
+		editParts.put(EXIT, ExitEditPart.class);
 	}
 
 	private Class<? extends IGraphicalEditPart> getClass(String semanticHint) {

+ 1 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/StatechartDiagramViewProvider.java

@@ -62,6 +62,7 @@ public class StatechartDiagramViewProvider extends AbstractViewProvider
 		factories.put(SHALLOWHISTORY, ShapeViewFactory.class);
 		factories.put(DEEPHISTORY, ShapeViewFactory.class);
 		factories.put(FINALSTATE, ShapeViewFactory.class);
+		factories.put(EXIT, ShapeViewFactory.class);
 		factories.put(JUNCTION, ShapeViewFactory.class);
 	}
 

+ 7 - 9
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/utils/SemanticHintUtil.java

@@ -10,30 +10,24 @@
  */
 package org.yakindu.sct.statechart.diagram.utils;
 
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.CHOICE;
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.ENTRY;
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.FINALSTATE;
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.JUNCTION;
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.REGION;
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.STATE;
-import static org.yakindu.sct.statechart.diagram.providers.SemanticHints.TRANSITION;
-
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.model.sct.statechart.Choice;
 import org.yakindu.model.sct.statechart.Entry;
+import org.yakindu.model.sct.statechart.Exit;
 import org.yakindu.model.sct.statechart.FinalState;
 import org.yakindu.model.sct.statechart.Junction;
 import org.yakindu.model.sct.statechart.Region;
 import org.yakindu.model.sct.statechart.State;
 import org.yakindu.model.sct.statechart.Transition;
 import org.yakindu.model.sct.statechart.util.StatechartSwitch;
+import org.yakindu.sct.statechart.diagram.providers.SemanticHints;
 
 /**
  * 
  * @author andreas muelder
  * 
  */
-public final class SemanticHintUtil {
+public final class SemanticHintUtil implements SemanticHints {
 
 	private SemanticHintUtil() {
 	}
@@ -77,6 +71,10 @@ public final class SemanticHintUtil {
 				return FINALSTATE;
 			}
 
+			public String caseExit(Exit object) {
+				return EXIT;
+			};
+
 			@Override
 			public String caseChoice(Choice object) {
 				return CHOICE;