Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Monnier2016-06-07 14:24:54 +0000
committerSteve Monnier2016-08-17 14:34:00 +0000
commit3dcfa218f627f916ab1ebb646a7a64091e7d162a (patch)
tree5ab12aef2dc13fef35727fa2f6fbf430ff298be7
parentc6dab017aa4e5206e7942fc034e720af1e55699c (diff)
downloadorg.eclipse.sirius-3dcfa218f627f916ab1ebb646a7a64091e7d162a.tar.gz
org.eclipse.sirius-3dcfa218f627f916ab1ebb646a7a64091e7d162a.tar.xz
org.eclipse.sirius-3dcfa218f627f916ab1ebb646a7a64091e7d162a.zip
[481098] Sizing on node creation only on authorized resizing directions
Node creation tools now allow to set the size on node creation (by draging the mouse cursor) only to the authorized directions (horizontal, vertical, both or neither) Bug: 481098 Change-Id: I9fad379cbfb9b0506b14aac8ddf2fefc75034909 Signed-off-by: Steve Monnier <steve.monnier@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/AbstractDiagramNodeEditPartRefreshVisualsOperation.java9
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/refresh/AbstractCanonicalSynchronizer.java17
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/DDiagramCanonicalSynchronizerTests.java8
3 files changed, 26 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/AbstractDiagramNodeEditPartRefreshVisualsOperation.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/AbstractDiagramNodeEditPartRefreshVisualsOperation.java
index 8f5145843f..74ace0782c 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/AbstractDiagramNodeEditPartRefreshVisualsOperation.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/AbstractDiagramNodeEditPartRefreshVisualsOperation.java
@@ -30,6 +30,7 @@ import org.eclipse.sirius.diagram.LabelPosition;
import org.eclipse.sirius.diagram.NodeStyle;
import org.eclipse.sirius.diagram.WorkspaceImage;
import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery;
+import org.eclipse.sirius.diagram.business.api.query.DNodeQuery;
import org.eclipse.sirius.diagram.ui.edit.api.part.IAbstractDiagramNodeEditPart;
import org.eclipse.sirius.diagram.ui.tools.api.figure.IWorkspaceImageFigure;
import org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabel;
@@ -179,7 +180,8 @@ public class AbstractDiagramNodeEditPartRefreshVisualsOperation {
}
final int tmpWidth = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
- if (tmpWidth > 0) {
+ DDiagramElementQuery query = new DDiagramElementQuery(node);
+ if (tmpWidth > 0 && (new DNodeQuery(node).allowsHorizontalResize() || query.isCollapsed())) {
width = tmpWidth;
}
@@ -203,12 +205,13 @@ public class AbstractDiagramNodeEditPartRefreshVisualsOperation {
if (node.getHeight() != null) {
height = node.getHeight().intValue() * LayoutUtils.SCALE;
}
- if (height == 0) {
+ DDiagramElementQuery query = new DDiagramElementQuery(node);
+ if (height == 0 && (new DNodeQuery(node).allowsVerticalResize() || query.isCollapsed())) {
height = width;
}
final int tmpHeight = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
- if (tmpHeight > 0) {
+ if (tmpHeight > 0) {
height = tmpHeight;
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/refresh/AbstractCanonicalSynchronizer.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/refresh/AbstractCanonicalSynchronizer.java
index 7b09761cbb..27f7738856 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/refresh/AbstractCanonicalSynchronizer.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/refresh/AbstractCanonicalSynchronizer.java
@@ -409,6 +409,11 @@ public abstract class AbstractCanonicalSynchronizer implements CanonicalSynchron
boolean isAlreadylayouted = false;
EObject element = createdView.getElement();
+ org.eclipse.sirius.diagram.business.api.query.DNodeQuery dNodeQuery = null;
+ if (element instanceof DNode) {
+ DNode dNode = (DNode) element;
+ dNodeQuery = new org.eclipse.sirius.diagram.business.api.query.DNodeQuery(dNode);
+ }
if (element instanceof DDiagramElement) {
if (element instanceof AbstractDNode) {
AbstractDNode abstractDNode = (AbstractDNode) element;
@@ -416,8 +421,16 @@ public abstract class AbstractCanonicalSynchronizer implements CanonicalSynchron
if (layoutData == null) {
layoutData = SiriusLayoutDataManager.INSTANCE.getData(abstractDNode, true);
}
- if (layoutData != null) {
- size = layoutData.getSize();
+ if (layoutData != null && layoutData.getSize() != null) {
+ if (dNodeQuery == null || (dNodeQuery != null && dNodeQuery.allowsHorizontalResize() && dNodeQuery.allowsVerticalResize())) {
+ size = layoutData.getSize();
+ } else if (dNodeQuery != null && dNodeQuery.allowsHorizontalResize()) {
+ size = new Dimension(layoutData.getSize().width, getDefaultSize((AbstractDNode) element).height);
+ } else if (dNodeQuery != null && dNodeQuery.allowsVerticalResize()) {
+ size = new Dimension(getDefaultSize((AbstractDNode) element).width, layoutData.getSize().height);
+ }
+ }
+ if (layoutData != null && layoutData.getLocation() != null) {
location = layoutData.getLocation();
}
}
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/DDiagramCanonicalSynchronizerTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/DDiagramCanonicalSynchronizerTests.java
index 3a0fead670..f2f5d4466d 100644
--- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/DDiagramCanonicalSynchronizerTests.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/DDiagramCanonicalSynchronizerTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c) 2010, 2016 THALES GLOBAL SERVICES.
* 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
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.sirius.tests.unit.common;
-import junit.framework.TestCase;
-
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.common.command.AbstractCommand;
@@ -41,6 +39,7 @@ import org.eclipse.sirius.diagram.DSemanticDiagram;
import org.eclipse.sirius.diagram.DiagramFactory;
import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.EdgeStyle;
+import org.eclipse.sirius.diagram.ResizeKind;
import org.eclipse.sirius.diagram.business.api.refresh.CanonicalSynchronizer;
import org.eclipse.sirius.diagram.business.api.refresh.CanonicalSynchronizerFactory;
import org.eclipse.sirius.diagram.ui.business.api.view.SiriusLayoutDataManager;
@@ -58,6 +57,8 @@ import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeListViewNodeListCo
import org.eclipse.sirius.diagram.ui.internal.refresh.SynchronizeGMFModelCommand;
import org.junit.Assert;
+import junit.framework.TestCase;
+
/**
* Test the DDiagramCanonicalSynchronizer.
*
@@ -630,6 +631,7 @@ public class DDiagramCanonicalSynchronizerTests extends TestCase {
*/
public void test_DDiagramCanonicalSynchronizer_Synchronize_UpdateGMF_NodeBoundsCorrectlyForNodeCreation() {
DNode dNode = DiagramFactory.eINSTANCE.createDNode();
+ dNode.setResizeKind(ResizeKind.NSEW_LITERAL);
// dSemanticDiagram.getOwnedDiagramElements().add(dNode);
Command addCmd = AddCommand.create(domain, dSemanticDiagram, DiagramPackage.Literals.DDIAGRAM__OWNED_DIAGRAM_ELEMENTS, dNode);
domain.getCommandStack().execute(addCmd);

Back to the top