net.sourceforge.java.util.gui.jface.viewers.dnd
Class TreeViewerDnDHandler

java.lang.Object
  extended bynet.sourceforge.java.util.gui.jface.viewers.dnd.TreeViewerDnDHandler
All Implemented Interfaces:
DragSourceListener, DropTargetListener, EventListener, SWTEventListener

public class TreeViewerDnDHandler
extends Object
implements DragSourceListener, DropTargetListener

Enhances a JFace TreeViewer instance displaying IMutableTreeElement domain objects with Drag'n Drop support.

Author:
Sebastian Machhausen

Field Summary
private  IMutableTreeElement sourceElement
           The source IMutableTreeElement of a DnD operation
private  IMutableTreeElement targetElement
           The target IMutableTreeElement of a DnD operation
private  TreeViewer viewer
           The TreeViewer to enhance with DnD support
 
Constructor Summary
TreeViewerDnDHandler(TreeViewer viewer)
           Creates a new TreeViewerDnDHandler for the specified TreeViewer.
 
Method Summary
 void dragEnter(DropTargetEvent event)
           The cursor has entered the drop target boundaries.
 void dragFinished(DragSourceEvent event)
           The drop has successfully completed(mouse up over a valid target) or has been terminated (such as hitting the ESC key).
 void dragLeave(DropTargetEvent event)
           The cursor has left the drop target boundaries OR the drop has been cancelled OR the data is about to be dropped.
 void dragOperationChanged(DropTargetEvent event)
           The operation being performed has changed (usually due to the user changing the selected modifier key(s) while dragging).
 void dragOver(DropTargetEvent event)
           The cursor is moving over the drop target.
 void dragSetData(DragSourceEvent event)
           The data is required from the drag source.
 void dragStart(DragSourceEvent event)
           The user has begun the actions required to drag the widget.
 void drop(DropTargetEvent event)
           The data is being dropped.
 void dropAccept(DropTargetEvent event)
           The drop is about to be performed.
 boolean isValidTarget(Item targetItem)
           Verifies if the specified Item is accepted as valid target for a DnD operation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

viewer

private TreeViewer viewer

The TreeViewer to enhance with DnD support


sourceElement

private IMutableTreeElement sourceElement

The source IMutableTreeElement of a DnD operation


targetElement

private IMutableTreeElement targetElement

The target IMutableTreeElement of a DnD operation

Constructor Detail

TreeViewerDnDHandler

public TreeViewerDnDHandler(TreeViewer viewer)

Creates a new TreeViewerDnDHandler for the specified TreeViewer.

Parameters:
viewer - the TreeViewer for which to add DnD support
Method Detail

dragStart

public void dragStart(DragSourceEvent event)

The user has begun the actions required to drag the widget. This event gives the application the chance to decide if a drag should be started.

The following fields in the DragSourceEvent apply:

Specified by:
dragStart in interface DragSourceListener
Parameters:
event - the information associated with the drag start event
See Also:
DragSourceEvent

dragSetData

public void dragSetData(DragSourceEvent event)

The data is required from the drag source.

The following fields in the DragSourceEvent apply:

Specified by:
dragSetData in interface DragSourceListener
Parameters:
event - the information associated with the drag set data event
See Also:
DragSourceEvent

dragFinished

public void dragFinished(DragSourceEvent event)

The drop has successfully completed(mouse up over a valid target) or has been terminated (such as hitting the ESC key). Perform cleanup such as removing data from the source side on a successful move operation.

The following fields in the DragSourceEvent apply:

Specified by:
dragFinished in interface DragSourceListener
Parameters:
event - the information associated with the drag finished event
See Also:
DragSourceEvent

dragEnter

public void dragEnter(DropTargetEvent event)

The cursor has entered the drop target boundaries.

The following fields in the DropTargetEvent apply:

The operation value is determined by the modifier keys pressed by the user. If no keys are pressed the event.detail field is set to DND.DROP_DEFAULT. If the application does not set the event.detail to something other than DND.DROP_DEFAULT the operation will be set to the platform defined standard default.

The currentDataType is determined by the first transfer agent specified in setTransfer() that matches a data type provided by the drag source.

It is possible to get a DragEnter event when the drag source does not provide any matching data. In this case, the default operation is DND.DROP_NONE and the currentDataType is null.

The application can change the operation that will be performed by modifying the detail field but the choice must be one of the values in the operations field or DND.DROP_NONE.

The application can also change the type of data being requested by modifying the currentDataTypes field but the value must be one of the values in the dataTypes list.

Specified by:
dragEnter in interface DropTargetListener
Parameters:
event - the information associated with the drag enter event
See Also:
DropTargetEvent

dragLeave

public void dragLeave(DropTargetEvent event)

The cursor has left the drop target boundaries OR the drop has been cancelled OR the data is about to be dropped.

The following fields in the DropTargetEvent apply:

Specified by:
dragLeave in interface DropTargetListener
Parameters:
event - the information associated with the drag leave event
See Also:
DropTargetEvent

dragOperationChanged

public void dragOperationChanged(DropTargetEvent event)

The operation being performed has changed (usually due to the user changing the selected modifier key(s) while dragging).

The following fields in the DropTargetEvent apply:

The operation value is determined by the modifier keys pressed by the user. If no keys are pressed the event.detail field is set to DND.DROP_DEFAULT. If the application does not set the event.detail to something other than DND.DROP_DEFAULT the operation will be set to the platform defined standard default.

The currentDataType value is determined by the value assigned to currentDataType in previous dragEnter and dragOver calls.

The application can change the operation that will be performed by modifying the detail field but the choice must be one of the values in the operations field.

The application can also change the type of data being requested by modifying the currentDataTypes field but the value must be one of the values in the dataTypes list.

Specified by:
dragOperationChanged in interface DropTargetListener
Parameters:
event - the information associated with the drag operation changed event
See Also:
DropTargetEvent

dragOver

public void dragOver(DropTargetEvent event)

The cursor is moving over the drop target.

The following fields in the DropTargetEvent apply:

The operation value is determined by the value assigned to currentDataType in previous dragEnter and dragOver calls.

The currentDataType value is determined by the value assigned to currentDataType in previous dragEnter and dragOver calls.

The application can change the operation that will be performed by modifying the detail field but the choice must be one of the values in the operations field.

The application can also change the type of data being requested by modifying the currentDataTypes field but the value must be one of the values in the dataTypes list.

NOTE: At this point the data field is null. On some platforms, it is possible to obtain the data being transferred before the transfer occurs but in most platforms this is not possible. On those platforms where the data is available, the application can access the data as follows:


 
 public void dragOver(DropTargetEvent event) {
     TextTransfer textTransfer = TextTransfer.getInstance();
     String data = (String) textTransfer.nativeToJava(event.currentDataType);
     if (data != null) {
         System.out.println("Data to be dropped is (Text)" + data);
     }
 };
 

Specified by:
dragOver in interface DropTargetListener
Parameters:
event - the information associated with the drag over event
See Also:
DropTargetEvent

drop

public void drop(DropTargetEvent event)

The data is being dropped. The data field contains java format of the data being dropped. To determine the type of the data object, refer to the documentation for the Transfer subclass specified in event.currentDataType.

The following fields in DropTargetEvent apply:

The application can refuse to perform the drop operation by setting the detail field to DND.DROP_NONE.

Specified by:
drop in interface DropTargetListener
Parameters:
event - the information associated with the drop event
See Also:
DropTargetEvent

dropAccept

public void dropAccept(DropTargetEvent event)

The drop is about to be performed. The drop target is given a last chance to change the nature of the drop.

The following fields in the DropTargetEvent apply:

The application can veto the drop by setting the event.detail field to DND.DROP_NONE.

The application can change the operation that will be performed by modifying the detail field but the choice must be one of the values in the operations field.

The application can also change the type of data being requested by modifying the currentDataTypes field but the value must be one of the values in the < code>dataTypes list.

Specified by:
dropAccept in interface DropTargetListener
Parameters:
event - the information associated with the drop accept event
See Also:
DropTargetEvent

isValidTarget

public boolean isValidTarget(Item targetItem)

Verifies if the specified Item is accepted as valid target for a DnD operation.

Parameters:
targetItem - the Item to validate
Returns:
true if the specified Itemis accepted as target; false if rejected