Release Notes

Bug Fixes

:: Enhancements ::

  An application with completely separated dockable workspaces (toolbars, float docks, visualizers) can now easily be created. You can find a lot of examples in the package com.javadocking.multi of the samples folder.
    The methods saveProperties() of DockModelPropertiesEncoder and decodeProperties() of DockModelPropertiesDecoder are protected. They can be overriden to save and reload your own properties.
  CompositeTabDocks are added. With this kind of dock, dockables can be organized in nested tabs (see How to Use Composite Docks).
  1958541 The library can be used in applets.
  1921153 Dock and dockable headers listen to property changes (icon, title, and description) of dockables.
  A new header for minimized dockables ImageMinimzeHeader is added. A small image of the dockable is shown in the header. (see How to Use Visualizers (Minimizers, Maximizers, and Externalizers)).
    A factory to create popup menus for one dockable or for all the dockables of a dock is added: PopupMenuFactory. The default implementation is DefaultPopupMenuFactory.
  1821214 LookAndFeelUtil can be used to remove the borders of the split panes that are used by the docking library.
  More implementations of DockableDragPainter are added, to paint a representation of the dockable, while it is dragged (see How to Use Dragging).
    Dockables can be externalized by using an Externalizer (see How to Use Visualizers (Minimizers, Maximizers, and Externalizers)).
  Dockables can be maximized or minimized by using a Visualizer (see How to Use Visualizers (Minimizers, Maximizers, and Externalizers)).
    The components of minimized dockables can be dragged by using a DockingMinimizer.
    A button can move in its tool bar, can be dragged to other tool bars, or can be made floating, by using a ButtonDockable (see How to Use Buttons and Tool Bars).
    LineDocks and GridDocks can be used to show button dockables.
    Tool bars (=line docks with buttons) can be put in BorderDocks or CompositeLineDocks.
  All docking information of an application is kept in the DockingManager.
    Dockables can be wrapped around graphical components. They add dragging functionality to the components (see How to Use Dockables).
    Dockables can have a title, icon, description, docking modes, states, and actions.
    Dockables can be organised in LeafDocks (see How to Use Leaf Docks).
    Special LeafDock implementations: SingleDock, TabDock, LineDock, and GridDock.
    Docks can be organised in CompositeDocks (see How to Use Composite Docks).
    Special CompositeDock implementations: SplitDock, BorderDock, CompositeLineDock, and CompositeGridDock.
    Dockables can float by using the FloatDock (see How to Use Composite Docks).
    The structure of all docks and dockables is kept in the DockModel (see How to Use Dock Models).
    A DockingPath keeps the information about how a dockable was docked in a dock model (see How to Use Docking Paths).
    A DockingPathModel keeps track of all docking paths in an application.
    Information in the dock model and docking path model can be saved with a DockModelEncoder and reloaded with a DockModelDecoder (see How to Use Dock Model Encoders and Docoders).
    Dockables can be added, removed, and moved in docks with the DockingExecutor (see How to Add, Move, and Remove Dockables).
    A DockableEvent is broadcasted when a dockable is added to a leaf dock. A ChildDockEvent is broadcasted when a child dock is added to a composite dock.
    Dockables can be dragged dynamically or statically. With dynamic dragging the dockable is already docked in new docks during dragging. With static dragging the dockable remains in its dock, but the possible new position of the dockable is painted in the new dock (see How to Use Dragging).
    Different painters can be used for showing the dragging (see How to Use Dragging).
    Different mouse events can be used for starting, canceling and stopping dragging.
    Custom components can be used by the docking framework by providing a new implementation of the SwComponentFactory (see How to Use the Component Factory).

:: Incompatibilities ::

  In class saveDockingProperties the name of method saveProperties is changed to saveDockingProperties.
    There can be multiple float docks for one owner window in a dock model. Interface methods removed in com.javadocking.model.DockModel:
  • public FloatDock getFloatDock(Window owner);
  • public String getFloatDockKey(Window owner);
Interface methods added in com.javadocking.model.DockModel:
  • public Set getFloatDockKeys(Window owner);
  The name of class com.javadocking.dockable.action.DockableStateAction changed to com.javadocking.dockable.action.DefaultDockableStateAction. DockableStateAction became an interface!
    Interface method changed in com.javadocking.drag.DragListenerFactory:
  • public DragListener createDragListener(Dock dock);
    Interface method changed in com.javadocking.drag.DraggerFactory:
  • public Dragger createDragger(Dock dock);
    Constructor changed in com.javadocking.drag.DefaultDragListener:
  • public DefaultDragListener(Dock dock)
    Interface method added in com.javadocking.component.SwComponentFactory:
  • public SelectableHeader createCompositeTabDockHeader(Dock childDock, int position);
  Boolean property 'realSizeRectangle' added to com.javadocking.dock.LineDock and com.javadocking.dock.CompositeLineDock. This property decides how docking rectangles are painted in line docks. The default value of this property is 'true'. If you want the old behaviour it should be set to 'false'. For tool bars and minimize bars the property should be 'true', for normal line docks 'false' is better.
    Method removed from com.javadocking.DockingUtil:
  • public static JPopupMenu createPopupMenu(Dockable dockableOfPopup)
    Method createPopupMenu(Dockable dockable) is removed from the classes:
  • com.javadocking.drag.StaticTabDragger
  • com.javadocking.drag.DynamicTabDragger
  • com.javadocking.drag.StaticSingleDragger
  • com.javadocking.drag.StaticDragger
  • com.javadocking.drag.DynamicDragger
  In the interface com.javadocking.drag.painter.DockableDragPainter:
  • Additional paramater for method: public void paintDockableDrag(Dockable dockable, Dock dock, Rectangle rectangle, Point mouseLocation);
  The interface com.javadocking.Dockable:
  • New method: getVisualizer()
  • Additional paramater (visualizer) for method: setState(int newState, Object visualizer)
    Methods removed from com.javadocking.util.DockingUtil because they where useless:
  • public static boolean contains(DockModel dockModel, Dockable dockable)
  • public static Dock searchDock(DockModel dockModel, Dockable dockable)
DockModel is removed as parameter from the methods. This parameter is useless, because the dock model of the docking manager is used:
  • public static String getFloatRootDockKey(DockModel dockModel, Window owner)
    Methods removed from com.javadocking.DockingExecutor:
  • public boolean addDockable(Dock rootDock, Dockable dockable)
  • public boolean addDockable(Dock dock, Dockable dockable, Point relativeLocation, Point dockableOffset)
  • public boolean addDockable(DockingPath dockingPath, Dockable dockable)
  • public void addDockable(LeafDock dock, Dockable dockable, Position position)
  • ppublic boolean removeDockable(Dockable dockable)
The functionality of these methos is combined in the new methods of com.javadocking.DockingExecutor:
  • public boolean changeDocking(Dockable dockable, Dock rootDock)
  • public boolean changeDocking(Dockable dockable, Dock destinationDock, Point relativeLocation, Point dockableOffset)
  • public boolean changeDocking(Dockable dockable, DockingPath dockingPath)
  • public boolean changeDocking(Dockable dockable, LeafDock destinationDock, Position position)
    In com.javadocking.model.DefaultDockingPath.createDockingPath parameter DockModel is removed, because the dock model of the docking manager is used:
  • public static DefaultDockingPath createDockingPath(Dockable dockable)
    In com.javadocking.model.DockModelDecoder:
  • The docking path is always decoded and given to the docking manager. The interface mehod is removed: public DockModel decode(String sourceName, Map dockables, Map owners, DockingPathModel dockingPathModel) throws IOException;
  • Parameter visualizersMap added in method: public DockModel decode(String sourceName, Map dockables, Map owners, Map visualizersMap) throws IOException;
    In com.javadocking.model.DockModelEncoder the parameter DockingPathModel is useless because the docking path model of the docking manager is used:
  • Interface mehod is removed: public void export(DockModel dockModel, String destinationName) throws IOException, IllegalArgumentException;
  • Interface mehod is removed: public void save(DockModel dockModel) throws IOException, IllegalArgumentException;
    com.javadocking.component.TabDockHeader is renamed to com.javadocking.component.SelectableHeader. com.javadocking.component.DefaultTabDockHeader is renamed to com.javadocking.component.SelectableDockableHeader. com.javadocking.component.DefaultSingleDockHeader is renamed to com.javadocking.component.SingleDockHeader.
    com.javadocking.dock.Position became immutable:
  • Interface mehod is removed: public void setPosition(int dimension, int position);
    Methods from com.javadocking.dock.BorderDock are removed:
  • protected Dock getBottomChildDock();
  • protected Dock getCenterChildDock();
  • protected Dock getLeftChildDock();
  • protected Dock getRightChildDock();
  • protected Dock getTopChildDock();
They are replaced by:
  • protected Dock getChildDockOfPosition(int position);
    com.javadocking.dockable.DockingMode.TOOLGRID became com.javadocking.dockable.DockingMode.TOOL_GRID.
    Pakage com.javadocking.toolbar is removed. See How to Use Buttons and Tool Bars for information about the new classes.
    Methods are added to the interface com.javadocking.component.SwComponentFactory:
  • public Header createMaximizeHeader(Dockable dockable, int position);
  • public SelectableHeader createMinimizeHeader(Dockable dockable, int position);
A method is changed in the interface com.javadocking.component.SwComponentFactory:
  • public SelectableHeader createTabDockHeader(Dockable dockable, int position);
    A com.javadocking.event.DockingEvent has now 2 docks in stead of 1: an origin dock and a destination dock. The constructor changed:
  • public DockingEvent(Object source, Dock originDock, Dock destinationDock)
The constructor of com.javadocking.event.DockableEvent changed also:
  • public DockableEvent(Object source, Dock originDock, Dock destinationDock, Dockable dockable)
The constructor of com.javadocking.event.ChildDockEvent changed also:
  • public ChildDockEvent(Object source, CompositeDock originDock, CompositeDock destinationDock, Dock childDock)
The getters of com.javadocking.event.DockingEvent changed:
  • public Dock getOriginDock()
  • public Dock getDestinationDock()
    A com.javadocking.event.DockingListener has now 2 methods:
  • public void dockingWillChange(DockingEvent dockingEvent);
  • public void dockingChanged(DockingEvent dockingEvent);
in stead of different methods for addition, move or removal:
  • public void willBeAdded(DockingEvent dockingEvent);
  • public void added(DockingEvent dockingEvent);
  • public void willBeMoved(DockingEvent dockingEvent);
  • public void moved(DockingEvent dockingEvent);
  • public void willBeRemoved(DockingEvent dockingEvent);
  • public void removed(DockingEvent dockingEvent);
The docking event contains the information what kind of docking change happens:
  • an addition, if the origin dock is null.
  • a move in the same dock, if the origin dock and destination dock are equal.
  • a move to a new dock, if the origin dock and destination dock are not null, but different.
  • a removal, if the destination dock is null.

:: Bug Fixes ::

3384382 The property removeLastEmptyChild of SplitDock is not saved in loadProperties() and loaded in loadProperties().
  3415354 The dockable header sizes are not recalculated after change.
  3415352 In DockingMinimizer the implementation SelectableDockableHeader is used in stead of the interface SelectableDockableHeader.
  3415351 Default child positions not loaded in BorderDocker
  3415349 Only JDialogs possible for floating dockables.
  3415346 After loading, externalized docks have wrong actions.
  3415335 The last position of the divider in a SplitDock is not remembered.
  3384440 There are tabs in the TabDock with empty tooltips.
  3384453 PropertyChanges of a dockable in TabDock not handled.
  2871525 Start the WorkspaceExample, maximize one of the Book dockable, exit the application: ArrayIndexOutOfBoundsException.
2871525 Exception caused by exiting an application with a maximized dockable.
  1904631 Exception caused by unknown Java version.
  1861297 Exception caused by GTK or Nimbus LAF.
  1982033 Removing a docking path from a DefaultDockingPathModel.
  868679 Getter for the JTabbedPane of a TabDock.
1822654 Exception caused by negative size in ImageDockableDragPainter.
  1774473 Forbidden dockable state actions are now disabled.
  1787075 Dockables had sometimes a wrong state, when a group of dockables was dragged.
  1822518 Look and Feel of invisible dockables was not adapted, when the look and feel of the application changed.
1774471 Minimizing a dockable, when closed dockable state was forbidden, caused an exception.
  1764694 Dragged dockables with transparency were black.
  1736529 No docking change event was fired, when dockable was minimized.
  1734593 Dynamic dragging of dockable in float child dock stopped after one docking.
1721504 There were wrong colors for tabs in windows LaF.
  1731618 Unncessary cast to ImageIcon in com.javadocking.component.IconButton. The icon retrieved from the properties of the action is now casted to javax.swing.Icon.
  1728038 Tab components were too big when not selected. Selected and unselected tabs have now a different size.
  1733594 A dockable that is closed is now docked in the right dock after restarting the application.