bibliothek.gui.dock.control
Class DefaultDockRelocator

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

public class DefaultDockRelocator
extends DockRelocator

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

Author:
Benjamin Sigg

Nested Class Summary
private  class DefaultDockRelocator.DefaultRemoteRelocator
          An implementation connecting a RemoteRelocator to the enclosing DefaultDockRelocator.
private  class DefaultDockRelocator.MouseDockableListener
          A listener to the set of known Dockables.
private  class DefaultDockRelocator.TitleListener
          Observers this controller and registers listeners to all new titles.
private  class DefaultDockRelocator.TitleWindow
          A window which shows a single DockTitle.
 
Field Summary
private  DockStation dragStation
          the current destination of a dragged dockable
private  DefaultDockRelocator.TitleWindow movingTitleWindow
          a window painting a title onto the screen
private  boolean onMove
          true as long as the user drags a title or a Dockable
private  boolean onPut
          true while a drag and drop-operation is performed
private  java.awt.Point pressPointLocal
          the point where the mouse was pressed on the currently dragged title
private  java.awt.Point pressPointScreen
          the point where the mouse was pressed on the currently dragged title
 
Constructor Summary
DefaultDockRelocator(DockController controller)
          Creates a new manager.
 
Method Summary
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(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)
          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 executePut(Dockable dockable, DockStation station)
          Executes a drag and drop event.
private  DefaultDockRelocator.TitleWindow getTitleWindow(Dockable dockable, DockTitle title)
          Gets a window which shows a title of dockable.
 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.
private  boolean isParent(java.awt.Window parent, java.awt.Window child)
          Tells whether parent is really a parent of child or not.
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  DockStation 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.
private  void titleDragCancel()
          Cancels a drag and drop operation.
private  void updateTitleWindowPosition(java.awt.Point mouse)
          Updates the location of the movingTitleWindow according to the current location of the mouse.
 
Methods inherited from class bibliothek.gui.dock.control.DockRelocator
addDockRelocatorListener, fireDockableDrag, fireDockablePut, getController, getDragDistance, isDragOnlyTitel, listListeners, removeDockRelocatorListener, setDragDistance, setDragOnlyTitel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

onMove

private boolean onMove
true as long as the user drags a title or a Dockable


onPut

private boolean onPut
true while a drag and drop-operation is performed


dragStation

private DockStation dragStation
the current destination of a dragged dockable


movingTitleWindow

private DefaultDockRelocator.TitleWindow movingTitleWindow
a window painting a title onto the screen


pressPointScreen

private java.awt.Point pressPointScreen
the point where the mouse was pressed on the currently dragged title


pressPointLocal

private java.awt.Point pressPointLocal
the point where the mouse was pressed on the currently dragged title

Constructor Detail

DefaultDockRelocator

public DefaultDockRelocator(DockController controller)
Creates a new manager.

Parameters:
controller - the controller whose dockables are moved
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

executePut

protected void executePut(Dockable dockable,
                          DockStation station)
Executes a drag and drop event. dockable is removed from its parent (if the parent is not station) and dropped to station. The new location of dockable has to be precomputed by station.

Parameters:
dockable - a Dockable which is moved
station - the new parent of dockable

preparePut

protected DockStation 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

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

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.

isParent

private boolean isParent(java.awt.Window parent,
                         java.awt.Window child)
Tells whether parent is really a parent of child or not.

Parameters:
parent - a window which may be an ancestor of child
child - a window which may be child of parent
Returns:
true if parent is an ancestor of child

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)
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(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)
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

updateTitleWindowPosition

private void updateTitleWindowPosition(java.awt.Point mouse)
Updates the location of the movingTitleWindow according to the current location of the mouse.

Parameters:
mouse - the location of the mouse

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

titleDragCancel

private void titleDragCancel()
Cancels a drag and drop operation.


getTitleWindow

private DefaultDockRelocator.TitleWindow getTitleWindow(Dockable dockable,
                                                        DockTitle title)
Gets a window which shows a title of dockable. The title on the window will be binded to dockable.

Parameters:
dockable - the Dockable for which a title should be shown
title - a title which is grabbed by the mouse, can be null
Returns:
a window or null