blob: 7370010a91f0d03704d258f325391bc2299f337c [file] [log] [blame]
/*****************************************************************************
* 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();
}
}