@Override protected Command getCreateCommand(CreateRequest request) { int index = -1; if (((TreeEditPart) getHost()).getWidget() != null) index = findIndexOfTreeItemAt(request.getLocation()); if (index < 0) index = CreateRequestUtil.getNewIndex(request); if (request.getNewObject() instanceof ANode) { return createCreateCommand((ANode) request.getNewObject(), index); } else if (request.getNewObject() instanceof CreateElementAction) { CreateElementAction action = (CreateElementAction) request.getNewObject(); action.dropInto(getHost().getModel(), new Rectangle(), index); action.run(); return action.getCommand(); } return null; }
/** * 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); } }
/** * Refreshes the scenarios. * * @param ucmspec */ public void refreshScenarioTreeView(UCMspec ucmspec) { for (Iterator iter = ucmspec.getScenarioGroups().iterator(); iter.hasNext();) { ScenarioGroup group = (ScenarioGroup) iter.next(); for (Iterator iterator = group.getScenarios().iterator(); iterator.hasNext();) { ScenarioDef scenario = (ScenarioDef) iterator.next(); StrategyUrnModelElementTreeEditPart part = (StrategyUrnModelElementTreeEditPart) getViewer().getEditPartRegistry().get(scenario); if (part != null) { // all children of a strategy for (Iterator iter2 = part.getChildren().iterator(); iter2.hasNext();) { TreeEditPart element = (TreeEditPart) iter2.next(); element.refresh(); } } } } }
@Override protected void removeChildVisual(EditPart childEditPart) { TreeEditPart treeEditPart = (TreeEditPart) childEditPart; if (treeEditPart.getWidget() != null) { treeEditPart.getWidget().dispose(); treeEditPart.setWidget(null); } }
/** * @see org.eclipse.gef.ui.parts.AbstractEditPartViewer#reveal(org.eclipse.gef.EditPart) */ @Override public void reveal(EditPart part) { if (!(part instanceof TreeEditPart)) return; TreeEditPart treePart = (TreeEditPart) part; final Tree tree = getTreeControl(); Widget widget = treePart.getWidget(); if (widget instanceof TreeItem) tree.showItem((TreeItem) widget); }
/** * Unhooks a control so that it can be reset. This method deactivates the contents, removes the Control as being the * Control of the RootTreeEditPart, etc. It does not remove the listeners because it is causing errors, although that * would be a desirable outcome. */ @Override protected void unhookControl() { if (getControl() == null) return; super.unhookControl(); // Ideally, you would want to remove the listeners here TreeEditPart tep = (TreeEditPart) getRootEditPart(); tep.setWidget(null); }
/** * Implemented to assign the child its * {@link TreeEditPart#setWidget(Widget) widget}. Subclasses should not call * or override this method. * * @see AbstractEditPart#addChildVisual(EditPart, int) */ protected void addChildVisual(EditPart childEditPart, int index) { Widget widget = getWidget(); TreeItem item; if (widget instanceof Tree) item = new TreeItem((Tree) widget, 0, index); else item = new TreeItem((TreeItem) widget, 0, index); ((TreeEditPart) childEditPart).setWidget(item); }
/** * Sets the {@link #widget}. * * @see org.eclipse.gef.TreeEditPart#setWidget(Widget) */ public void setWidget(Widget widget) { List children = getChildren(); if (widget != null) { widget.setData(this); if (widget instanceof TreeItem) { final TreeItem item = (TreeItem) widget; item.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { expanded = item.getExpanded(); } }); } for (int i = 0; i < children.size(); i++) { TreeEditPart tep = (TreeEditPart) children.get(i); if (widget instanceof TreeItem) tep.setWidget(new TreeItem((TreeItem) widget, 0)); else tep.setWidget(new TreeItem((Tree) widget, 0)); // We have just assigned a new TreeItem to the EditPart tep.refresh(); } if (widget instanceof TreeItem) ((TreeItem) widget).setExpanded(expanded); } else { Iterator iter = getChildren().iterator(); while (iter.hasNext()) ((TreeEditPart) iter.next()).setWidget(null); } this.widget = widget; }
private Tree getTree() { Widget widget = ((TreeEditPart) getHost()).getWidget(); if (widget instanceof Tree) return (Tree) widget; else return ((TreeItem) widget).getParent(); }
/** * @see org.eclipse.gef.ui.parts.AbstractEditPartViewer#reveal(org.eclipse.gef.EditPart) */ public void reveal(EditPart part) { if (!(part instanceof TreeEditPart)) return; TreeEditPart treePart = (TreeEditPart) part; Tree tree = (Tree) getControl(); Widget widget = treePart.getWidget(); if (widget instanceof TreeItem) tree.showItem((TreeItem) widget); }
/** * Unhooks a control so that it can be reset. This method deactivates the * contents, removes the Control as being the Control of the * RootTreeEditPart, etc. It does not remove the listeners because it is * causing errors, although that would be a desirable outcome. */ protected void unhookControl() { if (getControl() == null) return; super.unhookControl(); // Ideally, you would want to remove the listeners here TreeEditPart tep = (TreeEditPart) getRootEditPart(); tep.setWidget(null); }
protected void removeChildVisual(EditPart childEditPart) { TreeEditPart treeEditPart = (TreeEditPart) childEditPart; if (treeEditPart.getWidget() != null) { treeEditPart.getWidget().dispose(); treeEditPart.setWidget(null); } }
/** * Disposes the child's <code>widget</code> and sets it to <code>null</code> * . * * @see AbstractEditPart#removeChildVisual(EditPart) */ protected void removeChildVisual(EditPart childEditPart) { TreeEditPart treeEditPart = (TreeEditPart) childEditPart; treeEditPart.getWidget().dispose(); treeEditPart.setWidget(null); }
/** * This is where the child gets added. No TreeItem is needed here because * the contents is actually represented by the Tree iteself. * * @param childEditPart * EditPart of child to be added. * @param index * Position where it is to be added. */ protected void addChildVisual(EditPart childEditPart, int index) { ((TreeEditPart) childEditPart).setWidget(widget); }
/** * This is where the child gets removed. This method is overridden here so * that the AbstractTreeEditPart does not dispose the widget, which is the * Tree in this case. The tree is owned by the viewer, not the child. * * @param childEditPart * EditPart of child to be removed. */ protected void removeChildVisual(EditPart childEditPart) { ((TreeEditPart) childEditPart).setWidget(null); }