diff options
| author | Steve Monnier | 2016-06-07 14:24:54 +0000 |
|---|---|---|
| committer | Steve Monnier | 2016-08-17 14:34:00 +0000 |
| commit | 3dcfa218f627f916ab1ebb646a7a64091e7d162a (patch) | |
| tree | 5ab12aef2dc13fef35727fa2f6fbf430ff298be7 | |
| parent | c6dab017aa4e5206e7942fc034e720af1e55699c (diff) | |
| download | org.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>
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); |
