@SuppressWarnings("unchecked") @Override protected Command getAddCommand(Request generic) { ChangeBoundsRequest request = (ChangeBoundsRequest) generic; if (acceptReorder(request)){ List<EditPart> editParts = request.getEditParts(); ElementEditPart movedElement = (ElementEditPart)editParts.get(0); Container parent = (Container) getHost().getParent().getModel(); int siblingIndex = parent.getChildren().indexOf(getHost().getModel()); int currentIndex = parent.getChildren().indexOf(movedElement.getModel()); if (siblingIndex >= 0){ if (isInsertAfter((DropRequest) request)) siblingIndex++; if (currentIndex <= siblingIndex) siblingIndex--; /*MoveChildCommand command = new MoveChildCommand( movedElement.getModel(), siblingIndex);*/ AddCommand command = new AddCommand(); command.setParent(parent); command.setChild(movedElement.getModel()); command.setIndex(siblingIndex); return command; } } return super.getAddCommand(generic); }
@Override protected void showLayoutTargetFeedback(Request request) { eraseLayoutTargetFeedback(request); if (request instanceof ChangeBoundsRequest || (request instanceof CreateRequest && acceptCreate((CreateRequest) request))){ targetFeedback = new RectangleFigure(); Rectangle parentBounds = ((ElementEditPart)getHost()).getBounds(); translateToAbsolute(getContainerFigure(), parentBounds); Rectangle lineBounds = parentBounds.getCopy(); lineBounds.height = 4; lineBounds.y--; targetFeedback.setForegroundColor(ColorConstants.green); targetFeedback.setBackgroundColor(ColorConstants.green); if (isInsertAfter((DropRequest) request)){ lineBounds.y += parentBounds.height; } targetFeedback.setBounds(lineBounds); addFeedback(targetFeedback); } else if (request instanceof ChangeBoundsRequest){ } }
/** * Returns the host EditPart when appropriate. Targeting is done by checking * if the mouse is clearly over the host's TreeItem. * * @see org.eclipse.gef.EditPolicy#getTargetEditPart(Request) */ public EditPart getTargetEditPart(Request req) { if (req.getType().equals(REQ_ADD) || req.getType().equals(REQ_MOVE) || req.getType().equals(REQ_CREATE)) { DropRequest drop = (DropRequest) req; Point where = new Point(drop.getLocation().x, drop.getLocation().y); Widget widget = ((TreeEditPart) getHost()).getWidget(); if (widget instanceof Tree) return getHost(); TreeItem treeitem = (TreeItem) widget; Rectangle bounds = treeitem.getBounds(); int fudge = bounds.height / 5; Rectangle inner = new Rectangle(bounds.x, bounds.y + fudge, bounds.width, bounds.height - (treeitem.getExpanded() ? 0 : fudge * 2)); // Point is either outside the Treeitem, or inside the inner Rect. if (!bounds.contains(where) || inner.contains(where)) return getHost(); } return null; }
private void showDropFeedback(DropRequest request) { Widget hostWidget = ((TreeEditPart) getHost()).getWidget(); Tree tree = getTree(); org.eclipse.draw2d.geometry.Point pt = request.getLocation(); TreeItem item = findTreeItemAt(pt); if (item == null) { if (hostWidget == tree) { insertMarkAfterLastChild(tree.getItems()); } } else if (item == hostWidget) { tree.setInsertMark(null, true); } else { boolean before = isInUpperHalf(item.getBounds(), pt); tree.setInsertMark(item, before); } }
@Override protected void eraseTargetConnectionFeedback(DropRequest request) { EditPart part = (EditPart)getHost(); if(part instanceof DwParentChildConnectionEditPart){ } }
private Point getDropLocation(DropRequest request){ Point where = request.getLocation().getCopy(); IFigure figure = getLayoutContainer(); figure.translateToRelative(where); figure.translateFromParent(where); where.translate(getLayoutOrigin().getNegated()); return where; }
/** * Calls {@link #eraseTargetConnectionFeedback(DropRequest)} when * appropriate. * * @see org.eclipse.gef.EditPolicy#eraseTargetFeedback(Request) */ public void eraseTargetFeedback(Request request) { if (REQ_CONNECTION_START.equals(request.getType()) || REQ_CONNECTION_END.equals(request.getType()) || REQ_RECONNECT_SOURCE.equals(request.getType()) || REQ_RECONNECT_TARGET.equals(request.getType())) eraseTargetConnectionFeedback((DropRequest) request); }
/** * Calls {@link #showTargetConnectionFeedback(DropRequest)} when * appropriate. * * @see org.eclipse.gef.EditPolicy#showTargetFeedback(Request) */ public void showTargetFeedback(Request request) { if (REQ_CONNECTION_START.equals(request.getType()) || REQ_CONNECTION_END.equals(request.getType()) || REQ_RECONNECT_SOURCE.equals(request.getType()) || REQ_RECONNECT_TARGET.equals(request.getType())) showTargetConnectionFeedback((DropRequest) request); }
@Override public ConnectionAnchor getSourceConnectionAnchor(Request request) { Point pt = new Point(((DropRequest) request).getLocation()); return getComponentFigure().getSourceConnectionAnchorAt(pt); }
@Override public ConnectionAnchor getTargetConnectionAnchor(Request request) { Point pt = new Point(((DropRequest) request).getLocation()); return getComponentFigure().getTargetConnectionAnchorAt(pt); }
private boolean isInsertAfter(DropRequest request) { ElementEditPart ep = (ElementEditPart) getHost(); Point where = getDropLocation(request); Rectangle parentBounds = ep.getBounds(); return (parentBounds.height / 2) < where.y; }
private Point getLocationFromRequest(Request request) { return ((DropRequest) request).getLocation(); }
/** * @see org.eclipse.gef.EditPolicy#showTargetFeedback(Request) */ public void showTargetFeedback(Request req) { if (req.getType().equals(REQ_MOVE) || req.getType().equals(REQ_ADD) || req.getType().equals(REQ_CREATE)) showDropFeedback((DropRequest) req); }
protected void eraseTargetConnectionFeedback( DropRequest request ) { // TODO Auto-generated method stub super.eraseTargetConnectionFeedback( request ); }
protected void showTargetConnectionFeedback( DropRequest request ) { // TODO Auto-generated method stub super.showTargetConnectionFeedback( request ); }
protected Point getLocationFromRequest( Request request ) { return ( (DropRequest) request ).getLocation( ); }
@Override protected void showTargetConnectionFeedback(DropRequest request) { }
/** * Override to erase target feedback. Does nothing by default. * * @param request * the DropRequest */ protected void eraseTargetConnectionFeedback(DropRequest request) { }
/** * Override to show target connection feedback. Does nothing by default. * * @param request * the DropRequest */ protected void showTargetConnectionFeedback(DropRequest request) { }