Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Eclipse Platform Release 3.0
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.eclipse.jface.util
Class DelegatingDropAdapter

    java.lang.Object
      org.eclipse.jface.util.DelegatingDropAdapter

All Implemented Interfaces:
  DropTargetListener, EventListener, org.eclipse.swt.internal.SWTEventListener

public class DelegatingDropAdapter
extends Object
implements DropTargetListener

A `DelegatingDropAdapter` is a `DropTargetListener` that maintains and delegates to a set of `TransferDropTargetListener`s. 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);

`

NOTE: This API is experimental and subject to change including removal.

Since:
  2.2

Constructor Summary
`DelegatingDropAdapter()`

Method Summary
`void` | `addDropTargetListener(TransferDropTargetListener listener)` Adds the given `TransferDropTargetListener`.
`void` | `dragEnter(DropTargetEvent event)` The cursor has entered the drop target boundaries.
`void` | `dragLeave(DropTargetEvent event)` The cursor has left the drop target boundaries.
`void` | `dragOperationChanged(DropTargetEvent event)` The operation being performed has changed (usually due to the user changing a drag modifier key while dragging).
`void` | `dragOver(DropTargetEvent event)` The cursor is moving over the drop target.
`void` | `drop(DropTargetEvent event)` Forwards this event to the current listener, if there is one.
`void` | `dropAccept(DropTargetEvent event)` Forwards this event to the current listener if there is one.
`Transfer[]` | `getTransfers()` Returns the combined set of `Transfer` types of all `TransferDropTargetListeners`.
`boolean` | `isEmpty()` Returns `true` if there are no listeners to delegate events to.
`void` | `removeDropTargetListener(TransferDropTargetListener listener)` Removes the given `TransferDropTargetListener`.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### DelegatingDropAdapter

    public DelegatingDropAdapter()

Method Detail

### addDropTargetListener

    public void addDropTargetListener(TransferDropTargetListener listener)

  Adds the given `TransferDropTargetListener`.

  Parameters:
    `listener` - the new listener

### dragEnter

    public void dragEnter(DropTargetEvent event)

  The cursor has entered the drop target boundaries. The current listener is updated, and `#dragEnter()` is forwarded to the current listener.

  Specified by:
    `dragEnter` in interface `DropTargetListener`
  Parameters:
    `event` - the drop target event
  See Also:
    `DropTargetListener.dragEnter(DropTargetEvent)`

### dragLeave

    public void dragLeave(DropTargetEvent event)

  The cursor has left the drop target boundaries. The event is forwarded to the current listener.

  Specified by:
    `dragLeave` in interface `DropTargetListener`
  Parameters:
    `event` - the drop target event
  See Also:
    `DropTargetListener.dragLeave(DropTargetEvent)`

### dragOperationChanged

    public void dragOperationChanged(DropTargetEvent event)

  The operation being performed has changed (usually due to the user changing a drag modifier key while dragging). Updates the current listener and forwards this event to that listener.

  Specified by:
    `dragOperationChanged` in interface `DropTargetListener`
  Parameters:
    `event` - the drop target event
  See Also:
    `DropTargetListener.dragOperationChanged(DropTargetEvent)`

### dragOver

    public void dragOver(DropTargetEvent event)

  The cursor is moving over the drop target. Updates the current listener and forwards this event to that listener. If no listener can handle the drag operation the `event.detail` field is set to `DND.DROP_NONE` to indicate an invalid drop.

  Specified by:
    `dragOver` in interface `DropTargetListener`
  Parameters:
    `event` - the drop target event
  See Also:
    `DropTargetListener.dragOver(DropTargetEvent)`

### drop

    public void drop(DropTargetEvent event)

  Forwards this event to the current listener, if there is one. Sets the current listener to `null` afterwards.

  Specified by:
    `drop` in interface `DropTargetListener`
  Parameters:
    `event` - the drop target event
  See Also:
    `DropTargetListener.drop(DropTargetEvent)`

### dropAccept

    public void dropAccept(DropTargetEvent event)

  Forwards this event to the current listener if there is one.

  Specified by:
    `dropAccept` in interface `DropTargetListener`
  Parameters:
    `event` - the drop target event
  See Also:
    `DropTargetListener.dropAccept(DropTargetEvent)`

### getTransfers

    public Transfer[] getTransfers()

  Returns the combined set of `Transfer` types of all `TransferDropTargetListeners`.

  Returns:
    the combined set of `Transfer` types

### isEmpty

    public boolean isEmpty()

  Returns `true` if there are no listeners to delegate events to.

  Returns:
    `true` if there are no `TransferDropTargetListeners` `false` otherwise

### removeDropTargetListener

    public void removeDropTargetListener(TransferDropTargetListener listener)

  Removes the given `TransferDropTargetListener`. Listeners should not be removed while a drag and drop operation is in progress.

  Parameters:
    `listener` - the listener to remove

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Eclipse Platform Release 3.0
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Guidelines for using Eclipse APIs.

Copyright (c) IBM Corp. and others 2000, 2004. All rights reserved.