public void installDndSupport(ChangeListOwner owner) {
    myDragOwner = owner;
    myDropTarget = new DropTarget();
    myDndManager = DnDManager.getInstance();

    myDndManager.registerSource(this);
    myDndManager.registerTarget(myDropTarget, this);
  }
  @Override
  public void dispose() {
    if (myDropTarget != null) {
      myDndManager.unregisterSource(this);
      myDndManager.unregisterTarget(myDropTarget, this);

      myDropTarget = null;
      myDndManager = null;
      myDragOwner = null;
    }
  }
 @Override
 public void dispose() {
   if (myDndManager != null) {
     if (myDropTarget != null) {
       myDndManager.unregisterTarget(myDropTarget, myTree);
       myDropTarget = null;
     }
     if (myDragSource != null) {
       myDndManager.unregisterSource(myDragSource, myTree);
       myDragSource = null;
     }
     myDndManager = null;
   }
   setTreeBuilder(null);
   myTree = null;
   myTreeStructure = null;
 }
Exemplo n.º 4
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));
      }
    }
  }
  protected void enableDnD() {
    if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
      myDropTarget =
          new ProjectViewDropTarget(
              myTree,
              new Retriever() {
                @Override
                public PsiElement getPsiElement(@Nullable TreeNode node) {
                  return getPSIElement(getElementFromTreeNode(node));
                }

                @Override
                public Module getModule(TreeNode treeNode) {
                  return getNodeModule(getElementFromTreeNode(treeNode));
                }
              },
              myProject);
      myDragSource = new MyDragSource();
      myDndManager = DnDManager.getInstance();
      myDndManager.registerSource(myDragSource, myTree);
      myDndManager.registerTarget(myDropTarget, myTree);
    }
  }
Exemplo n.º 6
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);
  }
Exemplo n.º 7
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;
  }
  protected final JTree createTree(boolean dndAware) {
    final Tree tree;
    final NullableFunction<Object, PsiElement> toPsiConverter =
        o -> {
          if (o instanceof HierarchyNodeDescriptor) {
            return ((HierarchyNodeDescriptor) o).getContainingFile();
          }
          return null;
        };

    if (dndAware) {
      tree =
          new DnDAwareTree(new DefaultTreeModel(new DefaultMutableTreeNode(""))) {
            @Override
            public void removeNotify() {
              super.removeNotify();
              if (ScreenUtil.isStandardAddRemoveNotify(this))
                myRefreshAction.unregisterCustomShortcutSet(this);
            }

            @Override
            public boolean isFileColorsEnabled() {
              return ProjectViewTree.isFileColorsEnabledFor(this);
            }

            @Override
            public Color getFileColorFor(Object object) {
              return ProjectViewTree.getColorForObject(object, myProject, toPsiConverter);
            }
          };

      if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
        DnDManager.getInstance()
            .registerSource(
                new DnDSource() {
                  @Override
                  public boolean canStartDragging(final DnDAction action, final Point dragOrigin) {
                    return getSelectedElements().length > 0;
                  }

                  @Override
                  public DnDDragStartBean startDragging(
                      final DnDAction action, final Point dragOrigin) {
                    return new DnDDragStartBean(
                        new TransferableWrapper() {
                          @Override
                          public TreeNode[] getTreeNodes() {
                            return tree.getSelectedNodes(TreeNode.class, null);
                          }

                          @Override
                          public PsiElement[] getPsiElements() {
                            return getSelectedElements();
                          }

                          @Override
                          public List<File> asFileList() {
                            return PsiCopyPasteManager.asFileList(getPsiElements());
                          }
                        });
                  }

                  @Override
                  public Pair<Image, Point> createDraggedImage(
                      final DnDAction action, final Point dragOrigin) {
                    return null;
                  }

                  @Override
                  public void dragDropEnd() {}

                  @Override
                  public void dropActionChanged(final int gestureModifiers) {}
                },
                tree);
      }
    } else {
      tree =
          new Tree(new DefaultTreeModel(new DefaultMutableTreeNode(""))) {
            @Override
            public void removeNotify() {
              super.removeNotify();
              if (ScreenUtil.isStandardAddRemoveNotify(this))
                myRefreshAction.unregisterCustomShortcutSet(this);
            }

            @Override
            public boolean isFileColorsEnabled() {
              return ProjectViewTree.isFileColorsEnabledFor(this);
            }

            @Override
            public Color getFileColorFor(Object object) {
              return ProjectViewTree.getColorForObject(object, myProject, toPsiConverter);
            }
          };
    }
    configureTree(tree);
    EditSourceOnDoubleClickHandler.install(tree);
    myRefreshAction.registerShortcutOn(tree);

    return tree;
  }