Пример #1
0
  public void track(DnDInfo info) {
    DropAgent curAgent = dropAgent;

    // Re-use the same dropAgent until it returns 'false' from track
    if (dropAgent != null) dropAgent = dropAgent.track(dragElement, info) ? dropAgent : null;

    // If we don't have a drop agent currently try to get one
    if (dropAgent == null) {
      if (curAgent != null) curAgent.dragLeave(dragElement, info);

      dropAgent = dndManager.getDropAgent(dragElement, info);

      if (dropAgent != null) dropAgent.dragEnter(dragElement, info);
      else {
        dndManager.setCursor(Display.getCurrent().getSystemCursor(SWT.CURSOR_NO));
      }
    }
  }
  @Override
  public void dragLeave(MUIElement dragElement, DnDInfo info) {
    if (dndManager.getFeedbackStyle() != DnDManager.SIMPLE) unDock(dragElement);
    dndManager.clearOverlay();
    clearFeedback();
    curDockLocation = NOWHERE;

    super.dragLeave(dragElement, info);
  }
Пример #3
0
  /**
   * Restore the DragAgent to a state where it will be ready to start a new drag
   *
   * @param performDrop determines if a drop operation should be performed if possible
   */
  public void dragFinished(boolean performDrop, DnDInfo info) {
    boolean isNoDrop =
        dndManager.getDragShell().getCursor()
            == Display.getCurrent().getSystemCursor(SWT.CURSOR_NO);
    if (performDrop && dropAgent != null && !isNoDrop) {
      dropAgent.drop(dragElement, info);
    } else {
      cancelDrag();
    }

    if (dropAgent != null) dropAgent.dragLeave(dragElement, info);

    if (dragPH == null) return;

    if (dragPH != null) {
      dragPH.getParent().getChildren().remove(dragPH);
      dragPH = null;
    }

    dragElement = null;
  }
  @Override
  public void dragEnter(MUIElement dragElement, DnDInfo info) {
    super.dragEnter(dragElement, info);

    clientBounds = dropCTF.getClientArea();
    clientBounds = Display.getCurrent().map(dropCTF, null, clientBounds);
    ctfBounds = dropCTF.getBounds();
    ctfBounds = Display.getCurrent().map(dropCTF.getParent(), null, ctfBounds);

    // Find the root of the dropStack's sash structure
    outerRelTo = dropStack.getParent();
    if (outerRelTo instanceof MPartSashContainer) {
      while (outerRelTo != null && !(outerRelTo.getWidget() instanceof Composite))
        outerRelTo = outerRelTo.getParent();
    }

    // If the stack is in an MArea or a Perspective then allow 'outer' docking
    if (outerRelTo instanceof MArea) {
      // If the relTo is in the MArea then use its 'curSharedRef'
      outerRelTo = outerRelTo.getCurSharedRef();
    } else if (outerRelTo instanceof MPartSashContainer) {
      MUIElement relToParent = outerRelTo.getParent();
      if (relToParent instanceof MArea) {
        outerRelTo = relToParent.getCurSharedRef();
      } else if (relToParent instanceof MPerspective) {
        outerRelTo = relToParent.getParent(); // PerspectiveStack
      } else {
        outerRelTo = null;
      }
    } else {
      outerRelTo = null;
    }

    if (outerRelTo != null) {
      Composite outerComposite = (Composite) outerRelTo.getWidget();
      ocBounds = outerComposite.getBounds();
      ocBounds = Display.getCurrent().map(outerComposite.getParent(), null, ocBounds);
    } else {
      ocBounds = null;
    }

    getDockLocation(info);
    showFeedback(curDockLocation);
  }
Пример #5
0
  /**
   * Start a drag operation on the given element.
   *
   * @param element The element to drag
   */
  public void dragStart(DnDInfo info) {
    // cache a placeholder where the element started (NOTE: this also prevents the parent from
    // being auto-removed by going 'empty'
    if (dragElement.getParent() != null) {
      if (dragElement instanceof MStackElement)
        dragPH = AdvancedFactoryImpl.eINSTANCE.createPlaceholder();
      else if (dragElement instanceof MPartStack)
        dragPH = BasicFactoryImpl.eINSTANCE.createPartSashContainer();
      else if (dragElement instanceof MTrimElement)
        dragPH = MenuFactoryImpl.eINSTANCE.createToolControl();

      dragPH.setElementId(DRAG_PLACEHOLDER_ID);
      dragPH.setToBeRendered(false);

      List<MUIElement> kids = dragElement.getParent().getChildren();
      kids.add(kids.indexOf(dragElement), dragPH);
    }

    dropAgent = dndManager.getDropAgent(dragElement, info);
    if (dropAgent != null) dropAgent.dragEnter(dragElement, info);
  }