public void onMouseReleased(final MouseEvent e) {
    _lastPressedConstraintView = null;

    ConstraintHitData hitData = findHit(e);
    if (ConstraintHit.LINE == hitData.getConstraintHit()) {
      hitData.getConstraintView().mouseReleased(e);
    } else if (ConstraintHit.NONE == hitData.getConstraintHit()) {
      maybeShowPopup(e);
    }
  }
  public void onMousePressed(final MouseEvent e) {
    final ConstraintHitData hitData = findHit(e);
    if (ConstraintHit.LINE == hitData.getConstraintHit()) {
      _lastPressedConstraintView = hitData.getConstraintView();

      if (InputEvent.BUTTON3_MASK == e.getModifiers()) {
        refreshSelection(hitData.getConstraintView(), false);
        SwingUtilities.invokeLater(
            new Runnable() {
              public void run() {
                hitData.getConstraintView().mousePressed(e);
              }
            });
      } else {
        hitData.getConstraintView().mousePressed(e);
      }
    } else if (ConstraintHit.NONE == hitData.getConstraintHit()) {
      maybeShowPopup(e);
    }
  }
  public void onMouseClicked(final MouseEvent e) {
    final ConstraintHitData hitData = findHit(e);

    if (ConstraintHit.LINE == hitData.getConstraintHit()) {
      refreshSelection(hitData.getConstraintView(), InputEvent.BUTTON1_MASK == e.getModifiers());
      SwingUtilities.invokeLater(
          new Runnable() {
            public void run() {
              hitData.getConstraintView().mouseClicked(e);
            }
          });
    }
  }