blob: e06cbb7ebdbd598ecb3d01bc83f3a368ede8a1bc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others.
* 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:
* Soyatec - initial API and implementation
*******************************************************************************/
package org.eclipse.xwt.tools.ui.designer.policies.feedback;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.Polygon;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.xwt.tools.ui.designer.core.figures.OutlineBorder;
import org.eclipse.xwt.tools.ui.designer.editor.palette.CreateReqHelper;
import org.eclipse.xwt.tools.ui.designer.parts.ShellEditPart;
import org.eclipse.xwt.tools.ui.designer.utils.OffsetUtil;
/**
* @author jliu jin.liu@soyatec.com
*/
public class FeedbackHelper {
public static boolean showCreationFeedback(FeedbackManager fbm, CreateRequest createReq) {
if (fbm.contains(createReq)) {
return true;
}
CreateReqHelper helper = new CreateReqHelper(createReq);
if (helper.canCreate(fbm.getHost())) {
Rectangle r = fbm.getHostFigure().getBounds().getCopy();
if (helper.isCreate("layout") || helper.isCreate("menu")) {
return showFillFeedback(fbm, createReq);
} else if (helper.isCreate("menuBar")) {
r = getMenuFeedbackBounds(fbm);
if (r != null) {
Label feedback = new Label("Menu bar would be placed here");
feedback.setBounds(r);
feedback.setBackgroundColor(ColorConstants.button);
feedback.setOpaque(true);
feedback.setBorder(new OutlineBorder(ColorConstants.blue, ColorConstants.button));
fbm.addFeedback(createReq, feedback);
return true;
}
} else {
return false;
}
}
return false;
}
public static Polygon createTargetFeedback() {
Polygon polygon = new Polygon();
polygon.addPoint(new Point());
polygon.addPoint(new Point());
polygon.addPoint(new Point());
polygon.addPoint(new Point());
polygon.setForegroundColor(ColorConstants.blue);
return polygon;
}
public static void updateTargetFeedback(GraphicalEditPart editPart, Polygon polygon ) {
IFigure figure = editPart.getFigure();
Rectangle rectangle = figure.getBounds().getCopy();
figure.translateToAbsolute(rectangle);
Point p = rectangle.getBottomLeft();
polygon.translateToRelative(p);
polygon.setPoint(p, 0);
p = rectangle.getBottomRight();
polygon.translateToRelative(p);
polygon.setPoint(p, 1);
p = rectangle.getTopRight();
polygon.translateToRelative(p);
polygon.setPoint(p, 2);
p = rectangle.getTopLeft();
polygon.translateToRelative(p);
polygon.setPoint(p, 3);
}
public static boolean showFillFeedback(FeedbackManager fbm, CreateRequest createReq) {
if (fbm.contains(createReq)) {
return true;
}
CreateReqHelper helper = new CreateReqHelper(createReq);
if (helper.canCreate(fbm.getHost())) {
Rectangle r = fbm.getHostFigure().getBounds().getCopy();
FillFeedback feedback = new FillFeedback(new Rectangle(r.x, r.y, r.width, r.height));
fbm.addFeedback(createReq, feedback);
return true;
}
return false;
}
private static Rectangle getMenuFeedbackBounds(FeedbackManager fbm) {
EditPart host = fbm.getHost();
if (host instanceof ShellEditPart) {
int yOffset = OffsetUtil.getYOffset(host);
Rectangle r = fbm.getHostFigure().getBounds().getCopy();
return new Rectangle(r.x + 2, r.y + yOffset - 3, r.width - 4, 22);
}
return null;
}
}