bibliothek.gui.dock.control.relocator
Class DefaultDockRelocator

java.lang.Object
  extended by bibliothek.gui.dock.control.relocator.AbstractDockRelocator
      extended by bibliothek.gui.dock.control.relocator.DefaultDockRelocator
All Implemented Interfaces:
DockRelocator

@Todo(compatibility=COMPATIBLE,
      priority=ENHANCEMENT,
      target=VERSION_1_1_0,
      description="Moving a dockable over itself should cancel the drag operation. This setting should be configurable.")
public class DefaultDockRelocator
extends AbstractDockRelocator

Default implementation of a handler that performs the drag & drop operations for a DockController.

Author:
Benjamin Sigg

Constructor Summary
DefaultDockRelocator(DockController controller, ControllerSetupCollection setup)
          Creates a new manager.
 
Method Summary
protected  boolean canMerge(DockStation parent, Dockable selection)
          Checks whether the current Merger can merge parent with child.
protected  int compare(DockStation a, DockStation b)
          Tries to decide which station is over the other stations.
 DirectRemoteRelocator createDirectRemote(Dockable dockable)
          Creates a device with which drag&drop operations concerning dockable can be initiated and executed.
 DirectRemoteRelocator createDirectRemote(Dockable dockable, boolean forceDrag)
          Creates a device with which drag&drop operations concerning dockable can be initiated and executed.
 RemoteRelocator createRemote(Dockable dockable)
          Creates a device with which drag&drop operations concerning dockable can be initiated and executed.
 RemoteRelocator createRemote(Dockable dockable, boolean forceDrag)
          Creates a device with which drag&drop operations concerning dockable can be initiated and executed.
protected  RemoteRelocator.Reaction dragMouseDragged(int x, int y, int modifiers, DockTitle title, Dockable dockable, boolean always, boolean forceDrag)
          Handles a mouse-pressed event.
protected  void dragMouseDragged(java.awt.event.MouseEvent e, DockTitle title, Dockable dockable)
          Invoked while the user drags a title or Dockable.
protected  RemoteRelocator.Reaction dragMousePressed(int x, int y, int dx, int dy, int modifiers, Dockable dockable, boolean forceDrag)
          Handles a mouse-pressed event.
protected  void dragMousePressed(java.awt.event.MouseEvent e, DockTitle title, Dockable dockable)
          Invoked by the listeners of a title to start a drag and drop operation.
protected  RemoteRelocator.Reaction dragMouseReleased(int x, int y, int modifiers, Dockable dockable)
          Handles a mouse-released event.
protected  void dragMouseReleased(java.awt.event.MouseEvent e, DockTitle title, Dockable dockable)
          Invoked while the user drags a title or Dockable and releases a mouse button.
protected  void executeOperation(Dockable dockable, RelocateOperation operation)
          Executes the drag and drop event operation.
 boolean isOnMove()
          Tells whether the user has currently grabbed a dockable and moves the dockable around.
 boolean isOnPut()
          Tells whether this relocator currently puts a Dockable.
protected  boolean isStationValid(DockStation station)
          Only stations passing this test are considered during drag and drop operation as new parent.
protected  java.util.List<DockStation> listStationsOrdered(int x, int y, Dockable moved)
          Makes a list of all stations which are visible and contain the point x/y.
protected  RelocateOperation preparePut(int mouseX, int mouseY, int titleX, int titleY, Dockable dockable)
          Searches a station which can become the parent of dockable if the mouse is released at mouseX/mouseY.
 
Methods inherited from class bibliothek.gui.dock.control.relocator.AbstractDockRelocator
addDockRelocatorListener, addMode, addVetoableDockRelocatorListener, checkModes, disableAllModes, fireCancel, fireCanceled, fireDrag, fireDragged, fireDrop, fireDropped, fireDropping, fireGrabbed, fireGrabbing, fireInit, getController, getDragDistance, getMerger, isDragOnlyTitel, listListeners, removeDockRelocatorListener, removeMode, removeVetoableDockRelocatorListener, setDragDistance, setDragOnlyTitel, setMerger, vetoableListeners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultDockRelocator

public DefaultDockRelocator(DockController controller,
                            ControllerSetupCollection setup)
Creates a new manager.

Parameters:
controller - the controller whose dockables are moved
setup - observable informing this object when controller is set up.
Method Detail

isOnMove

public boolean isOnMove()
Description copied from interface: DockRelocator
Tells whether the user has currently grabbed a dockable and moves the dockable around.

Returns:
true if a Dockable is currently dragged

isOnPut

public boolean isOnPut()
Description copied from interface: DockRelocator
Tells whether this relocator currently puts a Dockable. A Dockable is put as soon as the user releases the mouse.

Returns:
true if a Dockable is moved

createDirectRemote

public DirectRemoteRelocator createDirectRemote(Dockable dockable)
Description copied from interface: DockRelocator
Creates a device with which drag&drop operations concerning dockable can be initiated and executed.

Parameters:
dockable - the dockable which might be moved
Returns:
the new remote

createDirectRemote

public DirectRemoteRelocator createDirectRemote(Dockable dockable,
                                                boolean forceDrag)
Description copied from interface: DockRelocator
Creates a device with which drag&drop operations concerning dockable can be initiated and executed.

Parameters:
dockable - the dockable which might be moved
forceDrag - if this flag is set to true, then dragging will always start even if one of the usual conditions is not met. I.e. dragging will start even if dockable does not have a parent of even if the parent does not allow dragging. This flag should be used with caution.
Returns:
the new remote

createRemote

public RemoteRelocator createRemote(Dockable dockable)
Description copied from interface: DockRelocator
Creates a device with which drag&drop operations concerning dockable can be initiated and executed.

Parameters:
dockable - the dockable which might be moved
Returns:
the new remote

createRemote

public RemoteRelocator createRemote(Dockable dockable,
                                    boolean forceDrag)
Description copied from interface: DockRelocator
Creates a device with which drag&drop operations concerning dockable can be initiated and executed.

Parameters:
dockable - the dockable which might be moved
forceDrag - if this flag is set to true, then dragging will always start even if one of the usual conditions is not met. I.e. dragging will start even if dockable does not have a parent of even if the parent does not allow dragging. This flag should be used with caution.
Returns:
the new remote

executeOperation

protected void executeOperation(Dockable dockable,
                                RelocateOperation operation)
Executes the drag and drop event operation.

Parameters:
dockable - a Dockable which is moved
operation - the operation to execute

preparePut

protected RelocateOperation preparePut(int mouseX,
                                       int mouseY,
                                       int titleX,
                                       int titleY,
                                       Dockable dockable)
Searches a station which can become the parent of dockable if the mouse is released at mouseX/mouseY.

Parameters:
mouseX - x-coordinate of the mouse on the screen
mouseY - y-coordinate of the mouse on the screen
titleX - x-coordinate of the dragged title or mouseX
titleY - y-coordinate of the dragged title or mouseY
dockable - a Dockable which is dragged
Returns:
the new parent of dockable or null

canMerge

protected boolean canMerge(DockStation parent,
                           Dockable selection)
Checks whether the current Merger can merge parent with child.

Parameters:
parent - the new parent for the children of child
selection - the element whose children are to be removed
Returns:
true if a merge is possible

listStationsOrdered

protected java.util.List<DockStation> listStationsOrdered(int x,
                                                          int y,
                                                          Dockable moved)
Makes a list of all stations which are visible and contain the point x/y. The stations are ordered by their visibility.

Parameters:
x - x-coordinate on the screen
y - y-coordinate on the screen
moved - a Dockable which is dragged. If this is a station, then no child of the station will be in the resulting list.
Returns:
a list of stations

isStationValid

@ClientOnly
protected boolean isStationValid(DockStation station)
Only stations passing this test are considered during drag and drop operation as new parent. Subclasses may override this method.

Parameters:
station - the station to check
Returns:
true if station should be considered as new parent

compare

protected int compare(DockStation a,
                      DockStation b)
Tries to decide which station is over the other stations.

Parameters:
a - the first station
b - the second station
Returns:
a number less/equal/greater than zero if a is less/equal/more visible than b.

dragMousePressed

protected void dragMousePressed(java.awt.event.MouseEvent e,
                                DockTitle title,
                                Dockable dockable)
Invoked by the listeners of a title to start a drag and drop operation.

Parameters:
e - the initializing event
title - the grabbed title, can be null if dockable is not null
dockable - the grabbed Dockable, can be null if title is not null

dragMousePressed

protected RemoteRelocator.Reaction dragMousePressed(int x,
                                                    int y,
                                                    int dx,
                                                    int dy,
                                                    int modifiers,
                                                    Dockable dockable,
                                                    boolean forceDrag)
Handles a mouse-pressed event.

Parameters:
x - the x-coordinate of the mouse
y - the y-coordinate of the mouse
dx - the x-coordinate of the mouse on its component
dy - the y-coordinate of the mouse on its component
modifiers - the state of the mouse, see InputEvent.getModifiersEx()
dockable - the dockable which is moved around
forceDrag - if this flag is set to true, then dragging will always start even if one of the usual conditions is not met. I.e. dragging will start even if dockable does not have a parent of even if the parent does not allow dragging. This flag should be used with caution.
Returns:
how this relocator reacts on the event

dragMouseDragged

protected void dragMouseDragged(java.awt.event.MouseEvent e,
                                DockTitle title,
                                Dockable dockable)
Invoked while the user drags a title or Dockable.

Parameters:
e - the initializing event
title - the grabbed title, can be null if dockable is not null
dockable - the grabbed Dockable, can be null if title is not null

dragMouseDragged

protected RemoteRelocator.Reaction dragMouseDragged(int x,
                                                    int y,
                                                    int modifiers,
                                                    DockTitle title,
                                                    Dockable dockable,
                                                    boolean always,
                                                    boolean forceDrag)
Handles a mouse-pressed event.

Parameters:
x - the x-coordinate of the mouse
y - the y-coordinate of the mouse
modifiers - the state of the mouse, see InputEvent.getModifiersEx()
title - the title which might be grabbed by the mouse
dockable - the dockable which is moved around
always - true if the drag event should be executed and restrictions to this relocator ignored.
forceDrag - if this flag is set to true, then dragging will always start even if one of the usual conditions is not met. I.e. dragging will start even if dockable does not have a parent of even if the parent does not allow dragging. This flag should be used with caution.
Returns:
how this relocator reacts on the event

dragMouseReleased

protected void dragMouseReleased(java.awt.event.MouseEvent e,
                                 DockTitle title,
                                 Dockable dockable)
Invoked while the user drags a title or Dockable and releases a mouse button.

Parameters:
e - the initializing event
title - the grabbed title, can be null if dockable is not null
dockable - the grabbed Dockable, can be null if title is not null

dragMouseReleased

protected RemoteRelocator.Reaction dragMouseReleased(int x,
                                                     int y,
                                                     int modifiers,
                                                     Dockable dockable)
Handles a mouse-released event.

Parameters:
x - the x-coordinate of the mouse
y - the y-coordinate of the mouse
modifiers - the state of the mouse, see InputEvent.getModifiersEx()
dockable - the dockable which is moved around
Returns:
how this relocator reacts on the event