bibliothek.gui.dock
Class StackDockStation

java.lang.Object
  extended by bibliothek.gui.dock.dockable.AbstractDockable
      extended by bibliothek.gui.dock.station.AbstractDockableStation
          extended by bibliothek.gui.dock.StackDockStation
All Implemented Interfaces:
DockElement, DockElementRepresentative, StackDockComponentParent, PlaceholderListItem<Dockable>, Dockable, DockStation

public class StackDockStation
extends AbstractDockableStation
implements StackDockComponentParent

On this station, only one of many children is visible. The other children are hidden behind the visible child. There are some buttons where the user can choose which child is visible. This station behaves like a JTabbedPane.
This station tries to register a DockTitleFactory to its DockController with the key TITLE_ID.

Author:
Benjamin Sigg

Nested Class Summary
protected  class StackDockStation.Background
          This panel is used as base of the station.
static class StackDockStation.Insert
          Describes the gap between two tabs.
protected  class StackDockStation.StackDropOperation
          Custom implementation of StationDropOperation.
 
Field Summary
static PropertyKey<StackDockComponentFactory> COMPONENT_FACTORY
          Key used to read the current StackDockComponentFactory
static String DISPLAYER_ID
          This id is forwarded to Extensions which load additional DisplayerFactorys
static PropertyKey<Boolean> IMMUTABLE_SELECTION_INDEX
          If set to true, then dropping a Dockable onto a StackDockStation won't change the currently selected item.
This property does not prevent the FocusController from changing the focus, and updating the focus may lead to changing the selected index anyway.
static PropertyKey<TabConfigurations> TAB_CONFIGURATIONS
          Allows fine tuning of the look and behavior of tabs.
static PropertyKey<TabContentFilter> TAB_CONTENT_FILTER
          Key for setting the TabContentFilter
static PropertyKey<TabPlacement> TAB_PLACEMENT
          Key for setting the side at which the tabs appear in relation to the selected dockable
static String TITLE_ID
          The id of the titlefactory which is used by this station
 
Fields inherited from class bibliothek.gui.dock.station.AbstractDockableStation
listeners
 
Constructor Summary
  StackDockStation()
          Constructs a new StackDockStation
  StackDockStation(DockTheme theme)
          Constructs a new station and sets the theme.
protected StackDockStation(DockTheme theme, boolean init)
          Creates a new station.
 
Method Summary
 void add(Dockable dockable, int index)
          Adds a child to this station at the location index.
protected  void add(Dockable dockable, int index, Path placeholder)
          Adds a child to this station at the location index.
 void addMouseInputListener(MouseInputListener listener)
          Adds a listener to this representative, it is not defined what to do with that listener, but most subclasses would just add the listener to their component.
protected  void addToPanel(StationChildHandle handle, int index, int size)
          Adds the contents of handle to the stackComponent of this station.
protected  void callDockUiUpdateTheme()
          Calls the method DockUI.DockUI.updateTheme(DockStation, DockFactory) with this as the first argument, and an appropriate factory as the second argument.
 boolean canDrag(Dockable dockable)
          Tells whether dockable can be removed from this station or not.
 boolean canReplace(Dockable old, Dockable next)
          Tells whether its possible to replace the child old with next where next is not a child of this station.
 void configureDisplayerHints(DockableDisplayerHints hints)
          Orders this Dockable to configure hints which will be used by the parent component of this element.
protected  StackDockStation.Background createBackground()
          Creates the panel onto which this station will lay its children.
protected  StackDockComponent createStackDockComponent()
          Creates the StackDockComponent which will be shown on this station if the station has more then one child.
This method is called directly by the constructor.
protected  void discard(DockableDisplayer displayer)
          Replaces displayer with a new instance.
 void drag(Dockable dockable)
          Removes a child from this station.
 void drop(Dockable dockable)
          Adds dockable to this station.
 void drop(Dockable dockable, boolean autoPlaceholder)
          Adds dockable to this station.
 boolean drop(Dockable dockable, DockableProperty property)
          Tries to add dockable to this station such that the location given by property is matched.
 boolean drop(Dockable dockable, StackDockProperty property)
          Adds a new child to this station, and tries to match the property as good as possible.
protected  StackDockStation.Insert exactTabIndexAt(int x, int y)
          Gets the gap which is selected when the mouse is at x/y.
protected  void fireDockableSelected()
          Informs all DockStationListeners that the selected element of this station changed.
 Component getComponent()
          Gets the Component which represents the element.
 DefaultDisplayerFactoryValue getDisplayerFactory()
          Gets a DisplayerFactory which is used to create new DockableDisplayer for this station.
 DisplayerCollection getDisplayers()
          Gets the set of displayers used on this station.
 Dockable getDockable(int index)
          Gets the index'th child of this station.
 int getDockableCount()
          Gets the number of children.
 DockableProperty getDockableProperty(Dockable dockable, Dockable target)
          Gets precise information about the location of a child of this station.
 String getFactoryID()
          Gets the unique name of the DockFactory which can read and write elements of this type.
 Dockable getFrontDockable()
          Gets the favorite child of this station.
 StackDockStation.Insert getInsert()
          Gets the location where StationDropOperation.execute() will insert the next Dockable.
 DockStationDropLayer[] getLayers()
          Gets a description of all the areas of the screen where this DockStation can handle a drop event.
Everytime the mouse is moved or released during a drag & drop operation, this method is called for all DockStations.
 DefaultStationPaintValue getPaint()
          Gets a StationPaint which is used to paint some lines onto this station.
 PlaceholderMap getPlaceholders()
          Gets a snapshot of all placeholders that are currently stored in this DockStation.
 PlaceholderMap getPlaceholders(Map<Dockable,Integer> children)
          Gets the placeholders of this station using a PlaceholderListItemConverter to encode the children of this station.
 PlaceholderStrategy getPlaceholderStrategy()
          Gets the PlaceholderStrategy that is currently in use.
 StackDockComponent getStackComponent()
          Gets the currently used StackDockComponent
 StackDockComponentFactory getStackComponentFactory()
          Gets the factory which is used to create a StackDockComponent.
 DockStation getStackDockParent()
          Gets the station this parent represents.
 TabContentFilter getTabContentFilter()
          Gets the filter that tells this station how to set the content of the tabs.
 TabPlacement getTabPlacement()
          Gets the location where tabs are currently placed.
 int indexOf(Dockable dockable)
          Gets the index of a child.
protected  void init()
          Initializes the fields of this object, has to be called exactly once.
protected  void insertionLine(Rectangle left, Rectangle right, Point a, Point b, boolean leftImportant)
          When dropping or moving a Dockable, a line has to be painted between two tabs.
 boolean isOverTabs(int x, int y)
          Tells whether the point x/y on the screen is exactly over a tab.
 boolean isOverTitle(int x, int y)
          Tells whether the point x/y on the screen is exactly over the only DockTitle currently shown by this station.
 boolean isSmallMinimumSize()
          Tells whether the result of Component.getMinimumSize() should be small.
 boolean isStationVisible()
          Tells whether this station is visible or not.
 boolean isVisible(Dockable dockable)
          Tells whether the child dockable is visible or not.
 void move(Dockable dockable, DockableProperty property)
          Tries to move the child dockable in such a way, that DockStation.getDockableProperty(Dockable, Dockable) would return a DockableProperty that equals property.
There is no need to give a guarantee that the move successes, and clients should always be prepared for the possibility that this DockStation does nothing at all.
 StationDragOperation prepareDrag(Dockable dockable)
          Informs this station that a drag and drop operation is in progress and that dockable might be removed from this station.
 StationDropOperation prepareDrop(StationDropItem item)
          Prepares this station to get the new child dockable or to move around the known child dockable.
 StationDropOperation prepareMove(StationDropItem item)
           
 void remove(int index)
          Removes the child of location index.
Note: clients may need to invoke DockController.freezeLayout() and DockController.meltLayout() to ensure noone else adds or removes Dockables.
 void removeMouseInputListener(MouseInputListener listener)
          Removes a listener from this representative.
 void replace(Dockable old, Dockable next)
          Replaces the child old by next which is not yet a child of this station.
 void replace(Dockable old, Dockable next, boolean station)
           
 void replace(DockStation old, Dockable next)
          Replaces the child old by next which is not yet a child of this station.
 void setController(DockController controller)
          Sets the controller in whose realm this Dockable is.
 void setDockParent(DockStation station)
          Sets the parent property.
 void setFrontDockable(Dockable dockable)
          Sets the most important child.
 void setPlaceholders(PlaceholderMap placeholders)
          Sets an earlier snapshot of the placeholders of this station.
 void setPlaceholders(PlaceholderMap placeholders, Map<Integer,Dockable> children)
          Sets all placeholders and children of this station.
 void setPlaceholderStrategy(PlaceholderStrategy strategy)
          Sets the PlaceholderStrategy to use, null will set the default strategy.
 void setSmallMinimumSize(boolean smallMinimumSize)
          Sets whether the result of Component.getMinimumSize() should be small.
 void setStackComponent(StackDockComponent stackComponent)
          Sets the StackDockComponent which should be used by this station.
 void setStackComponentFactory(StackDockComponentFactory factory)
          Sets the factory which will be used to create a StackDockComponent for this station.
 void setTabContentFilter(TabContentFilter filter)
          Sets the filter that tells this station how to set the content of the tabs.
 void setTabPlacement(TabPlacement placement)
          Tells this station where to put the tabs.
protected  boolean singleTabStackDockComponent()
          Tells whether this station should show its StackDockComponent even if it has only one child.
protected  StackDockStation.Insert tabIndexAt(int x, int y)
          Tells which gap (between tabs) is chosen if the mouse has the coordinates x/y.
protected  void updateConfigurableDisplayerHints()
          Updates the displayer hints of this station.
 
Methods inherited from class bibliothek.gui.dock.station.AbstractDockableStation
accept, acceptable, acceptable, addDockStationListener, asDockStation, changed, createTitleIcon, fireDockablesRepositioned, fireDockablesRepositioned, getDirectActionOffers, getIndirectActionOffers, getTheme, isChildShowing, isStationShowing, removeDockStationListener, requestChildDisplayer, requestChildDockTitle, updateTheme
 
Methods inherited from class bibliothek.gui.dock.dockable.AbstractDockable
accept, accept, addDockableListener, addDockableStateListener, addDockHierarchyListener, addKeyListener, asDockable, bind, fireTitleBound, fireTitleExchanged, fireTitleExchanged, fireTitleIconChanged, fireTitleTextChanged, fireTitleTooltipChanged, fireTitleUnbound, getConfigurableDisplayerHints, getController, getDockableStateListeners, getDockElementObserver, getDockParent, getElement, getGlobalActionOffers, getLocalActionOffers, getPopupLocation, getTitleIcon, getTitleIconHandling, getTitleText, getTitleToolTip, isDockableShowing, isDockableVisible, isUsedAsTitle, listBoundTitles, removeDockableListener, removeDockableStateListener, removeDockHierarchyListener, removeKeyListener, requestDisplayer, requestDockTitle, resetTitleIcon, setActionOffers, setTitleIcon, setTitleIconHandling, setTitleText, setTitleToolTip, shouldFocus, shouldTransfersFocus, unbind
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface bibliothek.gui.DockStation
getController
 
Methods inherited from interface bibliothek.gui.dock.DockElement
asDockable
 

Field Detail

TITLE_ID

public static final String TITLE_ID
The id of the titlefactory which is used by this station

See Also:
Constant Field Values

DISPLAYER_ID

public static final String DISPLAYER_ID
This id is forwarded to Extensions which load additional DisplayerFactorys

See Also:
Constant Field Values

COMPONENT_FACTORY

public static final PropertyKey<StackDockComponentFactory> COMPONENT_FACTORY
Key used to read the current StackDockComponentFactory


TAB_PLACEMENT

public static final PropertyKey<TabPlacement> TAB_PLACEMENT
Key for setting the side at which the tabs appear in relation to the selected dockable


TAB_CONTENT_FILTER

public static final PropertyKey<TabContentFilter> TAB_CONTENT_FILTER
Key for setting the TabContentFilter


IMMUTABLE_SELECTION_INDEX

public static final PropertyKey<Boolean> IMMUTABLE_SELECTION_INDEX
If set to true, then dropping a Dockable onto a StackDockStation won't change the currently selected item.
This property does not prevent the FocusController from changing the focus, and updating the focus may lead to changing the selected index anyway. Clients using this property might also need to implement a FocusVetoListener and add it to the FocusController.


TAB_CONFIGURATIONS

public static final PropertyKey<TabConfigurations> TAB_CONFIGURATIONS
Allows fine tuning of the look and behavior of tabs. The default settings however should suffice for most clients.

Constructor Detail

StackDockStation

public StackDockStation()
Constructs a new StackDockStation


StackDockStation

public StackDockStation(DockTheme theme)
Constructs a new station and sets the theme.

Parameters:
theme - the theme of the station, may be null

StackDockStation

protected StackDockStation(DockTheme theme,
                           boolean init)
Creates a new station.

Parameters:
theme - the theme of this station, can be null
init - true if the fields of this object should be initialized, false otherwise. If false, then the subclass has to call init() exactly once.
Method Detail

init

protected void init()
Initializes the fields of this object, has to be called exactly once.


createBackground

protected StackDockStation.Background createBackground()
Creates the panel onto which this station will lay its children.

Returns:
the new background

createStackDockComponent

protected StackDockComponent createStackDockComponent()
Creates the StackDockComponent which will be shown on this station if the station has more then one child.
This method is called directly by the constructor.

Returns:
the new component

getStackDockParent

public DockStation getStackDockParent()
Description copied from interface: StackDockComponentParent
Gets the station this parent represents.

Specified by:
getStackDockParent in interface StackDockComponentParent
Returns:
the station

setTabPlacement

public void setTabPlacement(TabPlacement placement)
Tells this station where to put the tabs.

Parameters:
placement - the side or null to use the default value

getTabPlacement

public TabPlacement getTabPlacement()
Gets the location where tabs are currently placed.

Returns:
the side at which tabs are

setTabContentFilter

public void setTabContentFilter(TabContentFilter filter)
Sets the filter that tells this station how to set the content of the tabs.

Parameters:
filter - the filter, can be null

getTabContentFilter

public TabContentFilter getTabContentFilter()
Gets the filter that tells this station how to set the content of the tabs.

Returns:
the filter, may be null

singleTabStackDockComponent

protected boolean singleTabStackDockComponent()
Tells whether this station should show its StackDockComponent even if it has only one child. This property may only be changed if the StackDockComponent is exchanged as well.

Returns:
true if the StackDockComponent is to be always shown

setStackComponent

public void setStackComponent(StackDockComponent stackComponent)
Sets the StackDockComponent which should be used by this station. The component is shown when this station has more then one child. Note that the stackComponent depends also on the property COMPONENT_FACTORY, and will be automatically exchanged if that property changes. Clients should use setStackComponentFactory(StackDockComponentFactory) if they want to exchange the component permanently.

Parameters:
stackComponent - the new component
Throws:
IllegalArgumentException - if stackComponent is null

getStackComponent

public StackDockComponent getStackComponent()
Gets the currently used StackDockComponent

Returns:
the component
See Also:
setStackComponent(StackDockComponent)

setStackComponentFactory

public void setStackComponentFactory(StackDockComponentFactory factory)
Sets the factory which will be used to create a StackDockComponent for this station.

Parameters:
factory - the new factory, can be null if the default-factory should be used

getStackComponentFactory

public StackDockComponentFactory getStackComponentFactory()
Gets the factory which is used to create a StackDockComponent. This method returns null if no factory was set through setStackComponentFactory(StackDockComponentFactory).

Returns:
the factory or null

callDockUiUpdateTheme

protected void callDockUiUpdateTheme()
                              throws IOException
Description copied from class: AbstractDockableStation
Calls the method DockUI.DockUI.updateTheme(DockStation, DockFactory) with this as the first argument, and an appropriate factory as the second argument.

Specified by:
callDockUiUpdateTheme in class AbstractDockableStation
Throws:
IOException - if the DockUI throws an exception

setDockParent

public void setDockParent(DockStation station)
Description copied from interface: Dockable
Sets the parent property. This Dockable is shown as direct child of station.
Note: this method has to fire a DockHierarchyEvent.
Note: when using a DockHierarchyObserver, invoke DockHierarchyObserver.update() after the property has changed, it will automatically fire a DockHierarchyEvent if necessary.

Specified by:
setDockParent in interface Dockable
Overrides:
setDockParent in class AbstractDockable
Parameters:
station - the parent, may be null if this Dockable is not visible at all.

setController

public void setController(DockController controller)
Description copied from interface: Dockable
Sets the controller in whose realm this Dockable is. A value of null means that this Dockable is not managed by a controller.
Note: this method has to inform all DockHierarchyListeners about the change.
Note: when using a DockHierarchyObserver, invoke DockHierarchyObserver.controllerChanged(DockController)

Specified by:
setController in interface Dockable
Specified by:
setController in interface DockStation
Overrides:
setController in class AbstractDockable
Parameters:
controller - the owner, may be null

getPaint

public DefaultStationPaintValue getPaint()
Gets a StationPaint which is used to paint some lines onto this station. Use a delegate to exchange the paint.

Returns:
the paint

getDisplayerFactory

public DefaultDisplayerFactoryValue getDisplayerFactory()
Gets a DisplayerFactory which is used to create new DockableDisplayer for this station. Use a delegate to exchange the factory.

Returns:
the factory

getDisplayers

public DisplayerCollection getDisplayers()
Gets the set of displayers used on this station.

Returns:
the set of displayers

isStationVisible

public boolean isStationVisible()
Description copied from interface: DockStation
Tells whether this station is visible or not. For example a station on a JFrame is not visible if the frame is minimized.

Specified by:
isStationVisible in interface DockStation
Overrides:
isStationVisible in class AbstractDockableStation
Returns:
whether this station is visible

isVisible

public boolean isVisible(Dockable dockable)
Description copied from interface: DockStation
Tells whether the child dockable is visible or not. Visible means that the component of dockable can be seen by the user. The result must be false if this station is not visible.

Specified by:
isVisible in interface DockStation
Overrides:
isVisible in class AbstractDockableStation
Parameters:
dockable - the child whose visibility-state is questioned
Returns:
whether dockable is visible or not
See Also:
DockStation.isStationVisible()

getDockableCount

public int getDockableCount()
Description copied from interface: DockStation
Gets the number of children.

Specified by:
getDockableCount in interface DockStation
Returns:
the number of children on this station

getDockable

public Dockable getDockable(int index)
Description copied from interface: DockStation
Gets the index'th child of this station.

Specified by:
getDockable in interface DockStation
Parameters:
index - a value between 0 (incl.) and DockStation.getDockableCount() (excl.).
Returns:
a child of this station

getDockableProperty

public DockableProperty getDockableProperty(Dockable dockable,
                                            Dockable target)
Description copied from interface: DockStation
Gets precise information about the location of a child of this station. The result of this method could later be used to invoke DockStation.drop(Dockable, DockableProperty).

Specified by:
getDockableProperty in interface DockStation
Parameters:
dockable - a child of this station, this childs location is asked
target - an optional hint telling for which dockable the location information will be used, can be null. This hint can be used to find a placeholder that should be part of the result.
Returns:
the location
See Also:
DockUtilities.getPropertyChain(DockStation, Dockable)

getFrontDockable

public Dockable getFrontDockable()
Description copied from interface: DockStation
Gets the favorite child of this station. The favorite child is the one child which is specially designated for the user. An example: if the station behaves like a stack, and only the top child is visible, then the favorite child could the the top.
A result of null indicates that there are no children at all, or that there is no favorite child (all children are equal important).
Stations should not change this property directly, they should call DockController.setFocusedDockable(Dockable, boolean) which will then call DockStation.setFrontDockable(Dockable). Note that the DockController itself listens to the DockTitles, and maybe the station doesn't need a logic to decide which child is important.

Specified by:
getFrontDockable in interface DockStation
Returns:
the most important child or null

setFrontDockable

public void setFrontDockable(Dockable dockable)
Description copied from interface: DockStation
Sets the most important child. The station should ensure that this child is visible (assuming the station itself is visible). Read the comment on DockStation.getFrontDockable() how stations can change this property.

Specified by:
setFrontDockable in interface DockStation
Parameters:
dockable - the new favorite child, can be null
See Also:
DockStation.getFrontDockable()

fireDockableSelected

protected void fireDockableSelected()
Informs all DockStationListeners that the selected element of this station changed. This method only fires if there really is a change, hence it can be safely called multiple times.


indexOf

public int indexOf(Dockable dockable)
Gets the index of a child.

Specified by:
indexOf in interface StackDockComponentParent
Parameters:
dockable - the child which is searched
Returns:
the index of dockable or -1 if it was not found

getPlaceholders

public PlaceholderMap getPlaceholders()
Description copied from interface: DockStation
Gets a snapshot of all placeholders that are currently stored in this DockStation. A DockStation is free in the format it chooses to fill the map. The map is to be created with the assumptions that DockStation.getDockableCount() is 0, meaning any existing Dockable gets replaced by its placeholder. The current PlaceholderStrategy should be used to convert Dockables to placeholders.

Specified by:
getPlaceholders in interface DockStation
Returns:
the map of placeholders or null if this station does not support placeholders

setPlaceholders

public void setPlaceholders(PlaceholderMap placeholders)
Description copied from interface: DockStation
Sets an earlier snapshot of the placeholders of this station. This station can assume that it currently does not have any children (that DockStation.getDockableCount() is 0).
This method does nothing if it cannot handle the format or the version of placeholders.

Specified by:
setPlaceholders in interface DockStation
Parameters:
placeholders - some set of placeholders

getPlaceholders

public PlaceholderMap getPlaceholders(Map<Dockable,Integer> children)
Gets the placeholders of this station using a PlaceholderListItemConverter to encode the children of this station. To be exact, the converter puts the following parameters for each Dockable into the map:

Parameters:
children - a unique identifier for each child of this station
Returns:
the map

setPlaceholders

public void setPlaceholders(PlaceholderMap placeholders,
                            Map<Integer,Dockable> children)
Sets all placeholders and children of this station.

Parameters:
placeholders - the new children and placeholders
children - map to convert items to Dockables
Throws:
IllegalStateException - if there are still children on this station

getPlaceholderStrategy

public PlaceholderStrategy getPlaceholderStrategy()
Gets the PlaceholderStrategy that is currently in use.

Returns:
the current strategy, may be null

setPlaceholderStrategy

public void setPlaceholderStrategy(PlaceholderStrategy strategy)
Sets the PlaceholderStrategy to use, null will set the default strategy.

Parameters:
strategy - the new strategy, can be null

setSmallMinimumSize

public void setSmallMinimumSize(boolean smallMinimumSize)
Sets whether the result of Component.getMinimumSize() should be small. A small value allows clients to make this StackDockStation small if it is on a SplitDockStation or another station that pays attention to the minimum size. This even works if the Dockables do not have a small minimum size.

Parameters:
smallMinimumSize - whether the minimum size should be really small

isSmallMinimumSize

public boolean isSmallMinimumSize()
Tells whether the result of Component.getMinimumSize() should be small.

Returns:
whether the minimum size is small
See Also:
setSmallMinimumSize(boolean)

getLayers

public DockStationDropLayer[] getLayers()
Description copied from interface: DockStation
Gets a description of all the areas of the screen where this DockStation can handle a drop event.
Everytime the mouse is moved or released during a drag & drop operation, this method is called for all DockStations. The returned DockStationDropLayers are then filtered and ordered, the resulting order defines the order in which the method DockStation.prepareDrop(StationDropItem) is called.

Specified by:
getLayers in interface DockStation
Overrides:
getLayers in class AbstractDockableStation
Returns:
all the layers of this station, must not be null, must not contain null, must not contain the same entry twice. The array or the DockStationDropLayers may be modified, hence this method should always create new objects.

isOverTabs

public boolean isOverTabs(int x,
                          int y)
Tells whether the point x/y on the screen is exactly over a tab.

Parameters:
x - the x-coordinate on the screen
y - the y-coordinate on the screen
Returns:
true if the point is directly over a tab

isOverTitle

public boolean isOverTitle(int x,
                           int y)
Tells whether the point x/y on the screen is exactly over the only DockTitle currently shown by this station. This method always returns false if this station has not exactly one child.

Parameters:
x - the x-coordinate on the screen
y - the y-coordinate on the screen
Returns:
true if the point is directly over the title

prepareMove

public StationDropOperation prepareMove(StationDropItem item)

prepareDrop

public StationDropOperation prepareDrop(StationDropItem item)
Description copied from interface: DockStation
Prepares this station to get the new child dockable or to move around the known child dockable. The station can refuse dockable, in this case this method just returns null. There are some constraints:

Specified by:
prepareDrop in interface DockStation
Parameters:
item - information about the dockable that is going to be dropped
Returns:
an object describing where the Dockable can be dropped or null if no drop operation is possible

prepareDrag

public StationDragOperation prepareDrag(Dockable dockable)
Description copied from interface: DockStation
Informs this station that a drag and drop operation is in progress and that dockable might be removed from this station.

Specified by:
prepareDrag in interface DockStation
Parameters:
dockable - the child that might be removed in the near future
Returns:
a callback that will be informed when the dockable was removed or the operation canceleled, can be null

drop

public void drop(Dockable dockable)
Description copied from interface: DockStation
Adds dockable to this station. The station can decide by its own where to put dockable.

Specified by:
drop in interface DockStation
Parameters:
dockable - a new child

drop

public void drop(Dockable dockable,
                 boolean autoPlaceholder)
Adds dockable to this station.

Parameters:
dockable - the element to drop
autoPlaceholder - whether the PlaceholderStrategy can be invoked to search for a matching placeholder

drop

public boolean drop(Dockable dockable,
                    DockableProperty property)
Description copied from interface: DockStation
Tries to add dockable to this station such that the location given by property is matched. If property has a successor and points to another station, just call the drop-method of this child-station. Note that property can be of any type and contain invalid information.

Specified by:
drop in interface DockStation
Parameters:
dockable - the new child
property - the location of the child, may be invalid data
Returns:
true if property could be read and dockable was dropped, false otherwise.

drop

public boolean drop(Dockable dockable,
                    StackDockProperty property)
Adds a new child to this station, and tries to match the property as good as possible.

Parameters:
dockable - the new child
property - the preferred location of the child
Returns:
true if the child could be added, false if the child couldn't be added

getInsert

public StackDockStation.Insert getInsert()
Gets the location where StationDropOperation.execute() will insert the next Dockable.

Returns:
the insertion location, can be null

move

public void move(Dockable dockable,
                 DockableProperty property)
Description copied from interface: DockStation
Tries to move the child dockable in such a way, that DockStation.getDockableProperty(Dockable, Dockable) would return a DockableProperty that equals property.
There is no need to give a guarantee that the move successes, and clients should always be prepared for the possibility that this DockStation does nothing at all.

Specified by:
move in interface DockStation
Parameters:
dockable - a child of this station
property - the preferred position of dockable

tabIndexAt

protected StackDockStation.Insert tabIndexAt(int x,
                                             int y)
Tells which gap (between tabs) is chosen if the mouse has the coordinates x/y. If there is no tab at this location, a default-tab is chosen.

Parameters:
x - x-coordinate in the system of this station
y - y-coordinate in the system of this station
Returns:
the location of a tab

exactTabIndexAt

protected StackDockStation.Insert exactTabIndexAt(int x,
                                                  int y)
Gets the gap which is selected when the mouse is at x/y.

Parameters:
x - x-coordinate in the system of this station
y - y-coordinate in the system of this station
Returns:
the location of a tab or null if no tab is under x/y

canDrag

public boolean canDrag(Dockable dockable)
Description copied from interface: DockStation
Tells whether dockable can be removed from this station or not. This method assumes that dockable is a child of this station, if not, then the behavior of this method is unspecified.
Note that the result of this method may not be respected every time, it's more a hint for the controller how to act.

Specified by:
canDrag in interface DockStation
Parameters:
dockable - a child of this station
Returns:
true if dockable can be dragged

drag

public void drag(Dockable dockable)
Description copied from interface: DockStation
Removes a child from this station. This method may be called even if DockStation.canDrag(Dockable) returned false.
Note: clients may need to invoke DockController.freezeLayout() and DockController.meltLayout() to ensure noone else adds or removes Dockables.

Specified by:
drag in interface DockStation
Parameters:
dockable - the child to remove

canReplace

public boolean canReplace(Dockable old,
                          Dockable next)
Description copied from interface: DockStation
Tells whether its possible to replace the child old with next where next is not a child of this station.

Specified by:
canReplace in interface DockStation
Parameters:
old - a child of this station
next - the replacement of next.
Returns:
true if the replacement is possible

replace

public void replace(DockStation old,
                    Dockable next)
Description copied from interface: DockStation
Replaces the child old by next which is not yet a child of this station. This method should not be called if canReplace returned false. This method can assume that next was a child of old but no longer is.

Specified by:
replace in interface DockStation
Parameters:
old - a dockable station that is a child of this station
next - the replacement of old

replace

public void replace(Dockable old,
                    Dockable next)
Description copied from interface: DockStation
Replaces the child old by next which is not yet a child of this station. This method should not be called if canReplace returned false.

Specified by:
replace in interface DockStation
Parameters:
old - a child
next - the replacement of old

replace

public void replace(Dockable old,
                    Dockable next,
                    boolean station)

add

public void add(Dockable dockable,
                int index)
Adds a child to this station at the location index.

Parameters:
dockable - the new child
index - the preferred location of the new child

add

protected void add(Dockable dockable,
                   int index,
                   Path placeholder)
Adds a child to this station at the location index.

Parameters:
dockable - the new child
index - the preferred location of the new child
placeholder - the preferred location of the new child, can be null

addToPanel

protected void addToPanel(StationChildHandle handle,
                          int index,
                          int size)
Adds the contents of handle to the stackComponent of this station. The new handle may or may not already be stored in dockables.

Parameters:
handle - the handle to add
index - the index where to add the handle
size - the current amount of children of the panel, must be either the size of dockables if handle is not yet stored or the size of dockables-1 is handle already is stored.

discard

protected void discard(DockableDisplayer displayer)
Replaces displayer with a new instance.

Parameters:
displayer - the displayer to replace

remove

public void remove(int index)
Removes the child of location index.
Note: clients may need to invoke DockController.freezeLayout() and DockController.meltLayout() to ensure noone else adds or removes Dockables.

Parameters:
index - the location of the child which will be removed

getComponent

public Component getComponent()
Description copied from interface: DockElementRepresentative
Gets the Component which represents the element. The result of this method must not change.

Specified by:
getComponent in interface DockElementRepresentative
Specified by:
getComponent in interface Dockable
Returns:
the component, never null

configureDisplayerHints

public void configureDisplayerHints(DockableDisplayerHints hints)
Description copied from interface: Dockable
Orders this Dockable to configure hints which will be used by the parent component of this element. This Dockable can store a reference to hints and use it to change the hints whenever it is appropriate. This method will be called with null if the link should be broken.

Specified by:
configureDisplayerHints in interface Dockable
Overrides:
configureDisplayerHints in class AbstractDockable
Parameters:
hints - the hints to configure or null if the last hints should no longer be configured by this element

updateConfigurableDisplayerHints

protected void updateConfigurableDisplayerHints()
Updates the displayer hints of this station.


addMouseInputListener

public void addMouseInputListener(MouseInputListener listener)
Description copied from interface: DockElementRepresentative
Adds a listener to this representative, it is not defined what to do with that listener, but most subclasses would just add the listener to their component. It is valid to do nothing.

Specified by:
addMouseInputListener in interface DockElementRepresentative
Specified by:
addMouseInputListener in interface Dockable
Overrides:
addMouseInputListener in class AbstractDockable
Parameters:
listener - the new listener

removeMouseInputListener

public void removeMouseInputListener(MouseInputListener listener)
Description copied from interface: DockElementRepresentative
Removes a listener from this representative.

Specified by:
removeMouseInputListener in interface DockElementRepresentative
Specified by:
removeMouseInputListener in interface Dockable
Overrides:
removeMouseInputListener in class AbstractDockable
Parameters:
listener - the listener to remove

getFactoryID

public String getFactoryID()
Description copied from interface: DockElement
Gets the unique name of the DockFactory which can read and write elements of this type.

Specified by:
getFactoryID in interface DockElement
Returns:
the id of the factory

insertionLine

protected void insertionLine(Rectangle left,
                             Rectangle right,
                             Point a,
                             Point b,
                             boolean leftImportant)
When dropping or moving a Dockable, a line has to be painted between two tabs. This method determines the exact location of that line.

Parameters:
left - the bounds of the tab left to the line, might be null if leftImportant is false.
right - the bounds of the tab right to the line, might be null if leftImportant is true.
a - the first point of the line, should be used as output of this method
b - the second point of the line, should be used as output of this method
leftImportant - true if the mouse is over the left tab, false if the mouse is over the right tab.