public void onMouseDown(MouseDownEvent event) {
    startX = event.getClientX();
    startY = event.getClientY();
    if (isDisabled() || event.getNativeButton() != NativeEvent.BUTTON_LEFT) {
      return;
    }

    clickTarget = Element.as(event.getNativeEvent().getEventTarget());
    mouseMoveCanceled = false;

    if (weekGrid.getCalendar().isEventMoveAllowed() || clickTargetsResize()) {
      moveRegistration = addMouseMoveHandler(this);
      setFocus(true);
      try {
        startYrelative = (int) ((double) event.getRelativeY(caption) % slotHeight);
        startXrelative =
            (event.getRelativeX(weekGrid.getElement()) - weekGrid.timebar.getOffsetWidth())
                % getDateCellWidth();
      } catch (Exception e) {
        GWT.log("Exception calculating relative start position", e);
      }
      mouseMoveStarted = false;
      Style s = getElement().getStyle();
      s.setZIndex(1000);
      startDatetimeFrom = (Date) calendarEvent.getStartTime().clone();
      startDatetimeTo = (Date) calendarEvent.getEndTime().clone();
      Event.setCapture(getElement());
    }

    // make sure the right cursor is always displayed
    if (clickTargetsResize()) {
      addGlobalResizeStyle();
    }

    /*
     * We need to stop the event propagation or else the WeekGrid
     * range select will kick in
     */
    event.stopPropagation();
    event.preventDefault();
  }
Example #2
0
  public void attachWidgetToMouse(
      MouseDownEvent event,
      Widget w,
      MouseMoveHandler mouseMoveHandler,
      MouseUpHandler mouseUpHandler) {
    this.mouseMoveHandler = mouseMoveHandler;
    this.mouseUpHandler = mouseUpHandler;
    if (widget == w) return;

    clearWidgetFromMouse();
    widget = w;

    if (widget != null) {
      height = w.getOffsetHeight();
      width = w.getOffsetWidth();
      offsetX = event.getRelativeX(w.getElement());
      offsetY = event.getRelativeY(w.getElement());
      parent.add(widget);
      parent.setWidgetTopHeight(widget, event.getClientY() - offsetY, Unit.PX, height, Unit.PX);
      parent.setWidgetLeftWidth(widget, event.getClientX() - offsetX, Unit.PX, width, Unit.PX);
      attachHandlers();
    }
  }
  public void onMouseDown(MouseDownEvent e) {

    GPoint p = table.getIndexFromPixel(e.getClientX(), e.getClientY());
    if (p.getY() == 0 && p.getX() > 0) {
      if (table.isEditing()) editor.cancelCellEditing();
      table.scc.onMouseDown(e);
      return;
    } else if (p.getX() == 0 && p.getY() > 0) {
      if (table.isEditing()) editor.cancelCellEditing();
      table.srh.onMouseDown(e);
      return;
    }

    // if (!view.hasViewFocus())
    //	((LayoutW) app.getGuiManager().getLayout()).getDockManager()
    //			.setFocusedPanel(App.VIEW_SPREADSHEET);
    view.requestFocus();

    mouseIsDown = true;
    e.preventDefault();
    boolean eConsumed = false;

    boolean rightClick = (e.getNativeButton() == NativeEvent.BUTTON_RIGHT);

    // tell selection listener about click on GeoElement
    if (!rightClick && app.getMode() == EuclidianConstants.MODE_SELECTION_LISTENER) {
      int row = p.getY(); // ?//table.rowAtPoint(e.getPoint());
      int col = p.getX(); // ?//table.columnAtPoint(e.getPoint());
      GeoElement geo = (GeoElement) model.getValueAt(row - 1, col - 1);

      // double click or empty geo
      if (geo != null) {
        // tell selection listener about click
        app.geoElementSelected(geo, false);
        return;
      }
    }

    if (!rightClick) {

      // memory testing
      // Application.debug("", true, true, 0);

      if (table.getSelectionType() != MyTable.CELL_SELECT) {
        table.setSelectionType(MyTable.CELL_SELECT);
      }

      // force column selection
      if (view.isColumnSelect()) {
        GPoint point = table.getIndexFromPixel(e.getClientX(), e.getClientY());
        if (point != null) {
          int column = point.getX();
          table.setColumnSelectionInterval(column, column);
        }
      }

      /*
       * if (MyTable.this.getSelectionModel().getSelectionMode() !=
       * ListSelectionModel.SINGLE_INTERVAL_SELECTION) {
       * setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
       * setColumnSelectionAllowed(true); setRowSelectionAllowed(true); }
       */

      GPoint point1 = table.getMaxSelectionPixel();
      if (point1 == null) return;

      // Handle click in another cell while editing a cell:
      // if the edit string begins with "=" then the clicked cell name
      // is inserted into the edit text
      if (editor.isEditing()) {
        String text = editor.getEditingValue();
        if (text.startsWith("=")) {
          GPoint point = table.getIndexFromPixel(e.getClientX(), e.getClientY());
          if (point != null && (point.getX() != editor.column || point.getY() != editor.row)) {
            // in Web, it's necessary to distinguish the editor row and column
            // because the event is not catched and not taken by the textfield

            int column = point.getX();
            int row = point.getY();
            GeoElement geo = RelativeCopy.getValue(app, column - 1, row - 1);
            if (geo != null) {

              // get cell name
              String name = GeoElementSpreadsheet.getSpreadsheetCellName(column - 1, row - 1);
              if (geo.isGeoFunction()) name += "(x)";
              selectedCellName = name;

              // get prefix/post substrings for current text caret
              // position
              int caretPos = editor.getCaretPosition();
              prefix0 = text.substring(0, caretPos);
              postfix0 = text.substring(caretPos, text.length());

              table.isDragging2 = true;
              table.minColumn2 = column;
              table.maxColumn2 = column;
              table.minRow2 = row;
              table.maxRow2 = row;

              // insert the geo label into the editor string
              editor.addLabel(name);

              eConsumed = true;
              table.repaint();
            }
            eConsumed = true;
          }
        } else {

          // if text does not start with "=" then stop the editor
          // and allow it to create/redefine a geo here
          editor.setAllowProcessGeo(true);
          editor.stopCellEditing();
          editor.setAllowProcessGeo(false);
          table.finishEditing();
          // almost like MyCellEditorW.stopCellEditing(int,int)
        }
      } else if (table.isOverDot) {
        table.isDragingDot = true;
        eConsumed = true;
      }
    }

    if (eConsumed) return;

    // MyTable's default listeners follow, they should be simulated in Web e.g. here

    // change selection if right click is outside current selection
    if (p.getY() != table.anchorSelectionRow + 1 || p.getX() != table.anchorSelectionColumn + 1) {
      // switch to cell selection mode

      if (p.getY() > 0 && p.getX() > 0) {
        if (table.getSelectionType() != MyTable.CELL_SELECT) {
          table.setSelectionType(MyTable.CELL_SELECT);
        }

        // now change the selection
        table.changeSelection(p.getY() - 1, p.getX() - 1, false, false);
        table.repaint();
      }
    }
  }