/*******************************************************************************
* Copyright (c) 2010-2015 Henshin developers. 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:
* TU Berlin, University of Luxembourg, SES S.A.
*******************************************************************************/
package de.tub.tfs.henshin.tggeditor.editpolicies;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.PrecisionRectangle;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import de.tub.tfs.henshin.tggeditor.editparts.graphical.DividerEditPart;
import de.tub.tfs.henshin.tggeditor.editparts.graphical.GraphEditPart;
public class TggNonResizableEditPolicy extends NonResizableEditPolicy {
@Override
protected void showChangeBoundsFeedback(ChangeBoundsRequest request) {
if (!request.getEditParts().isEmpty() && (request.getEditParts().get(0) instanceof DividerEditPart)){
IFigure feedback = getDragSourceFeedbackFigure();
PrecisionRectangle rect = new PrecisionRectangle(
getInitialFeedbackBounds().getCopy());
getHostFigure().translateToAbsolute(rect);
request.getMoveDelta().y = 0;
DividerEditPart divider = (DividerEditPart) request.getEditParts().get(0);
GraphEditPart graphEditPart = (GraphEditPart) this.getHost().getParent();
if (divider.isSC()){
DividerEditPart dividerCTeditPart = graphEditPart.getDividerCTpart();
if (request.getMoveDelta().x + rect.x < 5){
request.getMoveDelta().x = 5 - rect.x;
} if (request.getMoveDelta().x + rect.x > dividerCTeditPart.getCastedModel().getTripleGraph().getDividerCT_X() - 5){
request.getMoveDelta().x = (dividerCTeditPart.getCastedModel().getTripleGraph().getDividerCT_X() - 5) - rect.x;
}
} else {
DividerEditPart dividerSCeditPart = graphEditPart.getDividerSCpart();
if (request.getMoveDelta().x + rect.x < dividerSCeditPart.getCastedModel().getTripleGraph().getDividerSC_X() + 5){
request.getMoveDelta().x = dividerSCeditPart.getCastedModel().getTripleGraph().getDividerSC_X() + 5 - rect.x;
}
}
rect.translate(request.getMoveDelta());
rect.resize(request.getSizeDelta());
feedback.translateToRelative(rect);
feedback.setBounds(rect);
}
super.showChangeBoundsFeedback(request);
}
}