Class DelegatingDropAdapter
- java.lang.Object
-
- org.eclipse.jface.util.DelegatingDropAdapter
-
- All Implemented Interfaces:
EventListener
,DropTargetListener
,SWTEventListener
public class DelegatingDropAdapter extends Object implements DropTargetListener
ADelegatingDropAdapter
is aDropTargetListener
that maintains and delegates to a set ofTransferDropTargetListener
s. EachTransferDropTargetListener
can then be implemented as if it were the DropTarget's onlyDropTargetListener
.On
dragEnter
,dragOperationChanged
,dragOver
anddrop
, a current listener is obtained from the set of allTransferDropTargetListeners
. The current listener is the first listener to returntrue
forTransferDropTargetListener.isEnabled(DropTargetEvent)
. The current listener is forwarded allDropTargetEvents
until some other listener becomes the current listener, or the drop terminates.After adding all
TransferDropTargetListeners
to theDelegatingDropAdapter
the combined set ofTransfers
should be set in the SWTDropTarget
.#getTransfers()
provides the set ofTransfer
types of allTransferDropTargetListeners
.The following example snippet shows a
DelegatingDropAdapter
with twoTransferDropTargetListeners
. 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 Summary
Constructors Constructor Description DelegatingDropAdapter()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDropTargetListener(TransferDropTargetListener listener)
Adds the givenTransferDropTargetListener
.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 ofTransfer
types of allTransferDropTargetListeners
.boolean
isEmpty()
Returnstrue
if there are no listeners to delegate events to.void
removeDropTargetListener(TransferDropTargetListener listener)
Removes the givenTransferDropTargetListener
.
-
-
-
Method Detail
-
addDropTargetListener
public void addDropTargetListener(TransferDropTargetListener listener)
Adds the givenTransferDropTargetListener
.- 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 interfaceDropTargetListener
- 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 interfaceDropTargetListener
- 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 interfaceDropTargetListener
- 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 theevent.detail
field is set toDND.DROP_NONE
to indicate an invalid drop.- Specified by:
dragOver
in interfaceDropTargetListener
- 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 tonull
afterwards.- Specified by:
drop
in interfaceDropTargetListener
- 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 interfaceDropTargetListener
- Parameters:
event
- the drop target event- See Also:
DropTargetListener.dropAccept(DropTargetEvent)
-
getTransfers
public Transfer[] getTransfers()
Returns the combined set ofTransfer
types of allTransferDropTargetListeners
.- Returns:
- the combined set of
Transfer
types
-
isEmpty
public boolean isEmpty()
Returnstrue
if there are no listeners to delegate events to.- Returns:
true
if there are noTransferDropTargetListeners
false
otherwise
-
removeDropTargetListener
public void removeDropTargetListener(TransferDropTargetListener listener)
Removes the givenTransferDropTargetListener
. Listeners should not be removed while a drag and drop operation is in progress.- Parameters:
listener
- the listener to remove
-
-