diff options
| author | Laurent Redor | 2016-08-03 08:20:06 +0000 |
|---|---|---|
| committer | Laurent Redor | 2016-08-09 08:55:22 +0000 |
| commit | 71de945f776e3955896a63d3f9b7a5150d9bbb26 (patch) | |
| tree | 97bb8c8fefcd2111bcf4b9c3f8531cbf55ef0c9d | |
| parent | dda4e01094ef362a91635282b4dd4f24bd350c69 (diff) | |
| download | org.eclipse.sirius-71de945f776e3955896a63d3f9b7a5150d9bbb26.tar.gz org.eclipse.sirius-71de945f776e3955896a63d3f9b7a5150d9bbb26.tar.xz org.eclipse.sirius-71de945f776e3955896a63d3f9b7a5150d9bbb26.zip | |
[496466] Fix pb with Undo and Paste Style
It was not possible to make another "Paste Style" after an undo of a
previous "Paste Style".
Bug: 496466
Change-Id: I4ec47724b5f0fcd401272383048fe00f658b649a
Signed-off-by: Laurent Redor <laurent.redor@obeo.fr>
| -rw-r--r-- | plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/layout/AbstractSiriusLayoutDataManager.java | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/layout/AbstractSiriusLayoutDataManager.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/layout/AbstractSiriusLayoutDataManager.java index 79f2ef02c9..f1827650a7 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/layout/AbstractSiriusLayoutDataManager.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/layout/AbstractSiriusLayoutDataManager.java @@ -24,6 +24,7 @@ import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.GraphicalEditPart; @@ -79,6 +80,7 @@ import org.eclipse.sirius.diagram.ui.provider.Messages; import org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.styles.IBorderItemOffsets; import org.eclipse.sirius.ext.draw2d.figure.FigureUtilities; import org.eclipse.sirius.viewpoint.DSemanticDecorator; +import org.eclipse.sirius.viewpoint.Style; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -161,7 +163,7 @@ public abstract class AbstractSiriusLayoutDataManager implements SiriusLayoutDat * @param applyLayout * true if the layout must be applied, false otherwise * @param applyStyle - * true if the layout must be applied, false otherwise + * true if the style must be applied, false otherwise */ protected void applyFormat(final IGraphicalEditPart rootEditPart, boolean applyLayout, boolean applyStyle) { final EObject semanticElement = rootEditPart.resolveSemanticElement(); @@ -454,8 +456,11 @@ public abstract class AbstractSiriusLayoutDataManager implements SiriusLayoutDat * The layout data containing the sirius style */ protected void applySiriusStyle(DSemanticDecorator semanticDecorator, AbstractLayoutData layoutData) { - if ((semanticDecorator instanceof DNode || semanticDecorator instanceof DNodeListElement) && layoutData.getSiriusStyle() instanceof NodeStyle) { - NodeStyle style = (NodeStyle) layoutData.getSiriusStyle(); + // Make a copy of the style to allow several Paste with the same + // LayoutData. + Style copyOfSiriusStyle = EcoreUtil.copy(layoutData.getSiriusStyle()); + if ((semanticDecorator instanceof DNode || semanticDecorator instanceof DNodeListElement) && copyOfSiriusStyle instanceof NodeStyle) { + NodeStyle style = (NodeStyle) copyOfSiriusStyle; if (semanticDecorator instanceof DNode) { DNode node = (DNode) semanticDecorator; node.setOwnedStyle(style); @@ -463,13 +468,13 @@ public abstract class AbstractSiriusLayoutDataManager implements SiriusLayoutDat DNodeListElement nodeListElement = (DNodeListElement) semanticDecorator; nodeListElement.setOwnedStyle(style); } - } else if (semanticDecorator instanceof DDiagramElementContainer && layoutData.getSiriusStyle() instanceof ContainerStyle) { + } else if (semanticDecorator instanceof DDiagramElementContainer && copyOfSiriusStyle instanceof ContainerStyle) { final DDiagramElementContainer container = (DDiagramElementContainer) semanticDecorator; - final ContainerStyle style = (ContainerStyle) layoutData.getSiriusStyle(); + final ContainerStyle style = (ContainerStyle) copyOfSiriusStyle; container.setOwnedStyle(style); - } else if (semanticDecorator instanceof DEdge && layoutData.getSiriusStyle() instanceof EdgeStyle) { + } else if (semanticDecorator instanceof DEdge && copyOfSiriusStyle instanceof EdgeStyle) { final DEdge edge = (DEdge) semanticDecorator; - final EdgeStyle style = (EdgeStyle) layoutData.getSiriusStyle(); + final EdgeStyle style = (EdgeStyle) copyOfSiriusStyle; edge.setOwnedStyle(style); } } |
