Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordservat2011-05-31 12:12:15 +0000
committerdservat2011-05-31 12:12:15 +0000
commitefbc80ebc1e4fa2852dbc1e2388fc30693eff53d (patch)
treeda7881f2710ee28c93adf6dbb3bef03bdbc4c93d
parent68f02f304cf0c613c31de758bd63970ebe3197b0 (diff)
downloadorg.eclipse.papyrus-efbc80ebc1e4fa2852dbc1e2388fc30693eff53d.tar.gz
org.eclipse.papyrus-efbc80ebc1e4fa2852dbc1e2388fc30693eff53d.tar.xz
org.eclipse.papyrus-efbc80ebc1e4fa2852dbc1e2388fc30693eff53d.zip
NEW - bug 338691: [Statemachine Diagram] Papyrus shall improve the creation of transitions
https://bugs.eclipse.org/bugs/show_bug.cgi?id=338691 Fixed
-rw-r--r--plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomRegionCompartmentXYLayoutEditPolicy.java35
-rw-r--r--plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomStateMachineDiagramDragDropEditPolicy.java34
2 files changed, 43 insertions, 26 deletions
diff --git a/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomRegionCompartmentXYLayoutEditPolicy.java b/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomRegionCompartmentXYLayoutEditPolicy.java
index bc8d83eb670..6305285a36f 100644
--- a/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomRegionCompartmentXYLayoutEditPolicy.java
+++ b/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomRegionCompartmentXYLayoutEditPolicy.java
@@ -13,6 +13,7 @@ import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.XYLayoutEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
import org.eclipse.gmf.runtime.notation.View;
@@ -93,26 +94,16 @@ public class CustomRegionCompartmentXYLayoutEditPolicy extends XYLayoutEditPolic
return super.createChildEditPolicy(child);
}
-// @Override
-// protected Command getCreateCommand(CreateRequest request) {
-// CreateViewRequest req = (CreateViewRequest)request;
-//
-// TransactionalEditingDomain editingDomain = ((IGraphicalEditPart)getHost()).getEditingDomain();
-//
-// CompositeTransactionalCommand cc = new CompositeTransactionalCommand(editingDomain, DiagramUIMessages.AddCommand_Label);
-// Iterator iter = req.getViewDescriptors().iterator();
-//
-// final Rectangle BOUNDS = (Rectangle)getConstraintFor(request);
-//
-// while(iter.hasNext()) {
-// CreateViewRequest.ViewDescriptor viewDescriptor = (CreateViewRequest.ViewDescriptor)iter.next();
-// Rectangle rect = getBoundsOffest(req, BOUNDS, viewDescriptor);
-// cc.compose(new CustomStateMachineSetBoundsCommand(editingDomain, DiagramUIMessages.SetLocationCommand_Label_Resize, viewDescriptor, rect));
-// }
-//
-// if(cc.reduce() == null)
-// return null;
-//
-// return chainGuideAttachmentCommands(request, new ICommandProxy(cc.reduce()));
-// }
+ /**
+ *
+ * {@inheritedDoc}
+ */
+ public EditPart getTargetEditPart(Request request) {
+ //this enables to make links when pointing inside a region
+ if(request instanceof CreateUnspecifiedTypeConnectionRequest)
+ return getHost().getParent().getParent().getParent();
+ else
+ return super.getTargetEditPart(request);
+ }
+
}
diff --git a/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomStateMachineDiagramDragDropEditPolicy.java b/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomStateMachineDiagramDragDropEditPolicy.java
index e71cc18c1df..d2aa2b9a919 100644
--- a/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomStateMachineDiagramDragDropEditPolicy.java
+++ b/plugins/uml/org.eclipse.papyrus.diagram.statemachine/custom-src/org/eclipse/papyrus/diagram/statemachine/custom/policies/CustomStateMachineDiagramDragDropEditPolicy.java
@@ -5,7 +5,9 @@ import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.Graphics;
@@ -17,13 +19,16 @@ import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PrecisionRectangle;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.commands.UnexecutableCommand;
import org.eclipse.gef.requests.ChangeBoundsRequest;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
import org.eclipse.gmf.runtime.diagram.core.commands.SetPropertyCommand;
import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
@@ -39,6 +44,7 @@ import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescrip
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest;
import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.core.util.PackageUtil;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
@@ -46,6 +52,7 @@ import org.eclipse.gmf.runtime.notation.Node;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.diagram.common.commands.CommonDeferredCreateConnectionViewCommand;
import org.eclipse.papyrus.diagram.common.commands.SemanticAdapter;
+import org.eclipse.papyrus.diagram.common.commands.ShowHideCompartmentRequest;
import org.eclipse.papyrus.diagram.common.editpolicies.OldCommonDiagramDragDropEditPolicy;
import org.eclipse.papyrus.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.diagram.common.util.DiagramEditPartsUtil;
@@ -366,17 +373,36 @@ public class CustomStateMachineDiagramDragDropEditPolicy extends OldCommonDiagra
CustomCompositeStateWithDefaultRegionCreateNodeCommand createRegion = new CustomCompositeStateWithDefaultRegionCreateNodeCommand((IAdaptable)createState.getCommandResult().getReturnValue(), ((IGraphicalEditPart)getHost()).getDiagramPreferencesHint(), getEditingDomain(), DiagramUIMessages.CreateCommand_Label, createState.getAffectedFiles());
CustomCompositeStateSetBoundsCommand setBoundsCommand;
-
+
+ cc.compose(createState);
+ cc.compose(createRegion);
+
//take care of the case when a simple state is dropped, then we should provide a reasonable size
if(droppedElement.getRegions().isEmpty()){
setBoundsCommand = new CustomCompositeStateSetBoundsCommand(getEditingDomain(), null, descriptor, new Rectangle(location.x, location.y, 40, 40), false);
+ cc.compose(setBoundsCommand);
}
else{
setBoundsCommand = new CustomCompositeStateSetBoundsCommand(getEditingDomain(), null, descriptor, new Rectangle(location.x, location.y, -1, -1), true);
+ cc.compose(setBoundsCommand);
+ //force compartment to be shown
+ SetPropertyCommand showCompartment = new SetPropertyCommand(getEditingDomain(), (IAdaptable)createState.getCommandResult().getReturnValue(), "notation.View.visible", "Visibility", true){
+ protected CommandResult doExecuteWithResult(
+ IProgressMonitor progressMonitor, IAdaptable info)
+ throws ExecutionException {
+
+ View view = (View) getViewAdapter().getAdapter(View.class);
+ if ((view != null) && (view.getChildren().size() >= 2) && (view.getChildren().get(1) != null)){
+ ENamedElement namedElement = PackageUtil.getElement((String)getPropertyId());
+ if (namedElement instanceof EStructuralFeature)
+ ViewUtil.setStructuralFeatureValue((View)view.getChildren().get(1),(EStructuralFeature)namedElement, getNewValue());
+ }
+ return CommandResult.newOKCommandResult();
+ }
+
+ };
+ cc.compose(showCompartment);
}
- cc.compose(createState);
- cc.compose(createRegion);
- cc.compose(setBoundsCommand);
return new ICommandProxy(cc.reduce());
}

Back to the top