/** @generated */ public void relocate(CellEditor celleditor) { Text text = (Text) celleditor.getControl(); Rectangle rect = getLabel().getTextBounds().getCopy(); getLabel().translateToAbsolute(rect); int avr = FigureUtilities.getFontMetrics(text.getFont()).getAverageCharWidth(); rect.setSize(new Dimension(text.computeSize(SWT.DEFAULT, SWT.DEFAULT)).expand(avr * 2, 0)); if (!rect.equals(new Rectangle(text.getBounds()))) { text.setBounds(rect.x, rect.y, rect.width, rect.height); } }
/** * Traverses to the closest EditPart in the given list that is also in the given direction. * * @param event the KeyEvent for the keys that were pressed to trigger this traversal * @param direction PositionConstants.* indicating the direction in which to traverse */ boolean navigateNextSibling(KeyEvent event, int direction, List<?> list) { IEntityPart epStart = getFocusEntityPart(); if (epStart instanceof ITextualEntityPart) { ITextualEntityPart textualEntityPart = (ITextualEntityPart) epStart; ITextualFigure textualFigure = textualEntityPart.getTextualFigure(); String text = textualFigure.getText(); int line = CaretUtils.getLineFromPosition(text, textualEntityPart.getCaretPosition()); int lines = CaretUtils.getCaretLines(text); if ((direction == PositionConstants.WEST && textualEntityPart.getCaretPosition() > 0) || (direction == PositionConstants.EAST && textualEntityPart.getCaretPosition() < textualEntityPart.getCaretPositions())) { int position = textualEntityPart.getCaretPosition() + (direction == PositionConstants.WEST ? -1 : 1); CaretUpdater.sheduleSyncUpdate( getViewer(), textualEntityPart.getModelEntity(), position, true); return true; } else if ((direction == PositionConstants.NORTH && line > 0) || (direction == PositionConstants.SOUTH && line < lines)) { int dy = FigureUtilities.getFontMetrics(textualFigure.getFont()).getHeight() * (direction == PositionConstants.NORTH ? -1 : 1); Point location = textualFigure.getCaretBounds().getCenter().translate(0, dy); CaretUpdater.sheduleSyncUpdate( getViewer(), textualEntityPart.getModelEntity(), location, true); textualEntityPart.updateCaret(location); return true; } } if (!(epStart instanceof IGraphicalEntityPart)) return false; IFigure figure = ((IGraphicalEntityPart) epStart).getFigure(); Point pStart = getNavigationPoint(figure); figure.translateToAbsolute(pStart); EditPart next = findSibling( list, pStart, direction, epStart); // parent.findSibling(pStart, direction, epStart); while (next == null) { if (!(epStart.getParent() instanceof IGraphicalEntityPart)) return false; epStart = (IGraphicalEntityPart) epStart.getParent(); if (epStart == getViewer().getContents() || epStart.getParent() == getViewer().getContents() || epStart.getParent() == null) return false; list = epStart.getParent().getChildren(); next = findSibling(list, pStart, direction, epStart); } // next = next.enter(pStart, direction, epStart);1+2 navigateTo(next, event); return true; }
private static int getFontHeight(Font f) { FontMetrics fm = FigureUtilities.getFontMetrics(f); return fm.getHeight(); }