/***************************************************************************** * Copyright (c) 2014 CEA LIST, Montages AG * * * 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: * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation * Michael Golubev (Montages) - adaptation for GMF Tooling *****************************************************************************/ package org.eclipse.gmf.tooling.runtime.linklf.xylayout; import java.util.List; import org.eclipse.gef.EditPart; import org.eclipse.gef.commands.Command; import org.eclipse.gef.requests.ChangeBoundsRequest; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.INodeEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.XYLayoutEditPolicy; /** * This class enables use of {@link FixAnchorHelper} authored by Papyrus. * The code relevant to {@link FixAnchorHelper} had been partially copy-pasted from * original Papyrus modification of {@link XYLayoutEditPolicy}. * * @since 3.3 */ public class XYLayoutWithFixAnchorsEditPolicy extends XYLayoutEditPolicy { private FixAnchorHelper myFixAnchorHelper; @Override public void activate() { super.activate(); myFixAnchorHelper = new FixAnchorHelper(getHost().getEditingDomain()); } @Override protected Command getChangeConstraintCommand(ChangeBoundsRequest request) { Command result = super.getChangeConstraintCommand(request); if (result != null && result.canExecute()) { //XXX: in Papyrus it is guarded by request.isConstrainedResize(); boolean isConstrainedResize = true; @SuppressWarnings("unchecked") List<EditPart> editParts = (List<EditPart>) request.getEditParts(); for (EditPart child : editParts) { //we add the command to fix the anchor if (isConstrainedResize && child instanceof INodeEditPart) { if (myFixAnchorHelper != null) { Command fixAnchorCommand = myFixAnchorHelper.getFixIdentityAnchorCommand( // (INodeEditPart) child, request.getMoveDelta(), request.getSizeDelta(), request.getResizeDirection()); if (fixAnchorCommand != null) { result = result.chain(fixAnchorCommand); } } } } } return result; } public IGraphicalEditPart getHost() { return (IGraphicalEditPart) super.getHost(); } }