Преглед изворни кода

Added Documentation to Property Sheets, context menu action to switch between documentation and expression

Andreas Mülder пре 13 година
родитељ
комит
f7c737c70f
17 измењених фајлова са 519 додато и 60 уклоњено
  1. 31 0
      plugins/org.yakindu.sct.ui.editor/plugin.xml
  2. 3 11
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/CreateTransitionCommand.java
  3. 15 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetDeepHistoryEntryKindCommand.java
  4. 15 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetEntryKindCommand.java
  5. 15 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetInitialEntryKindCommand.java
  6. 15 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetShallowHistoryEntryKindCommand.java
  7. 89 0
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/ToggleShowDocumentationCommand.java
  8. 15 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/ToggleSubRegionLayoutCommand.java
  9. 26 9
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableExternalXtextLabelEditPart.java
  10. 25 9
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableXtextLabelEditPart.java
  11. 54 2
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StateTextCompartmentExpressionEditPart.java
  12. 54 2
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StatechartTextExpressionEditPart.java
  13. 75 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/TransitionExpressionEditPart.java
  14. 1 1
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/AbstractTwoColumnEditorPropertySection.java
  15. 35 12
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatePropertySection.java
  16. 32 8
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatechartPropertySection.java
  17. 19 0
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/TransitionPropertySection.java

+ 31 - 0
plugins/org.yakindu.sct.ui.editor/plugin.xml

@@ -810,6 +810,11 @@
        id="org.yakindu.sct.ui.editor.commands.ToggleSubRegionLayoutCommand"
        id="org.yakindu.sct.ui.editor.commands.ToggleSubRegionLayoutCommand"
        name="Toggle Subregion Layout">
        name="Toggle Subregion Layout">
  	</command>
  	</command>
+ 	<command
+       defaultHandler="org.yakindu.sct.ui.editor.commands.ToggleShowDocumentationCommand"
+       id="org.yakindu.sct.ui.editor.commands.ToggleShowDocumentation"
+       name="Toggle Documentation">
+ 	</command>
 </extension>
 </extension>
 
 
 <extension
 <extension
@@ -872,6 +877,32 @@
              </with>
              </with>
           </visibleWhen>
           </visibleWhen>
        </command>
        </command>
+       <command
+             commandId="org.yakindu.sct.ui.editor.commands.ToggleShowDocumentation"
+             label="Toggle Documentation"
+             style="push">
+          <visibleWhen
+                checkEnabled="false">
+             <with
+                   variable="selection">
+                <iterate
+                      ifEmpty="false"
+                      operator="and">
+                   <or>
+                      <instanceof
+                            value="org.yakindu.sct.ui.editor.editparts.TransitionEditPart">
+                      </instanceof>
+                      <instanceof
+                            value="org.yakindu.sct.ui.editor.editparts.StateEditPart">
+                      </instanceof>
+                      <instanceof
+                            value="org.yakindu.sct.ui.editor.editparts.StatechartTextEditPart">
+                      </instanceof>
+                   </or>
+                </iterate>
+             </with>
+          </visibleWhen>
+       </command>
     </menuContribution>
     </menuContribution>
  </extension>
  </extension>
  
  

+ 3 - 11
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/CreateTransitionCommand.java

@@ -30,11 +30,11 @@ import org.yakindu.sct.model.sgraph.Vertex;
  * 
  * 
  */
  */
 public class CreateTransitionCommand extends EditElementCommand {
 public class CreateTransitionCommand extends EditElementCommand {
-	
+
 	public CreateTransitionCommand(CreateRelationshipRequest request) {
 	public CreateTransitionCommand(CreateRelationshipRequest request) {
 		super(request.getLabel(), null, request);
 		super(request.getLabel(), null, request);
 	}
 	}
-	
+
 	@Override
 	@Override
 	protected CreateRelationshipRequest getRequest() {
 	protected CreateRelationshipRequest getRequest() {
 		return (CreateRelationshipRequest) super.getRequest();
 		return (CreateRelationshipRequest) super.getRequest();
@@ -44,7 +44,7 @@ public class CreateTransitionCommand extends EditElementCommand {
 	public boolean canExecute() {
 	public boolean canExecute() {
 		EObject source = getRequest().getSource();
 		EObject source = getRequest().getSource();
 		EObject target = getRequest().getTarget();
 		EObject target = getRequest().getTarget();
-		
+
 		if (source == null && target == null) {
 		if (source == null && target == null) {
 			return false;
 			return false;
 		}
 		}
@@ -58,16 +58,8 @@ public class CreateTransitionCommand extends EditElementCommand {
 	@Override
 	@Override
 	protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
 	protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
 			IAdaptable info) throws ExecutionException {
 			IAdaptable info) throws ExecutionException {
-
-		// This class casts should be save because they are validated in
-		// canExecute() method which is called by the framework before
-		// execution.
 		Vertex source = (Vertex) getRequest().getSource();
 		Vertex source = (Vertex) getRequest().getSource();
 		Vertex target = (Vertex) getRequest().getTarget();
 		Vertex target = (Vertex) getRequest().getTarget();
-//		if (!canExecute()) {
-//			throw new ExecutionException(
-//					"Invalid arguments in create link command");
-//		}
 		if (source != null && target != null) {
 		if (source != null && target != null) {
 			Transition transition = SGraphFactory.eINSTANCE.createTransition();
 			Transition transition = SGraphFactory.eINSTANCE.createTransition();
 			source.getOutgoingTransitions().add(transition);
 			source.getOutgoingTransitions().add(transition);

+ 15 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetDeepHistoryEntryKindCommand.java

@@ -1,7 +1,21 @@
+/**
+ * Copyright (c) 2012 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.ui.editor.commands;
 package org.yakindu.sct.ui.editor.commands;
 
 
 import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.EntryKind;
-
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public class SetDeepHistoryEntryKindCommand extends SetEntryKindCommand {
 public class SetDeepHistoryEntryKindCommand extends SetEntryKindCommand {
 
 
 	public EntryKind getEntryKind() {
 	public EntryKind getEntryKind() {

+ 15 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetEntryKindCommand.java

@@ -1,3 +1,13 @@
+/**
+ * Copyright (c) 2012 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.ui.editor.commands;
 package org.yakindu.sct.ui.editor.commands;
 
 
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.AbstractHandler;
@@ -16,7 +26,11 @@ import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.editparts.EntryEditPart;
 import org.yakindu.sct.ui.editor.editparts.EntryEditPart;
-
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public abstract class SetEntryKindCommand extends AbstractHandler {
 public abstract class SetEntryKindCommand extends AbstractHandler {
 
 
 	private Entry entry;
 	private Entry entry;

+ 15 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetInitialEntryKindCommand.java

@@ -1,7 +1,21 @@
+/**
+ * Copyright (c) 2012 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.ui.editor.commands;
 package org.yakindu.sct.ui.editor.commands;
 
 
 import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.EntryKind;
-
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public class SetInitialEntryKindCommand extends SetEntryKindCommand {
 public class SetInitialEntryKindCommand extends SetEntryKindCommand {
 
 
 	public EntryKind getEntryKind() {
 	public EntryKind getEntryKind() {

+ 15 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/SetShallowHistoryEntryKindCommand.java

@@ -1,7 +1,21 @@
+/**
+ * Copyright (c) 2012 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.ui.editor.commands;
 package org.yakindu.sct.ui.editor.commands;
 
 
 import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.EntryKind;
-
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public class SetShallowHistoryEntryKindCommand extends SetEntryKindCommand {
 public class SetShallowHistoryEntryKindCommand extends SetEntryKindCommand {
 
 
 	@Override
 	@Override

+ 89 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/ToggleShowDocumentationCommand.java

@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2013 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 (http://www.statecharts.org)
+ * 
+ */
+package org.yakindu.sct.ui.editor.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.StringValueStyle;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.yakindu.base.base.BasePackage;
+import org.yakindu.sct.model.sgraph.SGraphPackage;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class ToggleShowDocumentationCommand extends AbstractHandler {
+
+	public static final String FEATURE_TO_SHOW = "featureToShow";
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		View view = unwrap(HandlerUtil.getCurrentSelection(event));
+		StringValueStyle style = (StringValueStyle) view.getNamedStyle(
+				NotationPackage.Literals.STRING_VALUE_STYLE, FEATURE_TO_SHOW);
+		if (style == null) {
+			style = createInitialStyle(view);
+		}
+		String featureName = style.getStringValue().equals(
+				SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION
+						.getName()) ? BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+				.getName()
+				: SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION
+						.getName();
+		SetValueCommand cmd = new SetValueCommand(new SetRequest(style,
+				NotationPackage.Literals.STRING_VALUE_STYLE__STRING_VALUE,
+				featureName));
+		executeCommand(cmd);
+		return null;
+
+	}
+
+	protected StringValueStyle createInitialStyle(View view) {
+		StringValueStyle style = NotationFactory.eINSTANCE
+				.createStringValueStyle();
+		style.setName(FEATURE_TO_SHOW);
+		style.setStringValue(SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION
+				.getName());
+		SetValueCommand cmd = new SetValueCommand(new SetRequest(view,
+				NotationPackage.Literals.VIEW__STYLES, style));
+		executeCommand(cmd);
+		return style;
+	}
+
+	protected void executeCommand(SetValueCommand setcommand) {
+		try {
+			OperationHistoryFactory.getOperationHistory().execute(setcommand,
+					new NullProgressMonitor(), null);
+		} catch (ExecutionException e) {
+			e.printStackTrace();
+		}
+	}
+
+	protected View unwrap(ISelection selection) {
+		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+		Object firstElement = structuredSelection.getFirstElement();
+		if (firstElement == null)
+			return null;
+		return ((IGraphicalEditPart) firstElement).getNotationView();
+	}
+}

+ 15 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/commands/ToggleSubRegionLayoutCommand.java

@@ -1,3 +1,13 @@
+/**
+ * Copyright (c) 2012 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.ui.editor.commands;
 package org.yakindu.sct.ui.editor.commands;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -24,7 +34,11 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.yakindu.sct.ui.editor.editparts.StateEditPart;
 import org.yakindu.sct.ui.editor.editparts.StateEditPart;
-
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public class ToggleSubRegionLayoutCommand extends AbstractHandler {
 public class ToggleSubRegionLayoutCommand extends AbstractHandler {
 
 
 	private View view;
 	private View view;

+ 26 - 9
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableExternalXtextLabelEditPart.java

@@ -10,6 +10,7 @@
  */
  */
 package org.yakindu.sct.ui.editor.editparts;
 package org.yakindu.sct.ui.editor.editparts;
 
 
+import org.eclipse.draw2d.Label;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EObject;
@@ -24,6 +25,7 @@ import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.viewers.ICellEditorValidator;
 import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.yakindu.base.base.BasePackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SpecificationElement;
 import org.yakindu.sct.model.sgraph.SpecificationElement;
 import org.yakindu.sct.ui.editor.DiagramActivator;
 import org.yakindu.sct.ui.editor.DiagramActivator;
@@ -98,15 +100,6 @@ public abstract class PlugableExternalXtextLabelEditPart extends
 		return super.resolveSemanticElement();
 		return super.resolveSemanticElement();
 	}
 	}
 
 
-	@Override
-	protected void handleNotificationEvent(Notification notification) {
-		if (notification.getFeature() == getFeature()) {
-			refreshVisuals();
-		} else {
-			super.handleNotificationEvent(notification);
-		}
-	}
-
 	private EAttribute getFeature() {
 	private EAttribute getFeature() {
 		return SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION;
 		return SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION;
 	}
 	}
@@ -136,4 +129,28 @@ public abstract class PlugableExternalXtextLabelEditPart extends
 		return null;
 		return null;
 	}
 	}
 
 
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		updateTooltipText();
+
+	}
+
+	protected void updateTooltipText() {
+		Label tooltip = new Label((String) resolveSemanticElement().eGet(
+				BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION));
+		getFigure().setToolTip(tooltip);
+	}
+
+	@Override
+	protected void handleNotificationEvent(Notification notification) {
+		if (notification.getFeature() == getFeature()) {
+			refreshVisuals();
+		} else if (notification.getFeature() == BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION) {
+			refreshVisuals();
+		} else {
+		}
+		super.handleNotificationEvent(notification);
+	}
+
 }
 }

+ 25 - 9
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableXtextLabelEditPart.java

@@ -10,6 +10,7 @@
  */
  */
 package org.yakindu.sct.ui.editor.editparts;
 package org.yakindu.sct.ui.editor.editparts;
 
 
+import org.eclipse.draw2d.Label;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EObject;
@@ -24,6 +25,7 @@ import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.viewers.ICellEditorValidator;
 import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.yakindu.base.base.BasePackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SpecificationElement;
 import org.yakindu.sct.model.sgraph.SpecificationElement;
 import org.yakindu.sct.ui.editor.DiagramActivator;
 import org.yakindu.sct.ui.editor.DiagramActivator;
@@ -97,15 +99,6 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart
 		return resolveSemanticElement();
 		return resolveSemanticElement();
 	}
 	}
 
 
-	@Override
-	protected void handleNotificationEvent(Notification notification) {
-		if (notification.getFeature() == getFeature()) {
-			refreshVisuals();
-		} else {
-			super.handleNotificationEvent(notification);
-		}
-	}
-
 	protected EAttribute getFeature() {
 	protected EAttribute getFeature() {
 		return SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION;
 		return SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION;
 	}
 	}
@@ -135,4 +128,27 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart
 		return null;
 		return null;
 	}
 	}
 
 
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		updateTooltipText();
+
+	}
+
+	protected void updateTooltipText() {
+		Label tooltip = new Label((String) resolveSemanticElement().eGet(
+				BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION));
+		getFigure().setToolTip(tooltip);
+	}
+
+	@Override
+	protected void handleNotificationEvent(Notification notification) {
+		if (notification.getFeature() == getFeature()) {
+			refreshVisuals();
+		} else if (notification.getFeature() == BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION) {
+			refreshVisuals();
+		} else {
+		}
+		super.handleNotificationEvent(notification);
+	}
 }
 }

+ 54 - 2
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StateTextCompartmentExpressionEditPart.java

@@ -10,9 +10,16 @@
  */
  */
 package org.yakindu.sct.ui.editor.editparts;
 package org.yakindu.sct.ui.editor.editparts;
 
 
+import org.eclipse.draw2d.Label;
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.EditPolicy;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.StringValueStyle;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWT;
+import org.yakindu.base.base.BasePackage;
+import org.yakindu.sct.model.sgraph.State;
+import org.yakindu.sct.ui.editor.commands.ToggleShowDocumentationCommand;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy;
 import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy;
 import org.yakindu.sct.ui.editor.utils.HelpContextIds;
 import org.yakindu.sct.ui.editor.utils.HelpContextIds;
@@ -53,8 +60,7 @@ public class StateTextCompartmentExpressionEditPart extends
 	protected void createDefaultEditPolicies() {
 	protected void createDefaultEditPolicies() {
 		super.createDefaultEditPolicies();
 		super.createDefaultEditPolicies();
 		removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
 		removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
-		installEditPolicy(
-				EditPolicy.SELECTION_FEEDBACK_ROLE,
+		installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
 				new ContextSensitiveHelpPolicy(
 				new ContextSensitiveHelpPolicy(
 						HelpContextIds.SC_PROPERTIES_STATE_EXPRESSION));
 						HelpContextIds.SC_PROPERTIES_STATE_EXPRESSION));
 	}
 	}
@@ -70,4 +76,50 @@ public class StateTextCompartmentExpressionEditPart extends
 	protected int getEditorStyles() {
 	protected int getEditorStyles() {
 		return SWT.MULTI;
 		return SWT.MULTI;
 	}
 	}
+
+	@Override
+	public State resolveSemanticElement() {
+		return (State) super.resolveSemanticElement();
+	}
+
+	@Override
+	protected void updateTooltipText() {
+		StringValueStyle style = getFeatureToShowStyle();
+		if (style != null
+				&& style.getStringValue().equals(
+						BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+								.getName())) {
+			Label tooltip = new Label((String) resolveSemanticElement()
+					.getSpecification());
+			getFigure().setToolTip(tooltip);
+		} else
+			super.updateTooltipText();
+	}
+
+	@Override
+	protected void updateLabelText() {
+		StringValueStyle style = getFeatureToShowStyle();
+		if (style != null
+				&& style.getStringValue().equals(
+						BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+								.getName())) {
+			getFigure().setText(resolveSemanticElement().getDocumentation());
+		} else
+			super.updateLabelText();
+	}
+
+	private StringValueStyle getFeatureToShowStyle() {
+		StringValueStyle style = (StringValueStyle) getParentStateView()
+				.getNamedStyle(NotationPackage.Literals.STRING_VALUE_STYLE,
+						ToggleShowDocumentationCommand.FEATURE_TO_SHOW);
+		return style;
+	}
+
+	@Override
+	protected void handleNotificationEvent(Notification notification) {
+		if (notification.getFeature() == NotationPackage.Literals.STRING_VALUE_STYLE__STRING_VALUE) {
+			refreshVisuals();
+		}
+		super.handleNotificationEvent(notification);
+	}
 }
 }

+ 54 - 2
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StatechartTextExpressionEditPart.java

@@ -10,11 +10,18 @@
  */
  */
 package org.yakindu.sct.ui.editor.editparts;
 package org.yakindu.sct.ui.editor.editparts;
 
 
+import org.eclipse.draw2d.Label;
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.editpolicies.RootComponentEditPolicy;
 import org.eclipse.gef.editpolicies.RootComponentEditPolicy;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.StringValueStyle;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWT;
+import org.yakindu.base.base.BasePackage;
+import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.ui.editor.commands.ToggleShowDocumentationCommand;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy;
 import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy;
 import org.yakindu.sct.ui.editor.utils.HelpContextIds;
 import org.yakindu.sct.ui.editor.utils.HelpContextIds;
@@ -56,8 +63,7 @@ public class StatechartTextExpressionEditPart extends
 		installEditPolicy(EditPolicy.COMPONENT_ROLE,
 		installEditPolicy(EditPolicy.COMPONENT_ROLE,
 				new RootComponentEditPolicy());
 				new RootComponentEditPolicy());
 		removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
 		removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
-		installEditPolicy(
-				EditPolicy.SELECTION_FEEDBACK_ROLE,
+		installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
 				new ContextSensitiveHelpPolicy(
 				new ContextSensitiveHelpPolicy(
 						HelpContextIds.SC_PROPERTIES_STATECHART_EXPRESSION));
 						HelpContextIds.SC_PROPERTIES_STATECHART_EXPRESSION));
 		removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
 		removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
@@ -75,4 +81,50 @@ public class StatechartTextExpressionEditPart extends
 		return SWT.MULTI | SWT.V_SCROLL;
 		return SWT.MULTI | SWT.V_SCROLL;
 	}
 	}
 
 
+	@Override
+	public Statechart resolveSemanticElement() {
+		return (Statechart) super.resolveSemanticElement();
+	}
+
+	@Override
+	protected void updateTooltipText() {
+		StringValueStyle style = getFeatureToShowStyle();
+		if (style != null
+				&& style.getStringValue().equals(
+						BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+								.getName())) {
+			Label tooltip = new Label((String) resolveSemanticElement()
+					.getSpecification());
+			getFigure().setToolTip(tooltip);
+		} else
+			super.updateTooltipText();
+	}
+
+	@Override
+	protected void updateLabelText() {
+		StringValueStyle style = getFeatureToShowStyle();
+		if (style != null
+				&& style.getStringValue().equals(
+						BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+								.getName())) {
+			getFigure().setText(resolveSemanticElement().getDocumentation());
+		} else
+			super.updateLabelText();
+	}
+
+	private StringValueStyle getFeatureToShowStyle() {
+		StringValueStyle style = (StringValueStyle) getParentStateView()
+				.getNamedStyle(NotationPackage.Literals.STRING_VALUE_STYLE,
+						ToggleShowDocumentationCommand.FEATURE_TO_SHOW);
+		return style;
+	}
+
+	@Override
+	protected void handleNotificationEvent(Notification notification) {
+		if (notification.getFeature() == NotationPackage.Literals.STRING_VALUE_STYLE__STRING_VALUE) {
+			refreshVisuals();
+		}
+		super.handleNotificationEvent(notification);
+	}
+
 }
 }

+ 75 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/TransitionExpressionEditPart.java

@@ -1,5 +1,5 @@
 /**
 /**
-* Copyright (c) 2011 committers of YAKINDU and others.
+ * Copyright (c) 2011 committers of YAKINDU and others.
  * All rights reserved. This program and the accompanying materials
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * which accompanies this distribution, and is available at
@@ -10,9 +10,16 @@
  */
  */
 package org.yakindu.sct.ui.editor.editparts;
 package org.yakindu.sct.ui.editor.editparts;
 
 
+import org.eclipse.draw2d.Label;
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.EditPolicy;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.StringValueStyle;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWT;
+import org.yakindu.base.base.BasePackage;
+import org.yakindu.sct.model.sgraph.Transition;
+import org.yakindu.sct.ui.editor.commands.ToggleShowDocumentationCommand;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy;
 import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy;
 import org.yakindu.sct.ui.editor.policies.TransitionExpressionComponentEditPolicy;
 import org.yakindu.sct.ui.editor.policies.TransitionExpressionComponentEditPolicy;
@@ -32,6 +39,24 @@ public class TransitionExpressionEditPart extends
 		super(view, SemanticTarget.TransitionSpecification);
 		super(view, SemanticTarget.TransitionSpecification);
 	}
 	}
 
 
+	@Override
+	protected void addNotationalListeners() {
+		super.addNotationalListeners();
+		View parentStateView = getParentView();
+		if (parentStateView != null) {
+			addListenerFilter("parentView", this, parentStateView);
+		}
+	}
+
+	@Override
+	protected void removeNotationalListeners() {
+		View parentStateView = getParentView();
+		if (parentStateView != null) {
+			removeListenerFilter("parentView");
+		}
+		super.removeNotationalListeners();
+	}
+
 	@Override
 	@Override
 	protected void createDefaultEditPolicies() {
 	protected void createDefaultEditPolicies() {
 		super.createDefaultEditPolicies();
 		super.createDefaultEditPolicies();
@@ -47,4 +72,53 @@ public class TransitionExpressionEditPart extends
 		return SWT.MULTI;
 		return SWT.MULTI;
 	}
 	}
 
 
+	@Override
+	public Transition resolveSemanticElement() {
+		return (Transition) super.resolveSemanticElement();
+	}
+
+	private View getParentView() {
+		return ((TransitionEditPart) getParent()).getNotationView();
+	}
+
+	@Override
+	protected void updateTooltipText() {
+		StringValueStyle style = getFeatureToShowStyle();
+		if (style != null
+				&& style.getStringValue().equals(
+						BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+								.getName())) {
+			Label tooltip = new Label((String) resolveSemanticElement()
+					.getSpecification());
+			getFigure().setToolTip(tooltip);
+		} else
+			super.updateTooltipText();
+	}
+
+	@Override
+	protected void updateLabelText() {
+		StringValueStyle style = getFeatureToShowStyle();
+		if (style != null
+				&& style.getStringValue().equals(
+						BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION
+								.getName())) {
+			getFigure().setText(resolveSemanticElement().getDocumentation());
+		} else
+			super.updateLabelText();
+	}
+
+	private StringValueStyle getFeatureToShowStyle() {
+		StringValueStyle style = (StringValueStyle) getParentView()
+				.getNamedStyle(NotationPackage.Literals.STRING_VALUE_STYLE,
+						ToggleShowDocumentationCommand.FEATURE_TO_SHOW);
+		return style;
+	}
+
+	@Override
+	protected void handleNotificationEvent(Notification notification) {
+		if (notification.getFeature() == NotationPackage.Literals.STRING_VALUE_STYLE__STRING_VALUE) {
+			refreshVisuals();
+		}
+		super.handleNotificationEvent(notification);
+	}
 }
 }

+ 1 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/AbstractTwoColumnEditorPropertySection.java

@@ -40,7 +40,7 @@ public abstract class AbstractTwoColumnEditorPropertySection extends
 		leftColumn.setLayout(createLeftColumnLayout());
 		leftColumn.setLayout(createLeftColumnLayout());
 		Composite rightColumn = getToolkit().createComposite(sashForm);
 		Composite rightColumn = getToolkit().createComposite(sashForm);
 		rightColumn.setLayout(createRightColumnLayout());
 		rightColumn.setLayout(createRightColumnLayout());
-		sashForm.setWeights(new int[] { 2, 3 });
+		sashForm.setWeights(new int[] { 1, 1 });
 		createLeftColumnControls(leftColumn);
 		createLeftColumnControls(leftColumn);
 		createRightColumnControls(rightColumn);
 		createRightColumnControls(rightColumn);
 	}
 	}

+ 35 - 12
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatePropertySection.java

@@ -40,6 +40,7 @@ import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
 import org.eclipse.xtext.naming.QualifiedName;
 import org.eclipse.xtext.naming.QualifiedName;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
@@ -62,6 +63,7 @@ public class StatePropertySection extends
 	private Label lblSubmachine;
 	private Label lblSubmachine;
 	private Control txtSpecification;
 	private Control txtSpecification;
 	private Control txtName;
 	private Control txtName;
+	private Text txtDoc;
 
 
 	private UpdateLabelAdapter updateLabelAdapter = new UpdateLabelAdapter();
 	private UpdateLabelAdapter updateLabelAdapter = new UpdateLabelAdapter();
 	private OrderElementControl orderElementControl;
 	private OrderElementControl orderElementControl;
@@ -73,24 +75,34 @@ public class StatePropertySection extends
 
 
 	@Override
 	@Override
 	protected void createLeftColumnControls(Composite leftColumn) {
 	protected void createLeftColumnControls(Composite leftColumn) {
+		createNameControl(leftColumn);
 		createSpecificationControl(leftColumn);
 		createSpecificationControl(leftColumn);
 	}
 	}
 
 
 	@Override
 	@Override
 	protected void createRightColumnControls(Composite rightColumn) {
 	protected void createRightColumnControls(Composite rightColumn) {
-		createNameControl(rightColumn);
-		createSubmachineControl(rightColumn);
+		createDocumentationControl(rightColumn);
 		createTransitionsControl(rightColumn);
 		createTransitionsControl(rightColumn);
+		createSubmachineControl(rightColumn);
 	}
 	}
 
 
-	private void createNameControl(final Composite parent) {
+	protected void createNameControl(final Composite parent) {
 		Label lblName = getToolkit().createLabel(parent, "State Name: ");
 		Label lblName = getToolkit().createLabel(parent, "State Name: ");
 		txtName = getToolkit().createText(parent, "");
 		txtName = getToolkit().createText(parent, "");
-		GridDataFactory.fillDefaults().applyTo(lblName);
-		GridDataFactory.fillDefaults().applyTo(txtName);
+		GridDataFactory.fillDefaults().span(2, 1).applyTo(lblName);
+		new Label(parent, SWT.NONE);
+		GridDataFactory.fillDefaults().grab(true, false).applyTo(txtName);
+	}
+
+	protected void createDocumentationControl(Composite rightColumn) {
+		Label lblDocumentation = getToolkit().createLabel(rightColumn,
+				"Documentation: ");
+		txtDoc = getToolkit().createText(rightColumn, "", SWT.MULTI);
+		GridDataFactory.fillDefaults().applyTo(lblDocumentation);
+		GridDataFactory.fillDefaults().grab(true, true).applyTo(txtDoc);
 	}
 	}
 
 
-	private void createSpecificationControl(final Composite parent) {
+	protected void createSpecificationControl(final Composite parent) {
 		Injector injector = getInjector(SemanticTarget.StateSpecification);
 		Injector injector = getInjector(SemanticTarget.StateSpecification);
 		if (injector != null) {
 		if (injector != null) {
 			txtSpecification = new StyledText(parent, SWT.MULTI | SWT.BORDER
 			txtSpecification = new StyledText(parent, SWT.MULTI | SWT.BORDER
@@ -106,7 +118,7 @@ public class StatePropertySection extends
 				.applyTo(txtSpecification);
 				.applyTo(txtSpecification);
 	}
 	}
 
 
-	private void createSubmachineControl(final Composite parent) {
+	protected void createSubmachineControl(final Composite parent) {
 		Label label = getToolkit().createLabel(parent, "State Submachine:");
 		Label label = getToolkit().createLabel(parent, "State Submachine:");
 		Composite composite = new Composite(parent, SWT.NONE);
 		Composite composite = new Composite(parent, SWT.NONE);
 		composite.setBackground(ColorConstants.white);
 		composite.setBackground(ColorConstants.white);
@@ -125,7 +137,7 @@ public class StatePropertySection extends
 				.applyTo(openDialog);
 				.applyTo(openDialog);
 	}
 	}
 
 
-	private void createTransitionsControl(Composite parent) {
+	protected void createTransitionsControl(Composite parent) {
 		Label label = getToolkit().createLabel(parent, "Transition Priority:");
 		Label label = getToolkit().createLabel(parent, "Transition Priority:");
 		GridDataFactory.fillDefaults().applyTo(label);
 		GridDataFactory.fillDefaults().applyTo(label);
 		orderElementControl = new OrderElementControl(parent,
 		orderElementControl = new OrderElementControl(parent,
@@ -142,11 +154,22 @@ public class StatePropertySection extends
 	public void bindModel(EMFDataBindingContext context) {
 	public void bindModel(EMFDataBindingContext context) {
 		bindNameControl(context);
 		bindNameControl(context);
 		bindSpecificationControl(context);
 		bindSpecificationControl(context);
+		bindDocumentationControl(context);
 		orderElementControl.refreshInput();
 		orderElementControl.refreshInput();
 		updateLabel();
 		updateLabel();
 	}
 	}
 
 
-	private void bindSpecificationControl(EMFDataBindingContext context) {
+	private void bindDocumentationControl(EMFDataBindingContext context) {
+		IEMFValueProperty property = EMFEditProperties.value(
+				TransactionUtil.getEditingDomain(eObject),
+				BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION);
+		ISWTObservableValue observe = WidgetProperties.text(
+				new int[] { SWT.FocusOut, SWT.DefaultSelection }).observe(
+				txtDoc);
+		context.bindValue(observe, property.observe(eObject));
+	}
+
+	protected void bindSpecificationControl(EMFDataBindingContext context) {
 		IEMFValueProperty specificationProperty = EMFEditProperties.value(
 		IEMFValueProperty specificationProperty = EMFEditProperties.value(
 				TransactionUtil.getEditingDomain(eObject),
 				TransactionUtil.getEditingDomain(eObject),
 				SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION);
 				SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION);
@@ -166,7 +189,7 @@ public class StatePropertySection extends
 				});
 				});
 	}
 	}
 
 
-	private void bindNameControl(EMFDataBindingContext context) {
+	protected void bindNameControl(EMFDataBindingContext context) {
 		IEMFValueProperty nameProperty = EMFEditProperties.value(
 		IEMFValueProperty nameProperty = EMFEditProperties.value(
 				TransactionUtil.getEditingDomain(eObject),
 				TransactionUtil.getEditingDomain(eObject),
 				BasePackage.Literals.NAMED_ELEMENT__NAME);
 				BasePackage.Literals.NAMED_ELEMENT__NAME);
@@ -206,7 +229,7 @@ public class StatePropertySection extends
 		return super.getEObject();
 		return super.getEObject();
 	}
 	}
 
 
-	private final class OpenDialogHandler implements Listener {
+	protected final class OpenDialogHandler implements Listener {
 		private final Composite parent;
 		private final Composite parent;
 
 
 		private OpenDialogHandler(Composite parent) {
 		private OpenDialogHandler(Composite parent) {
@@ -238,7 +261,7 @@ public class StatePropertySection extends
 		}
 		}
 	}
 	}
 
 
-	private final class UpdateLabelAdapter extends AdapterImpl {
+	protected final class UpdateLabelAdapter extends AdapterImpl {
 		@Override
 		@Override
 		public void notifyChanged(Notification msg) {
 		public void notifyChanged(Notification msg) {
 			if (msg.getFeature() == SGraphPackage.Literals.STATE__SUBSTATECHART_ID) {
 			if (msg.getFeature() == SGraphPackage.Literals.STATE__SUBSTATECHART_ID) {

+ 32 - 8
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatechartPropertySection.java

@@ -49,6 +49,7 @@ public class StatechartPropertySection extends
 	private Control textControl;
 	private Control textControl;
 	private Text txtName;
 	private Text txtName;
 	private OrderElementControl orderElementControl;
 	private OrderElementControl orderElementControl;
+	private Text documentation;
 
 
 	@Override
 	@Override
 	protected Layout createLeftColumnLayout() {
 	protected Layout createLeftColumnLayout() {
@@ -57,24 +58,26 @@ public class StatechartPropertySection extends
 
 
 	@Override
 	@Override
 	protected void createLeftColumnControls(Composite leftColumn) {
 	protected void createLeftColumnControls(Composite leftColumn) {
+		createNameControl(leftColumn);
 		createSpecificationControl(leftColumn);
 		createSpecificationControl(leftColumn);
 	}
 	}
 
 
 	@Override
 	@Override
 	protected void createRightColumnControls(Composite rightColumn) {
 	protected void createRightColumnControls(Composite rightColumn) {
-		createNameControl(rightColumn);
+		createDocumentationControl(rightColumn);
 		createRegionsControl(rightColumn);
 		createRegionsControl(rightColumn);
 
 
 	}
 	}
 
 
-	private void createNameControl(Composite parent) {
+	protected void createNameControl(Composite parent) {
 		Label lblName = getToolkit().createLabel(parent, "Statechart Name: ");
 		Label lblName = getToolkit().createLabel(parent, "Statechart Name: ");
 		txtName = getToolkit().createText(parent, "");
 		txtName = getToolkit().createText(parent, "");
-		GridDataFactory.fillDefaults().applyTo(txtName);
-		GridDataFactory.fillDefaults().applyTo(lblName);
+		GridDataFactory.fillDefaults().span(2,1).applyTo(lblName);
+		new Label(parent, SWT.NONE);
+		GridDataFactory.fillDefaults().grab(true, false).applyTo(txtName);
 	}
 	}
 
 
-	private void createRegionsControl(Composite rightColumn) {
+	protected void createRegionsControl(Composite rightColumn) {
 		Label label = getToolkit().createLabel(rightColumn, "Region Priority:");
 		Label label = getToolkit().createLabel(rightColumn, "Region Priority:");
 		GridDataFactory.fillDefaults().applyTo(label);
 		GridDataFactory.fillDefaults().applyTo(label);
 		orderElementControl = new OrderElementControl(rightColumn,
 		orderElementControl = new OrderElementControl(rightColumn,
@@ -83,7 +86,17 @@ public class StatechartPropertySection extends
 				.applyTo(orderElementControl);
 				.applyTo(orderElementControl);
 	}
 	}
 
 
-	private void createSpecificationControl(final Composite parent) {
+	protected void createDocumentationControl(Composite rightColumn) {
+		Label lblDocumentation = getToolkit().createLabel(rightColumn,
+				"Documentation: ");
+		documentation = getToolkit().createText(rightColumn, "", SWT.MULTI);
+		GridDataFactory.fillDefaults().applyTo(lblDocumentation);
+		GridDataFactory.fillDefaults().grab(true, true).applyTo(documentation);
+
+	}
+
+	protected void createSpecificationControl(final Composite parent) {
+		
 		Injector injector = getInjector(SemanticTarget.StatechartSpecification);
 		Injector injector = getInjector(SemanticTarget.StatechartSpecification);
 		if (injector != null) {
 		if (injector != null) {
 			textControl = new StyledText(parent, SWT.MULTI | SWT.BORDER
 			textControl = new StyledText(parent, SWT.MULTI | SWT.BORDER
@@ -103,10 +116,21 @@ public class StatechartPropertySection extends
 	public void bindModel(EMFDataBindingContext context) {
 	public void bindModel(EMFDataBindingContext context) {
 		bindNameControl(context);
 		bindNameControl(context);
 		bindSpecificationControl(context);
 		bindSpecificationControl(context);
+		bindDocumentationControl(context);
 		orderElementControl.refreshInput();
 		orderElementControl.refreshInput();
 	}
 	}
 
 
-	private void bindSpecificationControl(EMFDataBindingContext context) {
+	private void bindDocumentationControl(EMFDataBindingContext context) {
+		IEMFValueProperty property = EMFEditProperties.value(
+				TransactionUtil.getEditingDomain(eObject),
+				BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION);
+		ISWTObservableValue observe = WidgetProperties.text(
+				new int[] { SWT.FocusOut, SWT.DefaultSelection }).observe(
+				documentation);
+		context.bindValue(observe, property.observe(eObject));
+	}
+
+	protected void bindSpecificationControl(EMFDataBindingContext context) {
 		IEMFValueProperty modelProperty = EMFEditProperties.value(
 		IEMFValueProperty modelProperty = EMFEditProperties.value(
 				TransactionUtil.getEditingDomain(eObject),
 				TransactionUtil.getEditingDomain(eObject),
 				SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION);
 				SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION);
@@ -126,7 +150,7 @@ public class StatechartPropertySection extends
 
 
 	}
 	}
 
 
-	private void bindNameControl(EMFDataBindingContext context) {
+	protected void bindNameControl(EMFDataBindingContext context) {
 		IEMFValueProperty property = EMFEditProperties.value(
 		IEMFValueProperty property = EMFEditProperties.value(
 				TransactionUtil.getEditingDomain(eObject),
 				TransactionUtil.getEditingDomain(eObject),
 				BasePackage.Literals.NAMED_ELEMENT__NAME);
 				BasePackage.Literals.NAMED_ELEMENT__NAME);

+ 19 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/TransitionPropertySection.java

@@ -26,7 +26,10 @@ import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Layout;
+import org.eclipse.swt.widgets.Text;
+import org.yakindu.base.base.BasePackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.extensions.ExpressionLanguageProviderExtensions.SemanticTarget;
 import org.yakindu.sct.ui.editor.utils.HelpContextIds;
 import org.yakindu.sct.ui.editor.utils.HelpContextIds;
@@ -41,6 +44,7 @@ import com.google.inject.Injector;
 public class TransitionPropertySection extends AbstractEditorPropertySection {
 public class TransitionPropertySection extends AbstractEditorPropertySection {
 
 
 	private Control textControl;
 	private Control textControl;
+	private Text txtDoc;
 
 
 	@Override
 	@Override
 	protected Layout createBodyLayout() {
 	protected Layout createBodyLayout() {
@@ -63,6 +67,12 @@ public class TransitionPropertySection extends AbstractEditorPropertySection {
 		GridDataFactory.fillDefaults().grab(true, true).hint(parent.getSize())
 		GridDataFactory.fillDefaults().grab(true, true).hint(parent.getSize())
 				.applyTo(textControl);
 				.applyTo(textControl);
 
 
+		Label lblDocumentation = getToolkit().createLabel(parent,
+				"Documentation: ");
+		txtDoc = getToolkit().createText(parent, "", SWT.MULTI);
+		GridDataFactory.fillDefaults().span(2,1).applyTo(lblDocumentation);
+		GridDataFactory.fillDefaults().grab(true,true).applyTo(txtDoc);
+
 	}
 	}
 
 
 	@Override
 	@Override
@@ -83,6 +93,15 @@ public class TransitionPropertySection extends AbstractEditorPropertySection {
 						return Status.OK_STATUS;
 						return Status.OK_STATUS;
 					}
 					}
 				});
 				});
+
+		IEMFValueProperty property = EMFEditProperties.value(
+				TransactionUtil.getEditingDomain(eObject),
+				BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION);
+		ISWTObservableValue observe = WidgetProperties.text(
+				new int[] { SWT.FocusOut, SWT.DefaultSelection }).observe(
+				txtDoc);
+		context.bindValue(observe, property.observe(eObject));
+
 	}
 	}
 
 
 }
 }