public void onDoubleClick(DoubleClickEvent e) {

    GPoint point = table.getIndexFromPixel(e.getClientX(), e.getClientY());

    if (point != null) {
      // auto-fill down if dragging dot is double-clicked
      if (table.isOverDot) {
        // TODO handleAutoFillDown();
        return;
      }

      // otherwise, doubleClick edits cell

      if (!(table.getOneClickEditMap().containsKey(point) && view.allowSpecialEditor())) {
        table.setAllowEditing(true);
        table.editCellAt(table.getSelectedRow() + 1, table.getSelectedColumn() + 1);

        // workaround, see
        // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4192625
        final AutoCompleteTextFieldW f = (AutoCompleteTextFieldW) table.getEditorWidget();
        if (f != null) {
          f.requestFocus();
          // ?//f.getCaret().setVisible(true);
        }

        table.setAllowEditing(false);
      }
    }
  }
  /*
   * auto-insert degree symbol when appropriate
   */
  public void onKeyUp(KeyUpEvent e) {

    // return unless digit typed (instead of !Character.isDigit)
    if (e.getNativeKeyCode() < 48
        || (e.getNativeKeyCode() > 57 && e.getNativeKeyCode() < 96)
        || e.getNativeKeyCode() > 105) return;

    AutoCompleteTextFieldW tc = inputPanel.getTextComponent();
    String text = tc.getText();

    // if text already contains degree symbol or variable
    for (int i = 0; i < text.length(); i++) {
      if (!StringUtil.isDigit(text.charAt(i))) return;
    }

    int caretPos = tc.getCaretPosition();

    tc.setText(tc.getText() + Unicode.degree);

    tc.setCaretPosition(caretPos);
  }