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 DelegatingDragAdapter

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

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

public class DelegatingDragAdapter
extends Object
implements DragSourceListener

A `DelegatingDragAdapter` is a `DragSourceListener` that maintains and delegates to a set of `TransferDragSourceListener`s. Each TransferDragSourceListener can then be implemented as if it were the `DragSource's` only DragSourceListener.

When a drag is started, a subset of all `TransferDragSourceListeners` is generated and stored in a list of active listeners. This subset is calculated by forwarding `to every listener, and checking if the {@link DragSourceEvent#doit doit} field is left set to `true`.`

The `DragSource`'s set of supported Transfer types ({@link DragSource#setTransfer(Transfer[])}) is updated to reflect the Transfer types corresponding to the active listener subset.

If and when {@link #dragSetData(DragSourceEvent)} is called, a single `TransferDragSourceListener` is chosen, and only it is allowed to set the drag data. The chosen listener is the first listener in the subset of active listeners whose Transfer supports ({@link Transfer#isSupportedType(TransferData)}) the `dataType` in the `DragSourceEvent`.

The following example snippet shows a `DelegatingDragAdapter` with two `TransferDragSourceListeners`. One implements drag of text strings, the other supports file transfer and demonstrates how a listener can be disabled using the dragStart method.

`

    		final TreeViewer viewer = new TreeViewer(shell, SWT.NONE);

    		DelegatingDragAdapter dragAdapter = new DelegatingDragAdapter();
    		dragAdapter.addDragSourceListener(new TransferDragSourceListener() {
    			public Transfer getTransfer() {
    				return TextTransfer.getInstance();

` public void dragStart(DragSourceEvent event) { // always enabled, can control enablement based on selection etc. } public void dragSetData(DragSourceEvent event) { event.data = "Transfer data"; } public void dragFinished(DragSourceEvent event) { // no clean-up required } }); dragAdapter.addDragSourceListener(new TransferDragSourceListener() { public Transfer getTransfer() { return FileTransfer.getInstance(); } public void dragStart(DragSourceEvent event) { // enable drag listener if there is a viewer selection event.doit = !viewer.getSelection().isEmpty(); } public void dragSetData(DragSourceEvent event) { File file1 = new File("C:/temp/file1"); File file2 = new File("C:/temp/file2"); event.data = new String[] {file1.getAbsolutePath(), file2.getAbsolutePath()}; } public void dragFinished(DragSourceEvent event) { // no clean-up required } }); viewer.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE, dragAdapter.getTransfers(), dragAdapter);

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

Since:
  2.2

Constructor Summary
`DelegatingDragAdapter()`

Method Summary
`void` | `addDragSourceListener(TransferDragSourceListener listener)` Adds the given `TransferDragSourceListener`.
`void` | `dragFinished(DragSourceEvent event)` The drop has successfully completed.
`void` | `dragSetData(DragSourceEvent event)` The drop data is requested.
`void` | `dragStart(DragSourceEvent event)` A drag operation has started.
`Transfer[]` | `getTransfers()` Returns the `Transfer`s from every `TransferDragSourceListener`.``
`boolean` | `isEmpty()` Returns `true` if there are no listeners to delegate drag events to.
`void` | `removeDragSourceListener(TransferDragSourceListener listener)` Removes the given `TransferDragSourceListener`.

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

Constructor Detail

### DelegatingDragAdapter

    public DelegatingDragAdapter()

Method Detail

### addDragSourceListener

    public void addDragSourceListener(TransferDragSourceListener listener)

  Adds the given `TransferDragSourceListener`.

  Parameters:
    `listener` - the new listener

### dragFinished

    public void dragFinished(DragSourceEvent event)

  The drop has successfully completed. This event is forwarded to the current drag listener. Doesn't update the current listener, since the current listener is already the one that completed the drag operation.

  Specified by:
    `dragFinished` in interface `DragSourceListener`
  Parameters:
    `event` - the drag source event
  See Also:
    `DragSourceListener.dragFinished(DragSourceEvent)`

### dragSetData

    public void dragSetData(DragSourceEvent event)

  The drop data is requested. Updates the current listener and then forwards the event to it.

  Specified by:
    `dragSetData` in interface `DragSourceListener`
  Parameters:
    `event` - the drag source event
  See Also:
    `DragSourceListener.dragSetData(DragSourceEvent)`

### dragStart

    public void dragStart(DragSourceEvent event)

  A drag operation has started. Forwards this event to each listener. A listener must set `event.doit` to `false` if it cannot handle the drag operation. If a listener can handle the drag, it is added to the list of active listeners. The drag is aborted if there are no listeners that can handle it.

  Specified by:
    `dragStart` in interface `DragSourceListener`
  Parameters:
    `event` - the drag source event
  See Also:
    `DragSourceListener.dragStart(DragSourceEvent)`

### getTransfers

    public Transfer[] getTransfers()

  Returns the `Transfer`s from every `TransferDragSourceListener`.

  ``
  Returns:
    the combined `Transfer`s

### isEmpty

    public boolean isEmpty()

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

  Returns:
    `true` if there are no `TransferDragSourceListeners` `false` otherwise.

### removeDragSourceListener

    public void removeDragSourceListener(TransferDragSourceListener listener)

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

  Parameters:
    `listener` - the `TransferDragSourceListener` 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.