Class DelegatingDropAdapter

java.lang.Object
org.eclipse.jface.util.DelegatingDropAdapter
All Implemented Interfaces:
EventListener, DropTargetListener, SWTEventListener

public class DelegatingDropAdapter extends Object implements DropTargetListener
A DelegatingDropAdapter is a DropTargetListener that maintains and delegates to a set of TransferDropTargetListeners. Each TransferDropTargetListener can then be implemented as if it were the DropTarget's only DropTargetListener.

On dragEnter, dragOperationChanged, dragOver and drop, a current listener is obtained from the set of all TransferDropTargetListeners. The current listener is the first listener to return true for TransferDropTargetListener.isEnabled(DropTargetEvent). The current listener is forwarded all DropTargetEvents until some other listener becomes the current listener, or the drop terminates.

After adding all TransferDropTargetListeners to the DelegatingDropAdapter the combined set of Transfers should be set in the SWT DropTarget. #getTransfers() provides the set of Transfer types of all TransferDropTargetListeners.

The following example snippet shows a DelegatingDropAdapter with two TransferDropTargetListeners. One supports dropping resources and demonstrates how a listener can be disabled in the isEnabled method. The other listener supports text transfer.

 
                final TreeViewer viewer = new TreeViewer(shell, SWT.NONE);
                DelegatingDropAdapter dropAdapter = new DelegatingDropAdapter();
                dropAdapter.addDropTargetListener(new TransferDropTargetListener() {
                        public Transfer getTransfer() {
                                return ResourceTransfer.getInstance();
                        }
                        public boolean isEnabled(DropTargetEvent event) {
                                // disable drop listener if there is no viewer selection
                                if (viewer.getSelection().isEmpty())
                                        return false;
                                return true;
                        }
                        public void dragEnter(DropTargetEvent event) {}
                        public void dragLeave(DropTargetEvent event) {}
                        public void dragOperationChanged(DropTargetEvent event) {}
                        public void dragOver(DropTargetEvent event) {}
                        public void drop(DropTargetEvent event) {
                                if (event.data == null)
                                        return;
                                IResource[] resources = (IResource[]) event.data;
                                if (event.detail == DND.DROP_COPY) {
                                        // copy resources
                                } else {
                                        // move resources
                                }

                        }
                        public void dropAccept(DropTargetEvent event) {}
                });
                dropAdapter.addDropTargetListener(new TransferDropTargetListener() {
                        public Transfer getTransfer() {
                                return TextTransfer.getInstance();
                        }
                        public boolean isEnabled(DropTargetEvent event) {
                                return true;
                        }
                        public void dragEnter(DropTargetEvent event) {}
                        public void dragLeave(DropTargetEvent event) {}
                        public void dragOperationChanged(DropTargetEvent event) {}
                        public void dragOver(DropTargetEvent event) {}
                        public void drop(DropTargetEvent event) {
                                if (event.data == null)
                                        return;
                                System.out.println(event.data);
                        }
                        public void dropAccept(DropTargetEvent event) {}
                });
                viewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, dropAdapter.getTransfers(), dropAdapter);
 
 
Since:
3.0
  • Constructor Details

    • DelegatingDropAdapter

      public DelegatingDropAdapter()
  • Method Details