1 /******************************************************************************* 2 * Copyright (c) 2007, 2019 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.jdt.internal.ui.dnd; 15 16 import org.eclipse.swt.dnd.DND; 17 import org.eclipse.swt.dnd.FileTransfer; 18 import org.eclipse.swt.dnd.Transfer; 19 20 import org.eclipse.core.runtime.Assert; 21 22 import org.eclipse.jface.util.DelegatingDropAdapter; 23 import org.eclipse.jface.util.LocalSelectionTransfer; 24 import org.eclipse.jface.util.TransferDropTargetListener; 25 import org.eclipse.jface.viewers.StructuredViewer; 26 27 import org.eclipse.ui.part.PluginTransfer; 28 29 import org.eclipse.jdt.internal.ui.packageview.FileTransferDropAdapter; 30 import org.eclipse.jdt.internal.ui.packageview.PluginTransferDropAdapter; 31 import org.eclipse.jdt.internal.ui.packageview.SelectionTransferDropAdapter; 32 33 public class JdtViewerDropSupport { 34 35 private final StructuredViewer fViewer; 36 private final DelegatingDropAdapter fDelegatingDropAdapter; 37 private final SelectionTransferDropAdapter fReorgDropListener; 38 private boolean fStarted; 39 JdtViewerDropSupport(StructuredViewer viewer)40 public JdtViewerDropSupport(StructuredViewer viewer) { 41 fViewer= viewer; 42 43 fDelegatingDropAdapter= new DelegatingDropAdapter(); 44 fReorgDropListener= new SelectionTransferDropAdapter(fViewer); 45 fDelegatingDropAdapter.addDropTargetListener(fReorgDropListener); 46 fDelegatingDropAdapter.addDropTargetListener(new FileTransferDropAdapter(fViewer)); 47 fDelegatingDropAdapter.addDropTargetListener(new PluginTransferDropAdapter(fViewer)); 48 49 fStarted= false; 50 } 51 addDropTargetListener(TransferDropTargetListener listener)52 public void addDropTargetListener(TransferDropTargetListener listener) { 53 Assert.isLegal(!fStarted); 54 55 fDelegatingDropAdapter.addDropTargetListener(listener); 56 } 57 start()58 public void start() { 59 Assert.isLegal(!fStarted); 60 61 int ops= DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_DEFAULT; 62 63 Transfer[] transfers= new Transfer[] { 64 LocalSelectionTransfer.getTransfer(), 65 FileTransfer.getInstance(), 66 PluginTransfer.getInstance()}; 67 68 fViewer.addDropSupport(ops, transfers, fDelegatingDropAdapter); 69 70 fStarted= true; 71 } 72 setFeedbackEnabled(boolean enabled)73 public void setFeedbackEnabled(boolean enabled) { 74 fReorgDropListener.setFeedbackEnabled(enabled); 75 } 76 77 } 78