bibliothek.gui.dock.control
Class DefaultDockRelocator

java.lang.Object
  extended by bibliothek.gui.dock.control.DockRelocator
      extended by bibliothek.gui.dock.control.DefaultDockRelocator

@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 DockRelocator

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.
 RemoteRelocator createRemote(Dockable dockable)
          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)
          Handles a mouse-pressed event.
protected  void dragMouseDragged(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)
          Handles a mouse-pressed event.
protected  void dragMousePressed(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(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  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.DockRelocator
addDockRelocatorListener, addMode, checkModes, disableAllModes, fireCancel, fireDrag, fireDrop, fireInit, getController, getDragDistance, getMerger, isDragOnlyTitel, listListeners, removeDockRelocatorListener, removeMode, setDragDistance, setDragOnlyTitel, setMerger
 
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 class: DockRelocator
Tells whether the user has currently grabbed a dockable and moves the dockable around.

Specified by:
isOnMove in class DockRelocator
Returns:
true if a Dockable is currently dragged

isOnPut

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

Specified by:
isOnPut in class DockRelocator
Returns:
true if a Dockable is moved

createDirectRemote

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

Specified by:
createDirectRemote in class DockRelocator
Parameters:
dockable - the dockable which might be moved
Returns:
the new remote

createRemote

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

Specified by:
createRemote in class DockRelocator
Parameters:
dockable - the dockable which might be moved
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 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

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(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)
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
Returns:
how this relocator reacts on the event

dragMouseDragged

protected void dragMouseDragged(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)
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.
Returns:
how this relocator reacts on the event

dragMouseReleased

protected void dragMouseReleased(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