/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.jsf.ui.editor.edit; import java.util.List; import java.util.ArrayList; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.RectangleFigure; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.*; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.NonResizableEditPolicy; import org.eclipse.gef.editpolicies.XYLayoutEditPolicy; import org.eclipse.gef.handles.ResizeHandle; import org.eclipse.gef.requests.CreateRequest; import org.jboss.tools.jsf.messages.JSFUIMessages; import org.jboss.tools.jsf.ui.editor.figures.GroupFeedbackFigure; import org.jboss.tools.jsf.ui.editor.figures.NodeFigure; import org.jboss.tools.jsf.ui.editor.model.IGroup; import org.jboss.tools.jsf.ui.editor.model.IJSFElement; import org.jboss.tools.jsf.ui.editor.model.commands.SetConstraintCommand; /** * * @author eskimo(dgolovin@exadel.com) * */ public class JSFXYLayoutEditPolicy extends XYLayoutEditPolicy { /** * */ protected Command createAddCommand(EditPart childEditPart, Object constraint) { SetConstraintCommand setConstraint = new SetConstraintCommand(); setConstraint.setLocation((Rectangle) constraint); setConstraint.setPart((IJSFElement) childEditPart.getModel()); setConstraint.setLabel(JSFUIMessages.REPARENTING_JSFSUBPART); setConstraint.setDebugLabel("LogicXYEP setConstraint");//$NON-NLS-1$*/ return setConstraint; } protected Command createChangeConstraintCommand(EditPart child, Object constraint) { SetConstraintCommand locationCommand = new SetConstraintCommand(); locationCommand.setShell(child.getViewer().getControl().getShell()); locationCommand.setPart((IJSFElement) child.getModel()); locationCommand.setLocation((Rectangle) constraint); return locationCommand; } protected EditPolicy createChildEditPolicy(EditPart child) { return new CustomPolicy(); } protected Command getCreateCommand(CreateRequest request) { return null; } protected Command getDeleteDependantCommand(Request request) { return null; } protected Command getOrphanChildrenCommand(Request request) { return null; } class CustomPolicy extends NonResizableEditPolicy { protected IFigure createDragSourceFeedbackFigure() { GroupEditPart part = (GroupEditPart) getHost(); IFigure child = getCustomFeedbackFigure(part.getModel()); addFeedback(child); Rectangle childBounds = part.getFigure().getBounds().getCopy(); IFigure walker = part.getFigure().getParent(); while (walker != ((GraphicalEditPart) part.getParent()).getFigure()) { walker.translateToParent(childBounds); walker = walker.getParent(); } child.setBounds(childBounds); return child; } protected IFigure getFeedbackLayer() { return getLayer(LayerConstants.SCALED_FEEDBACK_LAYER); } protected IFigure getCustomFeedbackFigure(Object modelPart) { IFigure figure; if (modelPart instanceof IGroup) figure = new GroupFeedbackFigure(); else { figure = new RectangleFigure(); ((RectangleFigure) figure).setXOR(true); ((RectangleFigure) figure).setFill(true); figure.setBackgroundColor(NodeFigure.ghostFillColor); figure.setForegroundColor(NodeFigure.whiteColor); } return figure; } protected List createSelectionHandles() { List<Handle> list = new ArrayList<Handle>(); list.add(createHandle((GraphicalEditPart) getHost(), PositionConstants.SOUTH_EAST)); list.add(createHandle((GraphicalEditPart) getHost(), PositionConstants.SOUTH_WEST)); list.add(createHandle((GraphicalEditPart) getHost(), PositionConstants.NORTH_WEST)); list.add(createHandle((GraphicalEditPart) getHost(), PositionConstants.NORTH_EAST)); return list; } Handle createHandle(GraphicalEditPart owner, int direction) { ResizeHandle handle = new ResizeHandle(owner, direction); handle.setCursor(SharedCursors.SIZEALL); return handle; } } }