com.dlsc.flexgantt.swing.layer.system
Class DragLayer

java.lang.Object
  extended by com.dlsc.flexgantt.swing.layer.AbstractLayer
      extended by com.dlsc.flexgantt.swing.layer.system.AbstractSystemLayer
          extended by com.dlsc.flexgantt.swing.layer.system.DragLayer
All Implemented Interfaces:
java.awt.dnd.DragGestureListener, java.awt.dnd.DragSourceListener, java.awt.dnd.DropTargetListener, java.awt.event.MouseMotionListener, java.util.EventListener

public class DragLayer
extends AbstractSystemLayer
implements java.awt.dnd.DragGestureListener, java.awt.dnd.DragSourceListener, java.awt.dnd.DropTargetListener, java.awt.event.MouseMotionListener

The drag layer is responsible for handling drag and drop events that are used to move timeline objects.

Since:
1.0
Author:
Dirk Lemmermann

Field Summary
 
Fields inherited from class com.dlsc.flexgantt.swing.layer.AbstractLayer
alpha, changeSupport, ganttChart, layerContainer, PROPERTY_ALPHA, PROPERTY_VISIBLE
 
Constructor Summary
DragLayer(LayerContainer lc)
          Constructs a new drag layer.
 
Method Summary
 void addDragLayerListener(IDragLayerListener l)
          Adds a drag layer listener to the drag layer.
protected  java.awt.Image createDragImage(ObjectBounds bounds)
          Creates an image that will be shown in combination with the drag cursor during drag & drop operations.
protected  java.awt.Cursor createEditModeCursor(IEditModeController.EditMode mode)
          Factory method for the cursors of the various edit modes.
 void dragDropEnd(java.awt.dnd.DragSourceDropEvent dsde)
           
 void dragEnter(java.awt.dnd.DragSourceDragEvent dsde)
           
 void dragEnter(java.awt.dnd.DropTargetDragEvent dtde)
           
 void dragExit(java.awt.dnd.DragSourceEvent dse)
           
 void dragExit(java.awt.dnd.DropTargetEvent dte)
           
 void dragGestureRecognized(java.awt.dnd.DragGestureEvent dge)
           
 void dragOver(java.awt.dnd.DragSourceDragEvent dsde)
           
 void dragOver(java.awt.dnd.DropTargetDragEvent dtde)
           
 void drop(java.awt.dnd.DropTargetDropEvent dtde)
           
 void dropActionChanged(java.awt.dnd.DragSourceDragEvent dsde)
           
 void dropActionChanged(java.awt.dnd.DropTargetDragEvent dtde)
           
protected  void fireDragLayerEvent(DragLayerEvent evt)
          Sends the given event object to all drag layer listeners that are currently observing the drag layer.
 IDragInfoRenderer getDragInfoRenderer(java.lang.Class cl)
          Returns a drag info renderer for a given timeline object type.
 IDragRowRenderer getDragRowRenderer(java.lang.Class cl)
          Returns a drag row renderer for a given tree / hierarchy node.
 java.awt.dnd.DropTarget getDropTarget()
          Returns the drop target object associated with the drag layer / the layer container.
 IEditModeController.EditMode getEditMode()
          Returns the active edit mode.
 IEditModeController getEditModeController(java.lang.Class cl)
          Returns an edit mode controller for a given timeline object type.
 java.awt.event.MouseEvent getTriggerEvent()
          Returns the mouse event, which triggered the last drag gesture.
 boolean isDragging()
          Determines whether the user is currently dragging an object.
 boolean isDragInfoVisible()
          Determines whether the drag information is shown during a drag & drop operation.
 void mouseDragged(java.awt.event.MouseEvent e)
           
 void mouseMoved(java.awt.event.MouseEvent e)
           
protected  void paintDragRowRenderers(java.awt.Graphics g)
          Paints the drag row renderers during a drag operation.
protected  void paintLayer(java.awt.Graphics g)
           
 void removeDragLayerListener(IDragLayerListener l)
          Removes a drag layer listener from the drag layer.
 void setDragInfoRenderer(java.lang.Class objectType, IDragInfoRenderer renderer)
          Maps the implementation of a drag info renderer to a timeline object type.
 void setDragInfoVisible(boolean visible)
          Specifies whether the drag information is shown during a drag & drop operation.
 void setDragRowRenderer(java.lang.Class objectType, IDragRowRenderer renderer)
          Maps the implementation of a drag row renderer to a tree node type.
 void setEditModeController(java.lang.Class objectType, IEditModeController controller)
          Maps the implementation of an edit mode controller to a timeline object type.
 
Methods inherited from class com.dlsc.flexgantt.swing.layer.AbstractLayer
addPropertyChangeListener, getAlpha, getDateline, getEventline, getGanttChart, getLayerContainer, getLayerPolicyProvider, getModel, getName, getStartRow, getTimeAt, getTimeline, getTimeLocation, getTimeSpanUsed, getToolTipText, getTreeTable, getTreeTablePolicyProvider, isVisible, removePropertyChangeListener, repaint, repaint, repaint, setAlpha, setVisible, tearDown
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DragLayer

public DragLayer(LayerContainer lc)
Constructs a new drag layer.

Parameters:
lc - the layer container to which the drag layer belongs
Since:
1.0
Method Detail

isDragging

public boolean isDragging()
Determines whether the user is currently dragging an object.

Returns:
TRUE if an object is currently being dragged
Since:
1.0

paintLayer

protected void paintLayer(java.awt.Graphics g)
Overrides:
paintLayer in class AbstractLayer

paintDragRowRenderers

protected void paintDragRowRenderers(java.awt.Graphics g)
Paints the drag row renderers during a drag operation. The method will look up an appropriate IDragRowRenderer implementation for each row in the layer container. The renderer can then visualize information relevant for the drag operation (for example: "drop here not allowed" causes the row to be grayed out).

Parameters:
g - the graphics context into which to draw
Since:
1.0
See Also:
setDragRowRenderer(Class, IDragRowRenderer)

setDragInfoRenderer

public void setDragInfoRenderer(java.lang.Class objectType,
                                IDragInfoRenderer renderer)
Maps the implementation of a drag info renderer to a timeline object type.

Parameters:
objectType - the type of the timeline object for which the info will be rendered with the given renderer
renderer - a renderer implementation that will be used to renderer instances of the given timeline object type
Since:
1.0
See Also:
DefaultDragInfoRenderer

getDragInfoRenderer

public IDragInfoRenderer getDragInfoRenderer(java.lang.Class cl)
Returns a drag info renderer for a given timeline object type.

Parameters:
cl - the timeline object type in need of rendering
Returns:
a matching drag info renderer implementation
Since:
1.0
See Also:
setDragInfoRenderer(Class, IDragInfoRenderer), DefaultDragInfoRenderer

isDragInfoVisible

public boolean isDragInfoVisible()
Determines whether the drag information is shown during a drag & drop operation. The drag information is usually a small floating window that displays the time span that would be assigned to the currently dragged timeline object when the drop finishes.

Returns:
TRUE if the drag information is shown
Since:
1.0
See Also:
IDragInfoPolicy, IDragInfoRenderer, setDragInfoRenderer(Class, IDragInfoRenderer)

setDragInfoVisible

public void setDragInfoVisible(boolean visible)
Specifies whether the drag information is shown during a drag & drop operation. The drag information is usually a small floating window that displays the time span that would be assigned to the currently dragged timeline object when the drop finishes.

Parameters:
visible - if TRUE the drag info will be shown
Since:
1.0
See Also:
IDragInfoPolicy, IDragInfoRenderer, setDragInfoRenderer(Class, IDragInfoRenderer)

setDragRowRenderer

public void setDragRowRenderer(java.lang.Class objectType,
                               IDragRowRenderer renderer)
Maps the implementation of a drag row renderer to a tree node type.

Parameters:
objectType - the type of the tree node for which the row will be rendered with the given renderer
renderer - a renderer implementation that will be used to renderer the row with drag and drop information
Since:
1.0
See Also:
DefaultDragRowRenderer

getDragRowRenderer

public IDragRowRenderer getDragRowRenderer(java.lang.Class cl)
Returns a drag row renderer for a given tree / hierarchy node.

Parameters:
cl - the object type of the tree node
Returns:
a matching row renderer implementation
Since:
1.0
See Also:
setDragRowRenderer(Class, IDragRowRenderer), DefaultDragRowRenderer

mouseMoved

public void mouseMoved(java.awt.event.MouseEvent e)
Specified by:
mouseMoved in interface java.awt.event.MouseMotionListener

mouseDragged

public void mouseDragged(java.awt.event.MouseEvent e)
Specified by:
mouseDragged in interface java.awt.event.MouseMotionListener

dragGestureRecognized

public void dragGestureRecognized(java.awt.dnd.DragGestureEvent dge)
Specified by:
dragGestureRecognized in interface java.awt.dnd.DragGestureListener

createDragImage

protected java.awt.Image createDragImage(ObjectBounds bounds)
Creates an image that will be shown in combination with the drag cursor during drag & drop operations. A drag image is not supported on all operating systems (e.g. MacOS X supports it, Windows XP does not).

Parameters:
bounds - the object bounds for which to create an image
Returns:
a drag image
Since:
1.0

dragDropEnd

public void dragDropEnd(java.awt.dnd.DragSourceDropEvent dsde)
Specified by:
dragDropEnd in interface java.awt.dnd.DragSourceListener

dragEnter

public void dragEnter(java.awt.dnd.DragSourceDragEvent dsde)
Specified by:
dragEnter in interface java.awt.dnd.DragSourceListener

dragExit

public void dragExit(java.awt.dnd.DragSourceEvent dse)
Specified by:
dragExit in interface java.awt.dnd.DragSourceListener

dragOver

public void dragOver(java.awt.dnd.DragSourceDragEvent dsde)
Specified by:
dragOver in interface java.awt.dnd.DragSourceListener

dropActionChanged

public void dropActionChanged(java.awt.dnd.DragSourceDragEvent dsde)
Specified by:
dropActionChanged in interface java.awt.dnd.DragSourceListener

dragEnter

public void dragEnter(java.awt.dnd.DropTargetDragEvent dtde)
Specified by:
dragEnter in interface java.awt.dnd.DropTargetListener

dragExit

public void dragExit(java.awt.dnd.DropTargetEvent dte)
Specified by:
dragExit in interface java.awt.dnd.DropTargetListener

dragOver

public void dragOver(java.awt.dnd.DropTargetDragEvent dtde)
Specified by:
dragOver in interface java.awt.dnd.DropTargetListener

drop

public void drop(java.awt.dnd.DropTargetDropEvent dtde)
Specified by:
drop in interface java.awt.dnd.DropTargetListener

dropActionChanged

public void dropActionChanged(java.awt.dnd.DropTargetDragEvent dtde)
Specified by:
dropActionChanged in interface java.awt.dnd.DropTargetListener

addDragLayerListener

public void addDragLayerListener(IDragLayerListener l)
Adds a drag layer listener to the drag layer. The listener will be notified about drag and resize operations that take place in the layer.

Parameters:
l - the drag layer listener
Since:
1.0

removeDragLayerListener

public void removeDragLayerListener(IDragLayerListener l)
Removes a drag layer listener from the drag layer.

Parameters:
l - the drag layer listener
Since:
1.0

fireDragLayerEvent

protected void fireDragLayerEvent(DragLayerEvent evt)
Sends the given event object to all drag layer listeners that are currently observing the drag layer.

Parameters:
evt - the drag layer event that will be sent to all listeners
Since:
1.0

setEditModeController

public void setEditModeController(java.lang.Class objectType,
                                  IEditModeController controller)
Maps the implementation of an edit mode controller to a timeline object type.

Parameters:
objectType - the type of the timeline object for which the edit mode will be calculated by the given controller
controller - an edit mode controller implementation that will make the actual decision on the edit mode that will be used when the mouse cursor hovers over a timeline object of the given type
Since:
1.0
See Also:
DefaultEditModeController

getEditModeController

public IEditModeController getEditModeController(java.lang.Class cl)
Returns an edit mode controller for a given timeline object type.

Parameters:
cl - the timeline object type in need of rendering
Returns:
a matching drag info renderer implementation
Since:
1.0
See Also:
setDragInfoRenderer(Class, IDragInfoRenderer), DefaultDragInfoRenderer

createEditModeCursor

protected java.awt.Cursor createEditModeCursor(IEditModeController.EditMode mode)
Factory method for the cursors of the various edit modes. The method looks up the cursors from the IconRegistry via the following identifiers: The hotspot for the cursors is always (16, 16) except for the percentage complete cursor (31, 15).

Parameters:
mode - the edit mode for which to create a cursor
Returns:
a cursor for the given edit mode
Since:
1.0

getEditMode

public IEditModeController.EditMode getEditMode()
Returns the active edit mode.

Returns:
the active edit mode
Since:
1.0

getDropTarget

public java.awt.dnd.DropTarget getDropTarget()
Returns the drop target object associated with the drag layer / the layer container. This drop target supports multiple drop target listeners.

Returns:
the drop target
Since:
1.0
See Also:
MultiDropTarget

getTriggerEvent

public java.awt.event.MouseEvent getTriggerEvent()
Returns the mouse event, which triggered the last drag gesture.

Returns:
the drag gesture trigger event
Since:
1.0
See Also:
DragGestureEvent.getTriggerEvent()