blob: eaa9904161e0463ecfd24b0ce79f82aa21e224b2 [file] [log] [blame]
package org.eclipse.gmf.tooling.examples.linklf.diagram.externalactivation;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
import org.eclipse.gmf.runtime.common.core.service.IOperation;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeCompartmentEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.XYLayoutEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.tooling.examples.linklf.diagram.edit.parts.CanvasEditPart;
import org.eclipse.gmf.tooling.runtime.linklf.xylayout.XYLayoutWithFixAnchorsEditPolicy;
/**
* This provider replaces default XYLayoutEditPolicy with its LinkLF counterpart version.
* It is separated from "main" {@link LinkLFEnablerEditPolicyProvider} because it is common to replace {@link XYLayoutEditPolicy}
* with custom version.
* E.g, Papyrus installs advanced XYLayoutWithConstrainedResizedEditPolicy (which does similar trick) by default.
*/
public class LinkLFXYLayoutEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider {
@Override
public boolean provides(IOperation op) {
if (false == op instanceof CreateEditPoliciesOperation) {
return false;
}
CreateEditPoliciesOperation operation = (CreateEditPoliciesOperation) op;
EditPart host = operation.getEditPart();
if (host instanceof ShapeCompartmentEditPart || host instanceof DiagramEditPart) {
View notationView = ((IGraphicalEditPart) host).getNotationView();
return notationView != null && isSupportedDiagram(notationView.getDiagram());
}
return false;
}
private boolean isSupportedDiagram(Diagram diagram) {
return diagram != null && CanvasEditPart.MODEL_ID.equals(diagram.getType());
}
@Override
public void createEditPolicies(EditPart editPart) {
EditPolicy defaultEP = editPart.getEditPolicy(EditPolicy.LAYOUT_ROLE);
if (defaultEP != null && defaultEP.getClass() == XYLayoutEditPolicy.class) {
editPart.installEditPolicy(EditPolicy.LAYOUT_ROLE, new XYLayoutWithFixAnchorsEditPolicy());
}
}
}