예제 #1
0
 /** @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;
  }
예제 #3
0
 private static int getFontHeight(Font f) {
   FontMetrics fm = FigureUtilities.getFontMetrics(f);
   return fm.getHeight();
 }