package org.eclipse.papyrus.uml.diagram.sequence.apex.edit.policies; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.requests.ChangeBoundsRequest; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableShapeEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.internal.requests.ChangeBoundsDeferredRequest; import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; /** * 이동 방향에 제한을 둘 수 있는 ResizableShapedEditPolicy * @author Jiho */ public class ApexResizableShapeEditPolicy extends ResizableShapeEditPolicy { private int moveDirection; private boolean autoSizeEnabled = true; private boolean moveDeferredEnabled = true; /** * Constructor * * @param moveDirection * the direction of the move */ public ApexResizableShapeEditPolicy(int moveDirection) { super(); setMoveDirection(moveDirection); } public ApexResizableShapeEditPolicy(int moveDirection, boolean autoSizeEnabled) { super(); setMoveDirection(moveDirection); setAutoSizeEnabled(autoSizeEnabled); } public ApexResizableShapeEditPolicy(int moveDirection, boolean autoSizeEnabled, boolean moveDeferredEnabled) { super(); setMoveDirection(moveDirection); setAutoSizeEnabled(autoSizeEnabled); setMoveDeferredEnabled(moveDeferredEnabled); } public ApexResizableShapeEditPolicy(int moveDirection, int resizeDirection, boolean autoSizeEnabled, boolean moveDeferredEnabled) { super(); setMoveDirection(moveDirection); setAutoSizeEnabled(autoSizeEnabled); setMoveDeferredEnabled(moveDeferredEnabled); } @Override protected void showChangeBoundsFeedback(ChangeBoundsRequest request) { Point moveDelta = request.getMoveDelta(); // if ((moveDirection & PositionConstants.EAST) == 0 && moveDelta.x < 0) // moveDelta.x = 0; // if ((moveDirection & PositionConstants.WEST) == 0 && moveDelta.x > 0) // moveDelta.x = 0; // if ((moveDirection & PositionConstants.SOUTH) == 0 && moveDelta.y < 0) // moveDelta.y = 0; // if ((moveDirection & PositionConstants.NORTH) == 0 && moveDelta.y > 0) // moveDelta.y = 0; request.setMoveDelta(moveDelta); super.showChangeBoundsFeedback(request); } @Override protected Command getMoveCommand(ChangeBoundsRequest request) { ChangeBoundsRequest req = new ChangeBoundsRequest(REQ_MOVE_CHILDREN); req.setEditParts(getHost()); req.setMoveDelta(request.getMoveDelta()); req.setSizeDelta(request.getSizeDelta()); req.setLocation(request.getLocation()); req.setExtendedData(request.getExtendedData()); req.setResizeDirection(moveDirection); return getHost().getParent().getCommand(req); } @Override protected Command getResizeCommand(ChangeBoundsRequest request) { ChangeBoundsRequest req = new ChangeBoundsRequest(REQ_RESIZE_CHILDREN); req.setEditParts(getHost()); req.setMoveDelta(request.getMoveDelta()); req.setSizeDelta(request.getSizeDelta()); req.setLocation(request.getLocation()); req.setExtendedData(request.getExtendedData()); req.setResizeDirection(request.getResizeDirection()); return getHost().getParent().getCommand(req); } /** * apex update * * autoSize, moveDefer 통제 추가 */ @Override public Command getCommand(Request request) { /* apex improved start */ if (RequestConstants.REQ_AUTOSIZE.equals(request.getType()) && autoSizeEnabled) { return getAutoSizeCommand(request); } if (RequestConstants.REQ_MOVE_DEFERRED.equals(request.getType()) && moveDeferredEnabled) { return getMoveDeferredCommand((ChangeBoundsDeferredRequest) request); } return super.getCommand(request); /* apex improved start */ /* apex replaced if (RequestConstants.REQ_AUTOSIZE.equals(request.getType())) return getAutoSizeCommand(request); if (RequestConstants.REQ_MOVE_DEFERRED.equals(request.getType())) return getMoveDeferredCommand((ChangeBoundsDeferredRequest) request); return super.getCommand(request); */ } /** * Returns the direction the figure is being moved. Possible values are * <ul> * <li>{@link org.eclipse.draw2d.PositionConstants#EAST} * <li>{@link org.eclipse.draw2d.PositionConstants#WEST} * <li>{@link org.eclipse.draw2d.PositionConstants#NORTH} * <li>{@link org.eclipse.draw2d.PositionConstants#SOUTH} * <li>{@link org.eclipse.draw2d.PositionConstants#NORTH_EAST} * <li>{@link org.eclipse.draw2d.PositionConstants#NORTH_WEST} * <li>{@link org.eclipse.draw2d.PositionConstants#SOUTH_EAST} * <li>{@link org.eclipse.draw2d.PositionConstants#SOUTH_WEST} * </ul> * * @return the move direction */ public int getMoveDirection() { return moveDirection; } /** * Sets the direction the figure is being moved. * @param moveDirection */ public void setMoveDirection(int moveDirection) { this.moveDirection = moveDirection; } public boolean isAutoSizeEnabled() { return autoSizeEnabled; } public void setAutoSizeEnabled(boolean autoSizeEnabled) { this.autoSizeEnabled = autoSizeEnabled; } public boolean isMoveDeferredEnabled() { return moveDeferredEnabled; } public void setMoveDeferredEnabled(boolean moveDeferredEnabled) { this.moveDeferredEnabled = moveDeferredEnabled; } }