package info.limpet.stackedcharts.ui.editor.policies; import info.limpet.stackedcharts.model.Chart; import info.limpet.stackedcharts.ui.editor.commands.MoveChartCommand; import info.limpet.stackedcharts.ui.editor.parts.ChartEditPart; import info.limpet.stackedcharts.ui.editor.parts.ChartsPanelEditPart; import java.util.List; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CompoundCommand; import org.eclipse.gef.editpolicies.ContainerEditPolicy; import org.eclipse.gef.requests.CreateRequest; import org.eclipse.gef.requests.GroupRequest; public class ChartContainerEditPolicy extends ContainerEditPolicy implements EditPolicy { @Override public void eraseTargetFeedback(final Request request) { // remove the highlight if (REQ_ADD.equals(request.getType())) { final ChartEditPart axisEditPart = getHost(); final IFigure figure = axisEditPart.getFigure(); figure.setBackgroundColor(ChartEditPart.BACKGROUND_COLOR); } } @Override protected Command getAddCommand(final GroupRequest request) { @SuppressWarnings("rawtypes") final List toAdd = request.getEditParts(); CompoundCommand res = null; if (toAdd.size() > 0) { final Object first = toAdd.get(0); if (first instanceof ChartEditPart) { res = new CompoundCommand(); final List<Chart> charts = ((ChartsPanelEditPart) getHost().getParent()).getModel() .getCharts(); for (final Object o : toAdd) { if (o instanceof ChartEditPart) { final ChartEditPart chartEditPart = (ChartEditPart) o; final ChartEditPart hostPart = getHost(); int indexOfHost = charts.indexOf(hostPart.getModel()); int newindex = indexOfHost--; if(newindex<0) newindex = 0; res.add(new MoveChartCommand(charts, chartEditPart.getModel(), newindex)); } } } } return res; } @Override protected Command getCreateCommand(final CreateRequest request) { return null; } @Override public ChartEditPart getHost() { return (ChartEditPart) super.getHost(); } @Override public EditPart getTargetEditPart(final Request request) { if (REQ_ADD.equals(request.getType())) { return getHost(); } if (REQ_CREATE.equals(request.getType())) { return getHost(); } return super.getTargetEditPart(request); } @Override public void showTargetFeedback(final Request request) { if (REQ_ADD.equals(request.getType())) { final ChartEditPart axisEditPart = getHost(); final IFigure figure = axisEditPart.getFigure(); figure.setBackgroundColor(ColorConstants.lightGray); } } }